Java의 이중 중괄호 초기화(Double Brace Initialization)란?
Java의 이중 중괄호 초기화는 객체를 생성하면서 동시에 초기화할 수 있도록 해주는 기법입니다. 하나의 Java 표현식 안에서 객체 생성과 초기화가 모두 이루어지며, 내부적으로는 익명 클래스(anonymous class)와 인스턴스 초기화 블록을 활용하는 방식으로 동작합니다.
흥미로운 점은, Java에서 이중 중괄호로 처리해야 하는 작업을 C#에서는 단일 중괄호, 즉 컬렉션 이니셜라이저(Collection Initializer)만으로 동일하게 구현할 수 있다는 것입니다.
Java 예제
Java에서 리스트를 생성하고 값을 추가하는 코드는 다음과 같습니다.
List<String> list = new List<String>() {{
add("One");
add("Two");
add("Three");
add("Four");
}}바깥쪽 중괄호는 익명 클래스를 만들고, 안쪽 중괄호는 인스턴스 초기화 블록 역할을 하여 add() 메서드 호출이 곧바로 실행됩니다.
C#의 컬렉션 이니셜라이저
동일한 작업을 C#에서는 다음과 같이 한 줄로 간결하게 작성할 수 있습니다.
List<string> list = new List<string>() { "One", "Two", "Three", "Four" };C#의 컬렉션 이니셜라이저는 컴파일러가 내부적으로 Add() 메서드 호출로 변환해 주기 때문에, 별도의 익명 클래스 없이도 가독성 좋고 효율적인 코드를 작성할 수 있습니다.
추가 팁: C#의 객체 이니셜라이저
컬렉션뿐 아니라 일반 객체의 속성도 중괄호를 사용해 초기화할 수 있습니다.
var person = new Person { Name = "Kim", Age = 30 };정리
Java의 이중 중괄호 초기화가 수행하는 역할을 C#에서는 컬렉션 이니셜라이저와 객체 이니셜라이저가 더욱 깔끔하고 직관적인 문법으로 대체합니다. 참고로 Java의 이중 중괄호 초기화는 매번 새로운 익명 클래스를 생성하기 때문에 직렬화 문제나 잠재적인 메모리 누수 위험이 있어, 실무에서는 가급적 지양하는 것이 좋습니다.