반응형
C# 객체 이니셜라이저(Object Initializer)는 무엇인가?
객체 이니셜라이저는 객체를 초기화하는 방식 중에 하나이다. 객체 이니셜라이저를 사용하면 객체를 선언하고 초기화할 때 더 간결하고 간편하게 객체 초기화가 가능하다.
new 클래스명 { 속성 = 값, 속성 = 값 };
- 생성자 호출과 동시에 속성 초기화 가능
- 순서에 상관없이 초기화 가능
- 표현식(Expression)의 형태로 한 줄로 초기화 가능
var player = new Player
{
Name = "홍길동",
Level = 10
};
// 위와 동일함
var player = new Player();
player.Name = "홍길동";
player.Level = 10;
왜 식(Expression)으로 디자인되었나?
- 함수 인자로 직접 전달할 수 있음
- new Player { ... }가 객체 생성 + 값 초기화 + 결과 반환까지 하나의 식으로 취급됨
SendPlayer(new Player { Name = "홍길동" });
- LINQ, 컬렉션, 복합 구조에서도 사용 가능
var players = new List<Player>
{
new Player { Name = "A", Level = 1 },
new Player { Name = "B", Level = 2 }
};
- 객체 안의 또 다른 객체를 객체 이니셜라이저로 바로 넣을 수 있음
- 전부 다 식이기 때문에 가능함. 바꿔 말하면 값이기 때문에 가능함
var result = new Response
{
Data = new Player { Name = "홍길동" },
Success = true
};
객체 이니셜라이저 장점
- 간결함 : new와 속성 초기화를 한 번에 처리 > 코드 감소
- 가독성 : 어떤 속성에 어떤 값이 들어가는지 한눈에 보임
- 중첩 초기화 가능 : 중첩 객체/컬렉션에도 한 줄로 표현 가능
- 초기화 목적 분리 : 생성자는 로직, 이니셜라이저는 값 설정 역할로 구분 가능
- 표현식으로 사용 가능 : 함수 인자, 반환값, LINQ 쿼리 내에서도 유연하게 사용 가능
객체 이니셜라이저 단점
- 불완전한 불변성 지원 : set 접근자가 있어야 하므로 진정한 불변 객체에는 부적합
- 유효성 검사 부족 : 생성자에서 강제할 수 있는 필수 값 제약이 사라질 수 있음
- 실행 시 버그 가능성 : 속성 초기화 순서/의존 관계가 있으면 런타임 오류 발생 가능성
- 캡슐화 침해 위험 : 너무 많은 속성을 외부에서 직접 설정하게 될 가능성이 높음
정리하자면
값을 설정하는 것이 주요 목적이고, 별다른 초기화 로직이 없다면,
> 객체 이니셜라이저를 적극 사용하기를 추천
객체의 불변성, 내부 상태 보호, 유효성 보장 등이 필요하다면,
> 생성자를 통한 초기화가 필요하므로 비추천
함께 읽으면 좋은 글
표현식(Expression)과 구문(Statement)을 비교해보자
표현식(Expression)과 구문(Statement), 둘이 어떻게 다른데?표현식과 구문은 프로그래밍에서 중요한 개념이며, 헷갈릴 수 있지만 두 개념의 차이에 대해서 알아보자.이에 대한 정리는 아래와 같다.표
jettstream.tistory.com
'프로그래밍 > C#' 카테고리의 다른 글
비동기 메서드의 형식을 맞추기 위해서 필요한 Task.CompletedTask (0) | 2025.05.15 |
---|---|
C# try-catch로 예외 상황을 컨트롤 해보자 (0) | 2025.05.14 |
C# EF Core 환경에서 데드락 방지 방법 (0) | 2025.05.12 |
C# get-only 속성에 대해서 알아보자 (0) | 2025.04.28 |
C# 실무에서 사용하는 전역 JSON 옵션 설정 (0) | 2025.04.28 |
댓글