Home Class 와 Struct 차이
Post
Cancel

Class 와 Struct 차이

1. 할당되는 메모리 영역의 차이

 할당영역 특징장점단점
ClassHeap힙은 런타임에 할당되는 영역 new 등의 동적 할당을 통해 프로그램 실행 중 필요한 만큼 가변적으로 확보 정리에는 delete 나 가비지 컬렉션 등의 메모리 관리가 필요힙 영역에 생성되어 메모리 크기에 좀 더 자유로움가비지 컬렉션에 의해 성능에 대한 영향이 있음
StructStack스택은 함수 내 포함되어 있는 지역 변수 등이 저장되는 영역이므로 미리 크기를 파악할 수 있어 컴파일 타임에 결정 함수가 종료되는 시점에 자동으로 정리되는 영역스택 영역에 생성되기에 가비지 컬렉션 영향을 받지 않아 성능 면에선 상대적으로 이점메모리 크기 면에서 한정적

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;
}
This post is licensed under CC BY 4.0 by the author.