구조체
- 구조체는 사용자 정의 데이터 유형으로 기본적으로 제공되는 변수 유형이 아님
=> 새로운 데이터 유형으로 사용자가 직접 정의하여 사용함
- 클래스의 참조형식과 달리 구조체는 값 형식 참조
먼저 알아야 할 내용
값 형식 참조와 참조 형식의 차이 (Value type reference, Reference type reference)
- 클래스는 Heap 에 인스턴스가 생성 및 할당되고 Stack 에 변수로 주소 값을 설정함 (인스턴스에 대한 참조를 포함)
- 구조체는 Stack 에 할당되고 생성과 복사 모두 각각의 변수에 포함된 인스턴스에게 이루어짐 (인스턴스를 포함)
=> 구조체 변수에 다른 변수를 대입할 경우, 참조 값이 변하는게 아니라 값 형식으로 구조체가 복사됨
- 구조체는 매개변수가 없는 생성자를 만들 수 없음 => null 이 존재하지 않음
- 차이점은 아니지만, 구조체를 매개변수에 참조 형식으로 넘길 수 있음 (ref 키워드 사용)
< Heap 에 있는 클래스 인스턴스를 가르키는 Stack 의 두 변수 >
(사전 참고자료1)
(사전 참고자료2)
선언 & 사용 방법
구조체를 정의하기 위해서는 struct 문을 사용
< 본인의 프로젝트에 적용을 했었던 구조체 코드 예시 >
구조체를 사용하는 이유
- 여러 데이터 타입들을 집합된 데이터 형태로 저장하기에 적절함 (int, float 등 => A 라는 구조체 데이터 타입으로 묶음)
- 참조 형식이 아니라 값 타입의 변수 사용을 원하는 경우에도 구조체를 사용하기 적절함
- 일반적인 함수로는 여러 자료형을 리턴할 수 없지만, 구조체는 가능함
- 연관된 데이터 타입들을 한 곳에 집합시켰으니 관리와 처리가 수월함 (헷갈리지 않음)
- 함수에 매개변수로 전달할때도 단위로 묶여서 간단함
(안쓰면 불편한 점 / 참고자료)
마무리
- 멤버 함수의 필요성이 적고 타입이 다른 여러 데이터들을 저장 및 사용한다면, 구조체를 사용하기 좋음
=> 단, 구조체에 클래스 타입을 가지는 필드가 존재한다면 힙 영역에 할당되니 주의하여 사용할 필요가 있음
- 구조체 데이터가 방대하다면 스택 오버플로우가 발생할 수 있으니 주의 필요
=> 반면에 스택에 할당되어서 GC (Garbage Collection) 는 발생하지 않음
- 참고자료1
- 참고자료2