struct와 class의 차이점

Youngmin Choi·2021년 9월 9일
0

ETC

목록 보기
3/7

1. Type의 차이

  • 'struct'는 값 타입(Value) / Stack 메모리에 생성 /깊은복사(복사된 두 객체는 완전히 독립적인 메모리를 차지한다.)
  • 'class'는 참조 타입(Reference) / Heap 메모리에 생성 / 얕은복사(값 자체를 복사하는 것이 아니라 주소값을 복사하여 같은 메모리를 가리킨다.)

2. 속도는 'struct', 메모리 절약은 'class'

  • 'struct'는 Stack 메모리에 바로 할당되기 때문에 GC가 발생하지 않고, 'class'는 인스턴스를 생성할 때 마다 Heap 메모리에 할당되기 때문에 값을 폐기하기 위해서는 GC가 필요하다.
  • 참조형식인 'class'는 값들을 가리키는 주소만 Stack에 저장하지만, 'struct'는 가지고 있는 변수들의 값들 모두를 Stack에 저장하기 때문에 그 크기만큼 Stack의 위치 역시 커진다. 하지만 Stack은 크기가 제한적이기 때문에 너무 많은 양을 가지게 되면 Stack Overflow가 발생할 수 있는 위험이 있다!

Q. 'struct'는 언제 사용할까?

  • 상황에 맞게 적절한 곳에 사용하자!
    변수의 크기가 작거나, 수명이 짧고, 자주 할당되는 객체는 'struct'로 만들어 주는것이 좋다! (스택메모리 영역) Unity에서는 'Position, Quaternion, Rotation, Scale'등이 'struct'로 구현 되어 있다고 한다.


    사실상 '2.'에서 'class'가 메모리 절약이 상대적으로 잘 된다고 하지만 Unity에서 GC가 기존 Java의 GC와는 조금 다를 뿐더러 효과가 생각보다 미비하다고 보는 경우가 많다고 한다. 즉, 해제는 했는데 찌꺼기(메모리를 잡아먹고있음)가 남아있는 경우다. 결론은 new할당과 같은 힙 메모리를 빈번하게 사용하지 말고 캐싱하여 사용하는걸 권장한다.
profile
Always, Continually, In all circumstance

0개의 댓글