구조체란?
데이터와 관련 기능을 캡슐화할 수 있는 값 형식입니다.
struct 키워드를 사용하여 정의할 수 있습니다.
구조체 선언
struct 키워드를 이용하여 구조체를 정의후 선언할 수 있습니다.
세 개의 변수를 가지고 있는 PlayerInfo라는 데이터 형식의 구조체를 정의했습니다.
struct PlayerInfo
{
public string nickname;
public string id;
public int level;
}
PlayerInfo 구조체를 이용해 게임을 하고있는 플레이어의 정보를 선언해 보겠습니다.
구조체의 변수가 public 접근제한자인 경우 접근 및 값을 대입할 수 있습니다.
● 구조체 변수의 멤버 변수에 .을 통해 접근할 수 있습니다.
PlayerInfo info = new PlayerInfo();
info.nickname = "밍남";
info.id = "qwerasdf";
info.level = 1;
구조체와 클래스의 차이점
| 클래스 | 구조체 | |
| 형식 | 참조 형식 | 값 형식 |
| 메모리 할당 | 힙 메모리 | 스택 메모리 |
| 메모리 해제 | 가비지 컬렉터(GC)로 해제 | 호출 종료 시 자동으로 정리 |
| 상속 | 상속 가능 | 상속 불가 |
| 초기화 | new 키워드로 생성해야 함 | new 없이도 가능 (단, 모든 필드 직접 초기화 필요) |
| 용도 | 복잡한 구조, 데이터가 많을 때, 상속이 필요할 때 |
작은 데이터 묶음일 때, 값이 변하지 않을 경우 |
● 클래스는 참조 형식, 구조체는 값 형식입니다.
● 클래스는 상속을 지원하지만 구조체는 상속을 지원하지 않습니다.
● 클래스는 가비지 컬렉터를 이용해 메모리 관리가 되고, 구조체는 스택에서 할당과 해제가 자동으로 이루어집니다.
● 클래스는 같은 주소를 참조하지만 구조체는 값을 복사시 서로 다른 객체가 됩니다.
● 복잡한 데이터 구조나 많은 양의 데이터가 필요한 경우 혹은 상속이 필요한 경우에는 클래스를 사용합니다.
● 데이터의 크기가 크지 않으며 불변성이 필요한 경우 구조체를 사용합니다.
생성자와 소멸자에서의 차이
클래스는 따로 정의하지 않을 경우 기본 생성자가 자동으로 제공되며, 직접 정의할 수도 있습니다.
객체는 new 키워드로 생성해야합니다.
가비지 컬렉터(GC)에 의해 자동으로 소멸하며, 일반적으로 소멸자를 따로 구현하지 않습니다.
구조체는 매개변수가 있는 생성자만 직접 정의할 수 있습니다.
생성자를 따로 정의하지 않을 경우 구조체 내의 필드가 모두 기본값으로 초기화됩니다.
소멸자를 따로 정의할 수 없지만 스택에서 자동으로 소멸합니다.
'개발, IT > C#' 카테고리의 다른 글
| [유니티 / C#] 프로퍼티 (Property) (0) | 2025.09.15 |
|---|---|
| [유니티 / C#] 객체 지향 프로그래밍과 SOLID 원칙 (0) | 2025.09.15 |
| [유니티 / C#] 열거형(Enumeration Type) (0) | 2025.09.12 |
| [유니티 / C#] 함수 (0) | 2025.09.12 |
| [유니티 / C#] 배열 (0) | 2025.09.12 |