본문 바로가기

👩‍💻 도비는 공부중/📚 기초부터 차근차근

[C++/C#] Class | Struct

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 관리