Struct
// struct 정의
struct data
{
int a;
int b;
void foo() {...}
};
// 변수 선언
data mydata;
// 함수 호출
mydata.foo();
Class
// class 정의
class obj
{
int a;
int b;
void foo() {...};
};
// class 변수 선언
obj myobj;
// 함수 호출
myobj.foo();
차이점?
main에서 호출 할 때 class 는 호출되지 않는다.
> 기본 접근 지정자
class == private
struct == public
struct는 간단한 데이터들의 모음 Plain Old Data (POD) 로 사용
struct mystruct
{
// data 모음
int data;
int x;
int y;
/* 별 다른 로직 없음 */
}
private. protected 멤버나 여러 로직 필요한 경우 > class 사용
C#: class, struct
struct | class |
value type | reference type |
스택(Stack) 할당 | 힙(Heap) 할당 |
상속 X | 상속 O |
● value type
함수의 매개변수로 전달했을 때, 원본 값의 복사본 전달
함수 내에서 전달 받은 값 을 변경해도 원본에 영향 X
스택 영역에 구조체 크기만큼 할당해 > 크기가 변하면 스택 사용량도 늘어나
● reference type
원본을 참조할 수 있는 주소 전달
해당 주소에 있는 원본 수정, C#/JAVA에서 클래스를 매개변수로 넘겨주면 참조 타입이 기본, 함수 내에서 수정 가능
(C++ 의 & 또는 * 를 사용한 pass by reference)
heap에 할당 이후, 전달될 때 주소 값만 전달 > 클래스의 크기가 커져도 사용량 늘지 않음
=> Unity
Vector3, Quaternion 등을 struct 로 사용해 'new' 키워드 사용시 힘에 할당하는 것과 달리 스택 할당
좌표/회전값에 대한 모음 - struct 관리