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/
반응형
'번역 > C# Notes for Professionals' 카테고리의 다른 글
27.1: HashSet<T> (0) | 2021.08.12 |
---|---|
26.5: 컬렉션 초기자 (Collection Initializer) 에서 배열을 인자로 받기 (0) | 2021.08.11 |
26.3: 사용자 정의 class 를 컬렉션 초기자 (Collection initializer) 로 초기화하기 (0) | 2021.07.08 |
26.2: C# 6 인덱스 초기자 (Index initializer) (0) | 2021.07.07 |
26.1: 컬렉션 초기자 (Collection initializer) (0) | 2021.07.06 |