Section 26.4: 객체 초기자 (Object initializer) 내에서 컬렉션 초기자 (Collection initializer) 사용하기

public class Tag { public IList<string> Synonyms { get; set; } }

Synonyms 는 컬렉션 타입의 속성 값 (property) 이다. Tag 객체를 객체 초기자 (object initializer) 문법을 통해 생성시킬 때, Synonyms 역시 컬렉션 초기자 (collection initializer) 문법을 사용하여 초기화 시킬 수 있다:

Tag t = new Tag { Synonyms = new List<string> {"c#", "c-sharp"} };

이러한 컬렉션한 속성 값을 읽기 전용으로 선언한다고 하더라도, 여전히 컬렉션 초기자 문법을 사용할 수 있다. 아래에 수정된 예제가 제시되어 있다. (Synonyms 의 속성값이 private setter 를 가지도록 변경되었다):

public class Tag { public Tag() { Synonyms = new List < string > (); } public IList < string > Synonyms { get; private set; } }

이러한 경우에도 아래와 같은 방법으로 Tag 객체를 생성할 수 있다:

Tag t = new Tag { Synonyms = {"c#", "c-sharp"} };

이러한 동작이 가능한 이유는 컬렉션 초기자 (collection initializer) 가 사실은 Add() 메소드를 호출하여주는 일종의 문법적 간편화 장치 (syntactic sugar) 에 불과하기 때문이다. 위 코드에서 실제로 새로운 List 생성이 일어나지는 않으며, 컴파일러가 기존에 이미 생성된 객체에 대하여 Add() 메소드에 대한 호출을 자동 생성해 줄 뿐이다.

본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

+ Recent posts