C# 구조체 고급 활용: 인터페이스 구현

C# 구조체 고급 활용: 인터페이스 구현

이번 글에서는 C# 구조체의 고급 활용 방법에 대해 알아보겠습니다. 구조체는 C#의 핵심 구성 요소 중 하나입니다. 이전 글에서는 구조체의 기본적인 개념에 대해 알아보았다면, 이번에는 좀 더 깊게 다뤄보겠습니다.

1. 구조체의 제약사항

구조체는 몇 가지 중요한 제약사항이 있습니다.

  • 구조체는 상속될 수 없습니다.
  • 구조체는 기본 생성자를 가질 수 없습니다.
  • 구조체의 인스턴스는 null이 될 수 없습니다.

2. 값 타입의 특징

구조체는 값 타입으로 동작하며 스택에 할당됩니다. 이로 인해 참조 타입인 클래스와 다른 메모리 관리 방식을 가지게 됩니다. 값 타입은 실제 값을 복사하여 다루므로 참조와 달리 원본 데이터에 영향을 주지 않습니다.

// 값 타입 예제를 위한 구조체 정의
struct ValueExample
{
    public int number;

    // 생성자 정의: 초기값 설정
    public ValueExample(int num)
    {
        number = num;
    }
}

// ValueExample의 인스턴스 생성 및 초기화
ValueExample a = new ValueExample(5);

// a의 값을 b에 복사 (값 복사)
ValueExample b = a; 

b.number = 10; // b의 number 값을 변경

// a는 원본이므로 값은 변경되지 않았음
Console.WriteLine(a.number); // 5 

// b는 복사된 값이므로 값이 10으로 변경됨
Console.WriteLine(b.number); // 10 

3. 고급 메서드와 속성 활용

구조체 내에서도 속성, 인덱서, 이벤트 등 다양한 멤버를 사용할 수 있습니다. 특히 속성을 통해 변수의 접근을 제어하거나 추가적인 로직을 수행할 수 있습니다.

// 구조체 정의
struct EnhancedPoint
{
    // private 필드
    private int x;
    
    // X 속성: 읽기와 쓰기 가능
    // 음수 값이 들어오면 저장되지 않는 속성
    public int X
    {
        get { return x; }
        set { if (value >= 0) x = value; } // 값이 0 이상일 때만 x에 할당
    }

    // ... 추가 메서드와 속성 정의 ...
}

// EnhancedPoint 구조체의 인스턴스 생성
EnhancedPoint p = new EnhancedPoint();
p.X = 5; // X 속성에 5 할당
Console.WriteLine(p.X); // X 속성의 값을 출력: 5

4. 인터페이스 구현

구조체는 인터페이스를 구현할 수 있습니다. 이를 통해 특정 동작을 보장하거나 다양한 유형 간에 일관된 동작을 제공할 수 있습니다.

// 인터페이스 정의
interface IDisplay
{
    void Display();
}

// 구조체에서 IDisplay 인터페이스를 구현
struct DisplayPoint : IDisplay
{
    public int x, y;

    // IDisplay의 Display 메서드 구현
    public void Display()
    {
        Console.WriteLine($"Point: ({x}, {y})");
    }
}

// DisplayPoint 구조체의 인스턴스 생성
DisplayPoint dp = new DisplayPoint { x = 10, y = 20 };
dp.Display();  // 구조체의 Display 메서드 호출

5. 결론

C#의 구조체는 다양한 활용 범위와 기능을 제공합니다. 고급 기능을 이해하고 활용하면 코드의 효율성과 안정성을 더욱 높일 수 있습니다.

참고자료

함께 보면 좋은 이전 게시글

위로 스크롤