구조체 ( Struct )
개요
구조체에 대해 간단하게 설명하자면 여러 데이터를 담을 수 있는 박스에 비유할 수 있다.
그동안 사용해왔던 기본적인 자료형도 구조체로 정의되었기 때문에 데이터 하나를 담는 간단한 박스라고 할 수 있다.
구조체는 이러한 박스들 , 즉 여러 자료형들을 모아 조합하여 또 다른 자료형을 만들어 사용할 수 있게끔 만들어준다.
C# 에서는 데이터를 묶어서 하나의 단위로 관리할 수 있는 방법으로
Class와 구조체를 제공한다.
두 가지의 핵심은 특정 물체가 가지는 여러 특증과 데이터를 모아서 정리 할수 있다.
구조체( Struct ) 는 여러 개의 데이터를 하나의 단위로 묶어서 관리하는 값 타입.
구조체는 클래스보다 메모리 관리 측면에서 효율적이다.
크기가 작고 불변하는 데이터 구조를 다룰 때 적합하다.
float maxSpeedCar2 = 260.4f;
string makerCar2 = "Hyundai";
int carNumberCar2 = 2248;
float maxSpeedCar3 = 300.62f;
string makerCar3 = "Audi";
int carNumberCar3 = 324;
Console.WriteLine(maxSpeedCar1);
Console.WriteLine(makerCar1);
Console.WriteLine(carNumberCar1);
Console.WriteLine(maxSpeedCar2);
Console.WriteLine(makerCar2);
Console.WriteLine(carNumberCar2);
Console.WriteLine(maxSpeedCar3);
Console.WriteLine(makerCar3);
Console.WriteLine(carNumberCar3);
- 자동차가 늘어날수록 코드를 읽기 힘들어지고, 프로그래머가 실수할 확률도 늘어난다.
- 추후에 자동차의 가격, 연비 등 요소를 추가하려면 수많은 수정을 거쳐야 한다.
- 구조체를 사용하여 자동차라는 박스에 데이터를 담는다면 조금 더 직관적이고 편리하게 관리 가능
문법
struct 구조체이름
{
// 멤버(변수, 메서드 등) 선언
}
- 예시
struct Player { public string Name; // 필드(멤버 변수) public int Level; public float HP; }
구조체 사용하기
class Program
{
static void Main()
{
// 구조체 변수 선언
Player p1;
// 멤버에 값 할당
p1.Name = "호찬";
p1.Level = 1;
p1.HP = 100.0f;
// 출력
Console.WriteLine($"{p1.Name}, Lv.{p1.Level}, HP: {p1.HP}");
}
}
사용 예시
struct Player
{
public string Name; // 이름
public int Level; // 레벨
public float HP; // 체력
}
class Program
{
static void Main()
{
Player p1; // 구조체 변수 선언
p1.Name = "호찬";
p1.Level = 10;
p1.HP = 99.5f;
Console.WriteLine($"{p1.Name}, Lv.{p1.Level}, HP: {p1.HP}");
}
}
- 실행 결과
호찬, Lv.10, HP: 99.5
구조체의 특징
값 타입 ( Value Type )
- struct 는 스택 ( Stack ) 에 저장된다.
- 복사할 때 값 자체가 복사된다. → 원본과 사본이 서로 영향을 안준다.
Player p1 = new Player();
p1.Level = 10;
Player p2 = p1; // 값 복사
p2.Level = 20;
Console.WriteLine(p1.Level); // 10 (원본 그대로)
Console.WriteLine(p2.Level); // 20 (사본만 변경)
정리
- struct : 작고 단순한 데이터 묶음을 표현하는 값 타입 자료형
- 클래스 ( Class ) 와 유사하지만, 값 타입이라는 점이 핵심 차이
- 주로 좌표, 벡터, 색상, 간단한 상태값 등을 표현할 때 사용
참고 자료
https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/builtin-types/struct