더북(TheBook)

3.5.2 생성자 참조


생성자 참조는 메서드 이름이 new라는 점만 제외하면 메서드 참조와 같다. 예를 들어 Employee::newEmployee 생성자 참조다. 클래스에 생성자가 두 개 이상 있을 때는 문맥으로 어느 생성자를 호출할지 결정한다.

생성자 참조를 사용하는 예를 보자. 먼저 문자열 리스트가 있다고 하자.

List<String> names = ...;


각 이름에 대응하는 직원 리스트를 원한다. 8장 스트림에서 더 자세히 알아보겠지만, 스트림을 사용하면 루프 없이도 이 작업을 처리할 수 있다. 리스트를 스트림으로 전환한 후 map 메서드를 호출하면 된다. map 메서드는 함수를 적용하고 모든 결과를 모은다.

Stream<Employee> stream = names.stream().map(Employee::new);


names.stream()String 객체가 담겨 있으므로 컴파일러는 Employee::new가 Employee(String) 생성자를 가리킨다는 사실을 안다.

배열 타입으로도 생성자 참조를 만들 수 있다. 예를 들어 int[]::new는 매개변수가 한 개(배열의 길이)인 생성자 참조다. 이 생성자 참조는 람다 표현식 n -> new int[n]과 같다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.