정리가 필요한 카테고리(추후 정리)/C#,Unity

C#] 구조체(Structure)

TwinParadox 2017. 1. 27. 00:00
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