반응형
[C#] 구조체(Struct) : 경량화된 값 형식
안녕하세요! 이번 포스트에서는 C#의 구조체(Struct)에 대해 알아보겠습니다. 구조체는 값(Value) 형식을 나타내는 데이터 구조로, 클래스와 유사하지만 몇 가지 중요한 차이점이 있습니다.
구조체(Struct)란 무엇인가요?
구조체는 클래스와 유사한 형태를 가지고 있지만, 값(Value) 형식으로 선언됩니다. 구조체는 스택(Stack) 메모리에 할당되어 가비지 컬렉션의 대상이 아니며, 경량화된 데이터 형식으로 사용됩니다.
구조체의 선언
public struct Point
{
public int X;
public int Y;
public Point(int x, int y)
{
X = x;
Y = y;
}
}
위 예시에서 Point 구조체는 X와 Y라는 두 개의 멤버를 가지고 있습니다.
구조체의 특징
- 값(Value) 형식: 구조체는 값(Value) 형식으로 선언되며, 스택 메모리에 할당됩니다. 이는 클래스와 달리 가비지 컬렉션의 대상이 아니며, 메모리 사용이 효율적입니다.
- 불변성(Immutable): 구조체의 멤버는 기본적으로 불변성을 유지합니다. 즉, 구조체의 인스턴스를 변경하려면 새로운 인스턴스를 생성해야 합니다.
- 상속 불가능: 구조체는 클래스와 달리 다른 클래스나 구조체를 상속할 수 없습니다. 단, 인터페이스는 구현할 수 있습니다.
- 힙 메모리 할당 불가: 구조체는 스택(Stack) 메모리에 할당되기 때문에 힙(Heap) 메모리에 할당할 수 없습니다.
구조체의 사용법
구조체는 다양한 상황에서 사용될 수 있습니다. 주로 작은 크기의 데이터나 단순한 값 형식을 표현할 때 활용됩니다.
구조체를 사용한 예시: 좌표(Point)
public struct Point
{
public int X;
public int Y;
public Point(int x, int y)
{
X = x;
Y = y;
}
}
class Program
{
static void Main(string[] args)
{
Point p1 = new Point(10, 20);
Point p2 = new Point(30, 40);
Console.WriteLine($"p1: ({p1.X}, {p1.Y})"); // p1: (10, 20)
Console.WriteLine($"p2: ({p2.X}, {p2.Y})"); // p2: (30, 40)
}
}
위 예시에서 Point 구조체를 사용하여 좌표를 표현하고 있습니다.
구조체와 클래스의 차이점
구조체와 클래스는 목적과 사용 방법에서 다음과 같은 차이점을 가집니다.
- 메모리 할당: 구조체는 값(Value) 형식이며, 스택(Stack) 메모리에 할당됩니다. 클래스는 참조(Reference) 형식이며, 힙(Heap) 메모리에 할당됩니다.
- 불변성: 구조체의 멤버는 기본적으로 불변성을 유지합니다. 클래스의 멤버는 변경 가능합니다.
- 상속 가능성: 구조체는 클래스와 달리 다른 클래스나 구조체를 상속할 수 없습니다.
- 복사 동작: 구조체의 인스턴스는 값으로 복사되며, 클래스의 인스턴스는 참조로 복사됩니다.
마치며
이번 포스트에서는 C#의 구조체(Struct)에 대해 알아보았습니다. 구조체는 값(Value) 형식으로 선언되며, 스택(Stack) 메모리에 할당되어 가비지 컬렉션의 대상이 아니며 메모리 사용이 효율적입니다. 구조체는 작은 크기의 데이터나 단순한 값 형식을 표현할 때 유용하게 사용됩니다. 클래스와의 차이점을 이해하고 적절히 활용하면 코드의 성능을 향상시키고 메모리 사용을 최적화할 수 있습니다. 추가적인 질문이나 궁금한 점이 있다면 언제든지 댓글로 남겨주세요!
반응형
'Programming > C#' 카테고리의 다른 글
C# 델리게이트(Delegate)의 다양한 사용법 (0) | 2024.06.09 |
---|---|
C# 델리게이트(Delegate) 메서드 참조의 강력한 도구 (0) | 2024.06.09 |
C# 인덱서(Indexer) 배열과 유사한 접근성 제공 (0) | 2024.06.09 |
C# 제네릭 (Generics) 타입의 유연성과 안전성을 동시에 (0) | 2024.06.09 |
C# 섀도잉(Shadowing)과 하이딩(Hiding) 멤버 숨김의 이해 (0) | 2024.06.09 |