[C#] 구조체 (struct)

Learning 

When: 1학년 7월 23일

 

How:

여름 방학 캠프 수업에서 여러 종류의 타입을 넣을 수 있는 자료형에 대해 선생님께서 질문하셨는데, 구조체를 예전에 잠깐 공부해 봤지만 막상 실제 상황이 되니 떠오르진 않았기 때문에 확실히 알고자 구조체에 대해 공부하게 되었습니다.

 

Understanding:

  • 정의 : 구조체는 클래스와 비슷한 객체의 설계도라는 개념입니다.
    가끔 게임을 만들다보면 Vector3나 Color 타입은 밝은 초록색인 Transform이나 GameObject와
    다르게 글자가 녹색으로 뜨면서 마우스를 가져다 대면 "struct"라는 글자가 뜨는 것을 보신 적이
    있으실 겁니다. 여기서 struct가 구조체이며, 이것에 대해 잘 알지 못하는 상태에선 클래스와
    거의 똑같이 동작하기 때문에 어떤 차이가 있는지 잘 모르시고 계실 수도 있습니다.
    사실 특정한 상황이 아니면 클래스와 구조체는 거의 비슷하게 쓰입니다.

  • 클래스와의 차이점 : 구조체는 자신의 타입으로 하는 변수에 new 연산자로 인스턴스, 즉 객체를
    만들어 변수가 객체를 저장하게 만들어 사용합니다. 방금 한 설명만으로는 클래스와 구조체의 차이가 
    나타나지 않고, 변수가 객체를 저장하게 만든다라는 말을 조금 더 자세히 들여다보면 차이를 알 수 
    있습니다. 클래스의 변수가 힙에 있는 객체를 참조하는 것에 반해 구조체의 객체는 스택에 값이 전부
     들어있습니다. 즉 구조체는 값 형식, 클래스는 참조 형식이라는 커다란 차이점이 있습니다.
  • 형식의 차이로 생기는 차이점 : 방금 구조체는 값 형식이라는 차이점이 있다고 했는데, 값 형식과 
    참조 형식의 자세한 차이는 이 글을 통해 알아보시면 될 것 같고, 여기선 아래의 표로 간단하게 
    차이점만 나열해 보겠습니다.
클래스는 값이 복사되지 않기 때문에 복사를 시도하면 2개의 변수가 하나의 객체를 참조하게 됩니다.
Car 람보르기니 = new Car();
Car 부가티 = 람보르니기; // 람보르기니와 부가티 둘 다 같은 객체를 참조중. 둘 중 하나의 변수를 통하여 객체를 바꾸든
구조체는 복사를 하면 스택에 생긴 객체도 2개가 되어 각각 변수가 다른 객체를 저장하게 됩니다.
int a = 10;
int b = a; // a, b 모두 다른 10을 저장중, 둘 중 하나의 값을 바꿔도 다른 하나에는 영향이 가지 않음
클래스는 다른 클래스로부터 상속받는 것이 가능합니다. 구조체는 인터페이스를 제외한 클래스, 구조체을 부모로 둘 수 없습니다. 즉 상속받을 수 없습니다.
  • 용도 : 구조체와 클래스의 차이점을 알아도 왜 따로 있는지, 구조체는 어디에 쓰는지 헷갈리실 수
    있는데, 구조체는 데이터를 보관하는 저장소 같은 역할을 많이 합니다. 복사할 경우 값이 복사되고
    원본을 유지시킬 수 있어 깔끔하기 때문이죠. 하지만 그렇기에 작은 데이터를 담는 것이
    적합합니다. 복사할 때 모든 값이 복사되면 그 값이 커질수록 컴퓨터 입장에선 부담이 커지기
    때문입니다. Unity 작업을 하다 보면 위치를 저장하는 Vector, 색을 저장하는 Color 타입이
    struct, 즉 구조체로 정의되었다는 것을 보실 수 있는데,
    그 이유가 방금 설명한 구조체의 특징 때문입니다.

 

Result: 구조체는 잘 쓰면 데이터를 안전하고 편리하게 다룰 수 있기 때문에
더욱 공부해서 적절한 상황에 잘 쓸 수 있게 되게 공부해야 할 것 같습니다.

'C#' 카테고리의 다른 글

[C#] 스프라이트 라이브러리(Sprite Library), Sprite Resolver  (2) 2025.07.30
[C#] Queue 자료형, 자료 구조  (1) 2025.07.29
[C#] var 키워드  (0) 2025.07.27
[C#] 흐름 제어 키워드  (0) 2025.07.26
[C#] 트리(tree) 자료 구조  (3) 2025.07.25