구조체와 클래스
구조체 Struct
형이 다른 여러 데이터들을 하나로 통합해 관리할 수 있는 값형 데이터.
- 클래스와 거의 비슷하게 필드와 메소드를 가질 수 있다.
- 클래스와 비슷하지만, 메모리 공간에 대한 구조가 다르다. -> 객체가 스택에 할당됨
- 가용 메모리 크기가 작다.
- GC(Garbage Collector)에 의해 관리되지 않아, 성능상 이점이 있다.
: 구조체는 함수가 종료될 때 자동으로 메모리가 정리됨!
new
연산자 없이도 인스턴스화 가능- 객체를 전달할 때: 원본의 내용을 복사한 새로운 객체를 생성하여 전달!
-> 자신의 크기만큼 스택 공간을 새로이 할당하므로, 크기가 클수록 메모리 사용량이 늘어남
여기서 생성된 구조체 객체는 함수가 종료되면 자동으로 메모리에서 해제됨! - 다른 구조체, 클래스를 상속할 수 없으며 상속의 원본이 될 수 없다. BUT, 인터페이스 장착은 가능
- 초기화 불가능: ERROR!
const
또는static
으로 선언한 필드만 초기화 가능
- 구조체 내에 클래스를 멤버 변수로 선언할 경우, 클래스처럼 힙 영역에 할당됨!
- 변수의 크기가 작거나/ 수명이 짧고/ 자주 할당되는 객체를 만드는 데 적합
- 유니티에서는 position, color, quaternion, rotation, scale 등이 구조체로 구현되어있음
클래스 Class
데이터와 처리를 모아놓은 것으로, 참조형 타입.
- GC에 의해 자동으로 메모리가 관리된다.
- 객체를 전달할 때: 원본의 메모리 주소를 전달 (원본이 그대로 넘어감)
: 데이터를 변경하면 원본의 데이터가 변경되며, 함수가 종료되어도 원본 객체는 유효함 - 메모리 보다는 기능적 측면이 더 중요할 때 사용
구조체와 클래스의 차이
C++ | C# | |
처리 속도 | 비교적 느림 | 비교적 빠름 |
가용 메모리 크기 | 비교적 큼 | 작음 |
객체 할당 영역 | 힙 | 스택 |
출처
- 공돌창고
- 아마군의 Dev로그
- 뻔뻔한 블로그
- C#이 보이는 그림책, 성안당
'SW Programming > C#' 카테고리의 다른 글
[Unity/C#] 상속과 클래스 구조 (0) | 2023.03.29 |
---|---|
배열과 리스트 (0) | 2022.07.04 |
[C#] 상속과 다형성 (0) | 2022.06.01 |
[C#] 인터페이스와 추상 클래스, 추상 메소드와 가상 메소드에 대하여 (0) | 2022.05.12 |