C#/클래스와 구조체

[C#] 클래스 구조체 차이

도도돋치 2025. 4. 17. 16:46
Contents 접기
728x90

 

1. 기본 개념

C#을 공부하다 보면 class struct의 차이에 대해 혼란스러울 수 있다.
둘 다 데이터를 담는 틀이라는 점은 같지만 동작 방식과 사용 목적이 다르다.
이 글에서는 클래스와 구조체의 차이를 정리하고 언제 어떤 걸 사용하면 좋은지, 그리고 구조체의 한계점까지 알아보자.

 


 

🔹시작전 각각의 개념을 한번 더 복습해보자. 

 

 클래스란?

  • 참조형(reference type)
  • new 키워드로 인스턴스를 생성
  • 힙(Heap) 메모리에 저장됨
  • 변수에 객체의 참조(주소) 를 저장
  • 상속, 다형성 등 객체 지향 프로그래밍(OOP) 특징을 활용할 수 있음
class Person {
    public string Name;
    public int Age;
}

 

 

✅ 구조체란?

  • 값형(value type)
  • new 없이도 사용 가능
  • 스택(Stack) 메모리에 저장됨
  • 변수에 값 자체를 저장
  • 상속 불가능, 메서드 정의는 가능
  • 간단하고 빠른 처리가 필요한 데이터 구조에 적합
struct Point {
    public int X;
    public int Y;
}

 

 

2. 클래스 vs 구조체 차이 정리

구분 클래스(class) 구조체(struct)
메모리 저장 힙 (Heap) 스택 (Stack)
타입 종류 참조형 (Reference Type) 값형 (Value Type)
생성 방식 new로 인스턴스 생성 new 없이도 사용 가능
상속 지원함 기본적으로 불가능
사용 목적 복잡한 객체 관리 가벼운 데이터 저장
기본 생성자 명시적 생성자 작성 가능 매개변수 없는 생성자 불가

 

 

3. 언제 클래스, 언제 구조체를 사용해야 할까?

📘구조체를 사용할 때

  • 데이터 양이 적고, 단순한 값을 담을 때
  • 값의 복사가 필요한 경우
  • 변경이 거의 없는 데이터를 표현할 때
    예: 좌표(Point), 색상(Color), 날짜(DateTime)

📔 클래스를 사용할 때

  • 복잡한 동작과 상태가 있는 경우
  • 상속, 다형성을 사용해야 할 경우
  • 객체가 무겁고 자주 수정되며, 공유되어야 하는 경우
    예: 사용자(User), 주문(Order), 차량(Car)

 

4. 구조체의 한계

구조체는 가볍고 빠르지만, 다음과 같은 제약이 있다.

 

  • 상속 불가
    구조체는 다른 구조체나 클래스를 상속할 수 없다. 다형성을 활용할 수 없기 때문에 유연성이 떨어진다.
  • 기본 생성자 작성 불가
    매개변수가 없는 생성자는 직접 정의할 수 없다. 모든 필드를 초기화하려면 생성자를 따로 만들어야 한다.
  • 값 복사로 인한 성능 문제 가능
    구조체가 크면, 복사할 때 오히려 성능이 떨어질 수 있다. 값이 자주 바뀌고, 크기가 크다면 클래스가 더 적합하다.
  • null 할당 불가 (기본형)
    구조체는 기본적으로 null을 가질 수 없다. (nullable 구조체로 선언 시 가능: Point? pt = null;)

 

📖정리 

✓ 클래스는 참조형으로, 동일한 객체를 여러 참조가 가리킬 수 있음
 구조체는 값형으로, 복사 시 독립적인 사본이 생성됨
 구조체는 가볍고 단순한 데이터에 적합, 클래스는 복잡한 객체 지향 설계에 적합
 설계 목적과 데이터의 성격에 따라 적절히 선택하는 것이 중요함

 구조체는 상속, 다형성을 사용할 수 없고 기본 생성자를 정의할 수 없다는 한계점이 있다.

 상황에 따라 목적에 맞게 선택하는 것이 중요하다.

 

728x90

'C# > 클래스와 구조체' 카테고리의 다른 글

[C#] 상속(Inheritance)  (0) 2025.04.17
[C#] 프로퍼티 (Property)  (0) 2025.04.17
[C#] 객체  (0) 2025.04.17
[C#] 클래스  (0) 2025.04.17
[C#] 구조체  (0) 2025.04.17