[TIL] 클래스와 구조체 차이

백성은·2025년 4월 16일

TIL

목록 보기
14/34

✅ 들어가기 앞서

클래스와 구조체는 C#에서 데이터를 표현할 때 자주 사용되는 기본적인 자료형이다.
둘은 매우 비슷해 보이지만, 메모리 할당과 동작 방식에서 차이를 가진다.
간단하게 둘의 차이와 언제 사용하는지 알아보도록 하자

✅ 클래스와 구조체의 차이

1. 클래스는 참조(reference) 형식이고 구조체는 값(value) 형식

  • 클래스는 객체의 참조를 저장하며, 변수간에 주소를 공유해서 같은 객체를 참조
  • 구조체는 값 그 자체를 저장하고, 변수간에 값을 복사해서 전달

2. 클래스는 힙(heap) 영역에 할당 되지만 구조체는 스택(stack) 영역에 할당

힙과 스택의 특징에 대해 간단하게 정리 해보면

스택(Stack)

  • Last In First Out(LIFO)구조
  • 변수 선언 시 자동으로 메모리에 저장되고, 사용이 끝나면 자동 해제
  • 저장 속도가 매우 빠름
  • 크기가 작고 일시적인 데이터에 적합

힙(Heap)

  • 크기가 크고 복잡한 데이터 저장
  • new 키워드로 생성된 객체는 힙에 저장
  • Garbage Collector가 자동으로 메모리 해제
  • 접근 속도가 스택보다 느림

여기서 알 수 있는것은 클래스는 상대적으로 느리더라도 유연성과 크고 복잡한 데이터 구조에 적합하고, 구조체는 빠르고 작고 간단한 데이터 구조에 적합한 것을 알 수 있다.

3. 구조체는 상속이 불가능

  • 구조체는 상속이 불가능 하기 때문에 확장과 복잡한 기능에 적용하기는 쉽지않다
    (단, 인터페이스 상속은 가능)
  • 반면, 클래스는 다른 클래스를 상속받아 기능을 확장할 수 있다

✅ 사용 예시

클래스 예시

	class Person
    {
    	public string Name;
    }
    
    Person person1 = new Person();
    person1.Name = "철수";
    
    Person person2 = person1;
    person2.Name = "영희";
    Console.WriteLine(person1.Name); // 결과 : "영희"

구조체 예시

	struct Person
    {
    	public string Name;
    }
    
    Person person1 = new Person();
    person1.Name = "철수";
    
    Person person2 = person1;
    person2.Name = "영희";
    Console.WriteLine(person1.Name); // 결과 : "철수"

위의 예시를 봤을때 클래스와 구조체 선언만 다르고, 나머지 코드는 거의 동일해 보이는데 실행 결과는 다르다.

✅ 왜 결과가 다를까?

그 이유는 다음과 같다

  • 클래스는 객체의 주소를 참조하여 그 주소값을 person1과 person2가 공유하고 있어서 결과가 영희가 나오고,
  • 구조체는 값 자체를 복사해 버리기 때문에 person1과 person2는 완전히 다른 복사본이 되며, person2.Name을 변경해도 person1.Name에 영향을 주지 않는다.

쉽게 생각하면 클래스는 객체의 주소를 공유해 변수끼리 연결되어 있다고 한다면, 구조체는 변수의 새로운 복사본이 생긴다고 생각하면 좋을 것 같다.

✅ 언제 사용할까?

클래스 사용 예시

  • 복잡한 객체 모델링
    ex) 게임의 플레이어, 몬스터, 아이템 등
  • 상속과 다형성을 이용한 설계
    ex) Enemy : Character, Player : Character 같은 상속 구조
  • 상태 변화가 잦고, 참조를 통한 객체 관리가 필요한 경우
    ex) 체력 변화, 경험치 증가 등 지속적으로 상태가 바뀌는 경우

구조체 사용 예시

  • 좌표, 색상 등 간단하고 변경 적은 데이터 처리
  • 상속이 필요 없는 단순한 데이터 구조
    ex) 수학 계산용 벡터, 날짜 등
  • 자주 생성되고 삭제되는 데이터

✅ 결론

C#에서 클래스와 구조체는 비슷해 보이지만 메모리 할당, 동작 방식과 사용성 등 여러가지 다른 부분이 있고, 상황에 맞게 올바른 자료형을 선택하면 성능 향상과 유지보수성 개선에 큰 도움이 될 것 같다.

profile
게임 개발일지

0개의 댓글