본문 바로가기
프로그래밍/C#

C# 객체 이니셜라이저(Object Initializer)를 알아보자

by bantomak 2025. 5. 12.
반응형

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

댓글