C# 구조체(Struct)는 값 형식의 데이터를 나타내는 데 사용되는 사용자 정의 형식입니다. 구조체는 클래스와 유사한 멤버를 가질 수 있지만, 클래스와는 다른 동작 및 성질을 가지고 있습니다. 여기에서는 C# 구조체에 대해 더 자세히 알아보겠습니다.
- 구조체 정의: 구조체는 "struct" 키워드를 사용하여 정의됩니다. 일반적으로 구조체는 값 형식 데이터를 표현하고 해당 데이터에 대한 작은 메모리 할당이 필요한 경우에 사용됩니다. 구조체의 정의는 다음과 같은 형식을 가질 수 있습니다:
struct 구조체명
{
// 멤버 변수 (필드)
// 멤버 메서드
// 생성자 등
}
멤버 변수 및 메서드: 구조체는 멤버 변수와 멤버 메서드를 가질 수 있습니다. 멤버 변수는 구조체 내에 데이터를 저장하는 데 사용되며, 멤버 메서드는 해당 데이터에 대한 동작을 정의합니다. 구조체의 멤버에는 필드, 속성, 메서드 등이 포함될 수 있습니다.
struct Person
{
// 멤버 변수 (필드)
public string name;
public int age;
// 멤버 메서드
public void DisplayInfo()
{
Console.WriteLine("Name: " + name);
Console.WriteLine("Age: " + age);
}
}
구조체의 인스턴스 생성: 구조체의 인스턴스를 생성하기 위해서는 "new" 키워드를 사용하여 변수를 선언하고 생성자를 호출해야 합니다. 구조체는 값 형식이므로 "new" 키워드 없이도 인스턴스를 생성할 수 있습니다.
Person person1 = new Person();
person1.name = "John";
person1.age = 25;
Person person2; // "new" 키워드 없이도 인스턴스 생성 가능
person2.name = "Alice";
person2.age = 30;
- 구조체와 클래스의 차이점:
- 구조체는 값 형식이고 스택에 할당되며, 클래스는 참조 형식이고 힙에 할당됩니다.
- 구조체는 상속을 지원하지 않지만, 인터페이스를 구현할 수 있습니다.
- 구조체는 기본 생성자를 가질 수 없지만, 매개변수를 받는 생성자를 정의할 수 있습니다.
- 구조체는 복사될 때 값이 복사되고 원본과 독립적으로 작동합니다.
- 구조체의 활용: 구조체는 주로 작은 크기의 데이터를 표현하고 메모리를 효율적으로 사용하는 경우에 유용합니다. 예를 들어 2D 좌표, 날짜, 시간, 색상 등을 표현할 때 구조체를 사용할 수 있습니다. 또한 구조체는 객체 지향 프로그래밍에서 불필요한 객체 생성을 피할 수 있는 장점을 가지고 있습니다.
// 2D 좌표 구조체 예제
struct Point
{
public int X;
public int Y;
public Point(int x, int y)
{
X = x;
Y = y;
}
public void DisplayCoordinates()
{
Console.WriteLine("X: " + X + ", Y: " + Y);
}
}
// 구조체 인스턴스 생성
Point p1 = new Point(10, 20);
p1.DisplayCoordinates(); // Output: X: 10, Y: 20
구조체는 값을 복사하여 사용하기 때문에 대량의 데이터를 처리하는 경우 메모리 사용과 성능 측면에서 유리할 수 있습니다. 그러나 구조체는 참조 형식인 클래스와 달리 박싱 및 언박싱 오버헤드가 없으며, 가비지 컬렉터의 관리 범위 밖에 있기 때문에 메모리 관리에 조금 더 주의해야 합니다.
I am a father of one boy and two girls living in Cheongju. We love to go "plogging" together every day. Plogging is an activity where we pick up litter while taking a walk, with the goal of preserving the environment and creating a clean community. It's a valuable time for our family to join forces.
You can find our activities on YouTube at https://www.youtube.com/@0070TV. We kindly ask for your support and encouragement.
'[프로그램]' 카테고리의 다른 글
| 프로그래밍 입문전 해야할일 10가지 프로그래밍적 사고 (0) | 2023.06.28 |
|---|---|
| C# 9.0부터 도입된 레코드(Record)는 불변(immutable) 데이터를 표현하기 위한 간편한 구조 예제 (0) | 2023.06.28 |
| C#에서 열거형(enum)은 연관된 상수 집합을 정의하기 위해 사용되는 데이터 형식 예제 (0) | 2023.06.28 |
| C#에서 switch-case 문은 여러 가지 조건 (0) | 2023.06.28 |
| C#에서 1차원 배열을 선언하고 사용하는 방법 array (0) | 2023.06.28 |