본문 바로가기
C#

C# Struct vs Class: 차이점과 최적 사용 사례

by 공부봇 2025. 1. 6.
반응형

C#에서 struct와 class는 객체를 정의하는 데 사용되지만, 중요한 차이점이 있으며 각각 특정 상황에서 적합합니다. 이를 비교하고 언제 사용하는 것이 유리한지 설명하겠습니다.


1. 주요 차이점

특성 Struct Class

기본 형식 값 형식 (Value Type) 참조 형식 (Reference Type)
메모리 할당 스택(Stack) 힙(Heap)
복사 방식 값 복사 (deep copy) 참조 복사 (shallow copy)
상속 상속 불가 상속 가능
기본 생성자 기본 생성자를 정의할 수 없음 기본 생성자를 정의할 수 있음
Null 가능성 기본적으로 Null이 될 수 없음 Null 값을 가질 수 있음
변경 가능성 기본적으로 불변 (Immutable) 가변적 (Mutable)

2. Struct를 사용하는 경우

  • 가벼운 데이터 구조
    • 메모리 사용량이 작고, 간단한 데이터 저장소 역할을 하는 경우 (ex. Point, Color 등).
    • 성능이 중요한 경우 스택 메모리를 사용하므로 힙 할당 및 가비지 컬렉션 오버헤드를 줄일 수 있습니다.
  • 불변 객체
    • 값 복사를 통해 데이터를 보호해야 하는 상황에 유리합니다.
    • 기본적으로 immutable 객체로 설계하기 적합합니다.
  • 값 중심의 비교
    • 값 기반의 동등성을 주로 다루는 경우 사용합니다.

Struct 예시

public struct Point
{
    public int X { get; }
    public int Y { get; }

    public Point(int x, int y)
    {
        X = x;
        Y = y;
    }
}

3. Class를 사용하는 경우

  • 복잡한 데이터 구조
    • 많은 속성, 메서드, 복잡한 동작이 포함된 객체를 정의할 때 유리합니다.
    • 힙 메모리를 사용하여 큰 데이터를 효율적으로 처리할 수 있습니다.
  • 가변 객체
    • 객체 상태가 변경될 수 있는 상황에서 적합합니다.
  • 상속 및 다형성
    • 상속, 인터페이스 구현 등 객체 지향 프로그래밍(OOP)을 활용해야 할 때 사용합니다.
  • 참조 기반 데이터 공유
    • 객체를 여러 곳에서 참조로 공유할 필요가 있을 때 유리합니다.

Class 예시

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }

    public void Greet()
    {
        Console.WriteLine($"Hello, my name is {Name}");
    }
}

4. Struct vs Class 사용 사례 비교

사용 사례 Struct를 사용 Class를 사용

좌표나 크기 표현 2D/3D 좌표, 벡터, 크기 등 복잡한 좌표 연산 클래스
설정 값 저장 설정 값의 스냅샷 설정 변경 및 관리 클래스
네트워크 패킷 간단한 데이터 패킷 구조체 패킷 처리 논리를 포함한 복잡한 클래스
게임 엔진 개발 위치, 회전, 크기 등의 값 형식 객체 엔티티 관리 및 동작 클래스

5. 성능 관련 고려사항

  • Struct는 크기가 작고 불변일 때 성능상의 이점이 있지만, 크기가 너무 큰 Struct는 오히려 성능에 부정적인 영향을 줄 수 있습니다.
    예를 들어, 큰 Struct를 메서드 매개변수로 전달하거나 반환할 때 값 복사가 많은 비용을 유발할 수 있습니다.
  • Class는 참조를 통해 데이터 공유가 가능하므로, 데이터 복사가 빈번한 경우 더 효율적입니다.

6. 결론

  • Struct는 가볍고, 불변하며, 간단한 데이터 표현에 적합합니다.
  • Class는 복잡한 동작, 상태 변경, 상속 구조가 필요한 상황에 적합합니다.

필요에 따라 값 복사참조 복사의 차이, 메모리 사용량, 성능 요구 사항 등을 고려하여 선택하세요.

반응형