C# 에서 구조체를 선언하고 값을 초기화 하는 방법에는 여러 가지가 있습니다.
한 가지 방법만 익혀서 사용하면 되지만, 또 다른 방으로 초기화된 코드를 보면 가끔 당황스러울 때가 있습니다.
그래서 이 글에서는 구조체를 객체로 만들고 초기화하는 대표적인 방식들을 정리해 보았습니다.
또한 구조체 배열, 리스트에서의 초기화 방식까지 함께 다루겠습니다.
구조체 선언
먼저 예제로 사용할 Item 구조체를 아래와 같이 정의합니다.
struct Item
{
public string name;
public int price;
public string desc;
}
1. 객체 선언 후 값을 하나씩 넣기
가장 직관적인 방식입니다.
객체를 먼저 선언한 후, 각각의 필드에 값을 개별적으로 할당합니다.
Item item;
item.name = "Fireball";
item.price = 100;
item.desc = "적에게 화염 피해를 입힙니다.";
참고로 구조체는 값 형식이기 때문에 new 없이도 선언은 가능하지만 field 에 접근하려면, 반드시 직접 초기화를 하거나, new 를 사용해 런타임에 초기화를 시켜주어야 합니다.
2. new 로 만든 뒤 값을 하나씩 넣기
객체를 new 로 생성한 다음, 필드를 개별적으로 설정할 수도 있습니다.
Item item = new Item();
item.name = "Fireball";
item.price = 100;
item.desc = "적에게 화염 피해를 입힙니다.";
1번과 동일하게 동작하며, 문법적으로 더 명확하게 객체를 생성했다는 의도를 표현할 수 있습니다.
위에 언급한것처럼, new 로 초기화할 경우는 값을 입력하지 않아도 런타임에서 디폴트 값으로 초기화됩니다.
이 경우, int 형은 0, float 형은 0.0f, bool 형은 false, string 은 null 값을 갖게 됩니다.
3. 객체 생성과 동시에 { } 를 이용해 한 번에 넣기
new 키워드와 함께 중괄호 { } 를 사용하면, 객체를 생성하면서 값을 한 번에 넣을 수 있습니다.
Item item = new Item
{
name = "Fireball",
price = 100,
desc = "적에게 화염 피해를 입힙니다."
};
이 방식은 코드가 짧고 보기 깔끔하며, 여러 필드를 한꺼번에 초기화할 때 유용합니다. 왜냐하면...
Item item = new Item { name = "Fireball", price = 100, desc = "적에게 화염 피해를 입힙니다." };
이렇게 한줄로도 쓸 수 있기 때문입니다.
구조체 배열에서의 초기화
구조체 배열을 만들고 new 를 이용해 각 요소를 기본값으로 자동 초기화 시켰습니다.
그 이후에 원하는 값으로 각 field 를 채워주었습니다.
배열에서도 위에 언급한 방법들로 초기화가 가능합니다.
Item[] items = new Item[3];
// 방식 1: 하나씩 필드에 할당
items[0].name = "Fireball";
items[0].price = 100;
items[0].desc = "적에게 화염 피해를 입힙니다.";
// 방식 2: 객체를 생성하면서 값을 한 번에 설정
items[1] = new Item
{
name = "Ice Shot",
price = 120,
desc = "적을 빙결 상태로 만듭니다."
};
즉, 두 방식 모두 사용할 수 있으며, 상황에 따라 더 직관적인 쪽을 선택하시면 됩니다.
위의 코드에서 최초의 new 는 구조체 배열을 생성하기 위한 것이고, 두번째 new 는 방식 2 번처럼 배열의 요소 중 구조체 하나에 대한 생성과 동시에 초기화를 위한 것입니다.
리스트에서의 초기화
끝으로 리스트에서는 여러 개의 객체를 한 번에 넣을 수 있으며, 주로 객체를 생성하면서 동시에 값을 넣는 방식으로 초기화합니다.
List<Item> items = new List<Item>
{
new Item { name = "Fireball", price = 100, desc = "화염 피해" },
new Item { name = "Ice Shot", price = 120, desc = "빙결 피해" },
new Item { name = "Speed Boots", price = 80, desc = "이동 속도 증가" }
};
정리
이상으로 구조체를 선언하고 초기화하는 다양한 방법에 대해 정리해 보았습니다.
이제 상황에 따라 가장 적절한 방식으로 객체를 생성하고 사용할 수 있을 것입니다.
'C#' 카테고리의 다른 글
접근 제한자가 없는 struct, class 는 public 일까? private 일까? (0) | 2025.05.31 |
---|---|
new() 의 완벽한 이해 (0) | 2025.05.20 |
정렬 알고리즘의 기초 2편 : 선택 정렬 (Selection Sort) (0) | 2025.05.04 |
정렬 알고리즘의 기초 1편 : 버블 정렬 (Bubble Sort) (0) | 2025.05.04 |
C# 에서 temp 없이 값 교환하는 법, 이렇게 간단해도 될까요? (0) | 2025.05.04 |