728x90
### 구조체(Structure)
참조 형식이 클래스와는 달리 구조체는 값 형식임.
구조체는 상속을 지원하지 않음.(System.ValueType을 암묵적으로 상속한다는 점은 제외)
구조체는 클래스가 지원하는 요소 중,
매개 변수가 없는 생성자, 필드 초기화, 종료자, 가상 멤버와 보호된 멤버를 제외한 모든 요소를 지원함.
구조체는 값 형식 의미론이 바람직한 경우에 적합하며, 일례로 커스텀 수치 형식이 있음.
수치 형식에서는 배정 시 참조가 아니라 값을 복사하는 것이 더 자연스럽기 때문임.
구조체는 값 형식이기 때문에, 인스턴스화 시 힙에 객체를 할당할 필요가 없어 한 형식의 인스턴스를 많이 생성하는 경우 구조체가 더 효율적일 수 있음.
## 구조체 생성 의미론
구조체에는 매개 변수 없는 생성자가 암묵적으로 존재하며 프로그래머는 이를 직접 재정의할 수 없음.
생성자는 구조체의 필드들의 모든 비트를 0으로 초기화함.
구조체의 생성자를 프로그래머가 직접 정의할 때, 생성자에서 모든 필드를 명시적으로 배정해야 함.
구조체에서는 필드 초기치 구문을 사용할 수 없음.
public struc Point { int x, y; public Point(int x, int y) { this.x = x; this.y = y; } } /* ... */ Point p1 = new Point(); // p1.x, p1.y = 0 Point p2 = new Point(1,1); // p2.x, p2.y = 1
아래 코드는 컴파일 오류를 발생시키며, 이는 클래스가 아닌 구조체이기 때문에 발생함.
public struct Point { int x= 1; // 필드 초기화 int y; public Point() {} // 매개변수 없는 생성자 public Point(int x) { thix.x = x; } // 필드 y에 대한 배정 없음 }
728x90
'정리가 필요한 카테고리(추후 정리) > C#,Unity' 카테고리의 다른 글
C#] 제네릭(Generic) - 2 (0) | 2017.02.02 |
---|---|
C#] Delegate(델리게이트, 대리자) - 1 (0) | 2017.02.01 |
C#] 제네릭(Generic) - 1 (0) | 2017.01.24 |
C#] 열거형(Enum Type) (60) | 2017.01.23 |
C#] 부분 형식, 부분 메서드 (0) | 2017.01.18 |