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#의 구조체는 다양한 활용 범위와 기능을 제공합니다. 고급 기능을 이해하고 활용하면 코드의 효율성과 안정성을 더욱 높일 수 있습니다.
참고자료
- Microsoft 공식 문서: 구조체 (C# 프로그래밍 가이드)
함께 보면 좋은 이전 게시글
- C# 프로그래밍 언어 소개, 주요 특징, 활용 분야
- C# 함수/메소드 기본 개념 및 작성 방법
- C# 매개변수 활용: ref, out, in, params
- C# 메서드 오버로딩의 기본 개념 및 사용 예제
- C#에서의 예외 처리 방법: Exception, throw
이 글이 도움이 되셨다면 공유 부탁 드립니다.