Unity 내일배움캠프 TIL 1027 | 클래스(Class)와 구조체(Struct)

cheeseonrose·2023년 10월 27일
0

Unity 내일배움캠프

목록 보기
65/89
post-thumbnail

💡 클래스(Class)와 구조체(Struct)

🍁 공통점

  • 사용자 정의 형식을 만드는 데 사용된다

🍂 차이점

구조체클래스
형식참조 형식
스택에 할당에 할당
값이 복사됨참조로 전달
상속 X단일/다중 상속 O
작은 크기의 데이터 저장, 단순한 데이터 구조에 적합복잡한 객체 표현과 다양한 기능 제공

🌾 클래스와 구조체의 메모리 할당

  • 구조체 객체가 힙 영역에 메모리 할당되는 경우가 있다.
    1. 모든 필드의 합이 16byte를 넘거나
    2. 구조체 안에 클래스 타입을 필드로 가지는 경우이다.
  • 1과 2의 경우 혹은 상속이 필요한 경우가 아니라면 구조체를 사용하는 것이 성능 상 이점이 있다.
  • 스택의 경우 힙에 비해 사용할 수 있는 메모리 크기가 작고 한정적이지만,
    가비지 컬렉션에 의해 관리되지 않기 때문에 성능 상 많은 장점이 있기 때문이다.

출처 - C#/.NET 구조체(struct)와 클래스(class)의 차이


+

추가!!

  • 많은 기술 블로그에서 구조체 크기가 16byte를 넘으면 힙에 할당된다고 되어있는데, 이에 대해 직접 실험하신 분이 계신다!
  • 아래 내용에 의하면 구조체 크기가 16byte를 넘어도 힙에 할당되지 않으며, 구조체의 크기를 강제로 늘려 빌드할 경우 StackOverflowException이 발생한다고 한다.
    (stack에 할당을 시도하는데, stack 크기가 부족하기 때문)
  • 또한 구조체 안에 클래스 타입을 필드로 가진다고 해서 구조체 자체가 힙에 할당되지는 않는다고 한다.
  • 구조체와 클래스의 메모리 할당과 관련된 자세한 내용은 다음에 좀 더 공부해봐야겠당

출처 - C# - 구조체의 크기가 16바이트가 넘어가면 힙에 할당된다?



끗!

0개의 댓글