C#객체지향

struct 기본

작은 데이터 묶음을 값 타입으로 표현할 때 쓰는 C# `struct`의 기본 역할과 클래스와의 차이를 정리합니다.

마지막 수정 2026년 3월 19일

기본 패턴

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

설명

  • struct는 값 타입이므로 대입하거나 전달할 때 복사가 일어나는 것이 기본 동작입니다.
  • 좌표, 색상, 시간 조각처럼 비교적 작고 독립적인 데이터를 표현할 때 잘 맞습니다.
  • 클래스보다 가볍게 보일 수 있지만, 복사가 잦아지면 오히려 비용이 커질 수 있습니다.
  • 최근 C#에서는 init 접근자와 함께 불변에 가까운 struct를 만드는 패턴이 자주 쓰입니다.

짧은 예제

csharp
Point start = new Point { X = 10, Y = 20 };
Point end = start;

end = new Point { X = 30, Y = 40 };

Console.WriteLine($"{start.X}, {start.Y}");
Console.WriteLine($"{end.X}, {end.Y}");

빠른 정리

항목설명
struct값 타입 사용자 정의 구조
대입값 복사가 기본
작은 데이터좌표, 색상, 범위 같은 값 모델에 적합
init생성 이후 변경을 제한하는 패턴에 유용
클래스와 차이참조 타입이 아니라 값 타입

주의할 점

struct를 자주 복사하면 성능이 나빠질 수 있습니다. "클래스보다 가볍다"는 인상만으로 선택하지 말고 실제 사용 패턴을 함께 봐야 합니다.