티스토리 뷰
C#의 복합 데이터 형식에는 클래스 말고도 구조체라는 것이 있다.
구조체는 클래스의 사촌지간쯤 된다고 생각하면 편하다.
구조체도 필드와 메소드를 가질 수 있고 상당 부분이 비슷하다.
다음과 같이 struct 키워드를 이용해 선언한다.
struct 구조체명
{
}
////
struct ExampleStruct
{
public int Field1;
public int Field2;
}
구조체는 데이터를 담기 위한 자료 구조로 사용된다.
따라서 은닉성은 고려하지 않고 편의를 위해 필드를 public으로 선언해서 사용하는 경우가 많다.
다음 표는 구조체와 클래스의 차이점이다.
특징 | 클래스 | 구조체 |
키워드 | class | struct |
형식 | 참조 형식 | 값 형식 |
복사 | 얕은 복사 | 깊은 복사 |
인스턴스 생성 | new 연산자와 생성자 필요 | 선언만으로도 생성 |
생성자 | 매개 변수 없어도 생성자 선언 가능 | 매개변수 없으면 생성자 선언 불가 |
상속 | 가능 | 모든 구조체는 System.ValueType을 직접 상속받고 있다. |
가장 큰 차이점은 클래스는 참조 형식이고 구조체는 값 형식인 것이다.
구조체의 인스턴스느 스택에 할당되고 블록이 끝나는 지점에서 메모리에서 사라진다.
따라서 가비지 컬렉터를 귀찮게 하지도 않고 즉시 메모리에서 제거가 되서 성능의 이점을 가진다.
예를 들면 사용이 끝났을 때 해제되어야 할 인스턴스가 클래스 형태면 해당 블록이 끝난 이후에도 메모리에
계속 남아있다가 가비지 컬렉터가 처리해야 되서 성능에 저하가 발생한다. 그러나 이것을 구조체로 구현할 경우에는
알아서 메모리에서 제거가 된다.
구조체의 깊은 복사의 예
ExampleStruct st;
st.Field1 = 1;
st.Field2 = 3;
ExampleStruct st2;
st2 = st1;
st.Field1 = 4;
//st의 Field1은 1이고 st2의 Field1은 4가 된다.
'C#' 카테고리의 다른 글
7. 프로퍼티 (0) | 2020.02.03 |
---|---|
6. 인터페이스와 추상클래스 (0) | 2020.01.29 |
4. 클래스(4) - 오버라이딩 (0) | 2020.01.29 |
4. 클래스(3) - 상속, is와 as (0) | 2020.01.28 |
4. 클래스(2) - 정적필드, this 키워드, 접근 한정자 (0) | 2020.01.28 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 언리얼엔진
- C언어
- 글로
- javascript
- 동영상을
- 기초
- 선택자
- PHP&MySQL
- 알고리즘
- GRID
- 변수
- 관계형데이터베이스
- 생활코딩
- Link
- 차이점
- inline
- 객체
- 안드로이드 스튜디오
- php
- 정렬
- 생활코딩#동영상을#글로#html
- 언리얼엔진4
- TAG
- 조건문
- HTML
- visual studio code
- 네트워크 프로그래밍
- 문자열
- 생활코딩#MySQL
- css
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함