1. 할당되는 메모리 영역의 차이
할당영역 | 특징 | 장점 | 단점 | |
---|---|---|---|---|
Class | Heap | 힙은 런타임에 할당되는 영역 new 등의 동적 할당을 통해 프로그램 실행 중 필요한 만큼 가변적으로 확보 정리에는 delete 나 가비지 컬렉션 등의 메모리 관리가 필요 | 힙 영역에 생성되어 메모리 크기에 좀 더 자유로움 | 가비지 컬렉션에 의해 성능에 대한 영향이 있음 |
Struct | Stack | 스택은 함수 내 포함되어 있는 지역 변수 등이 저장되는 영역이므로 미리 크기를 파악할 수 있어 컴파일 타임에 결정 함수가 종료되는 시점에 자동으로 정리되는 영역 | 스택 영역에 생성되기에 가비지 컬렉션 영향을 받지 않아 성능 면에선 상대적으로 이점 | 메모리 크기 면에서 한정적 |
2. 참조 타입과 값 타임
- Class: 참조(Reference) 타입
- 참조 타입: 변수에 직접 데이터를 저장하는 것이 아닌 데이터가 저장된 위치를 참조하는 형식(new 키워드 사용)
- 참조 타입이므로, 객체를 전달할 때 그 객체는 항상 원본과 동일
- 객체 전달 시, 자신의 메모리 주소 한 개만 넘겨주면 끝
- Struct: 값(Value) 타입
- 값 타입: 어떤 데이터 타입을 가진 변수를 선언하고 그곳에서 직접 값을 저장하는 방식
- 값 타입이므로, 객체를 전달하면 원본과 다른 복사본이 생성
- 객체 전달 시, 값을 복사해야 하므로 자신의 크기 만큼의 스택 공간을 추가로 할당
- 크기가 클수록 메모리 사용량도 늘어남
- 스택은 공간에 제약이 있기 때문에 과하게 커지면 스택 오버플로우 발생 가능
3. Struct는 Class와 다르게 상속이 불가능하다
4. Struct를 사용하면 좋은 경우
- 객체 내 멤버 변수가 primitive type일 때
- 객체의 크기가 작음
- 값이 변하지 않음
- 박싱이 자주 일어나지 않음
즉, primitive type의 변수들로 구성되면서 단순한 데이터들을 저장할 때 사용
Ex)
1
2
3
4
5
struct Point
{
int x;
int y;
}