2021
04.13

타입

클래스는 '참조 타입'이며, 구조체는 '값 타입'이다.

 - 함수의 매개변수로 넘겨준다면, 클래스는 참조라서 메모리 주소만을 넘기고, 구조체는 값을 복사해서 스택에 다시 할당한다.

 - 값 자체를 복사해야 하기 때문에 구조체 자체의 크기가 크면 클수록 메모리 사용량이 늘어나며, 스택은 메모리가 한정적이기 때문에 스택 오버플로우의 위험이 있다.

 

메모리

클래스는 '힙 영역'에 할당되며, 구조체는 '스택 영역'에 할당된다.

 - 클래스는 힙에 할당되기 때문에 메모리 크기는 여유롭지만 가비지 컬렉션에 의해서 수거되야한다.

 - 반대로 구조체는 스택에 할당되기 때문에 메모리 크기가 한정적인 대신 메모리 해제가 즉시 일어난다.

 

  클래스 구조체
타입 참조 타입(Reference) 값 타입(Value)
메모리 힙(heap) 영역 스택(stack) 영역

 

결론적으로 클래스와 구조체는 상황에 따라서 사용해야한다.

클래스를 사용하면 가비지 컬렉션의 호출 빈도가 잦아지며, 힙 영역을 사용하기에 구조체보다 접근 속도가 느리다

구조체를 사용하면 접근 속도는 빠르지만, 함수를 호출할 때마다 복사본이 생성된다.

 

 

기본 접근 한정자

C++ 에서는 구조체 : public / 클래스 : private

C#에서는 구조체 : private / 클래스 : private 

 

 

데이터컨테이너로서 클래스 vs 구조체

데이터가 많다면 구조체보다는 클래스를 사용하는게 바람직하다.

데이터를 자주 복사한다면 구조체보다는 클래스를 사용하는게 바람직하다.

메모리를 희생하고 성능을 얻고싶다면 구조체를 사용하자.

 

 

COMMENT