더북(TheBook)

05
생성자 레퍼런스

생성자 레퍼런스constructor reference는 메서드의 이름이 new라는 점을 제외하면 메서드 레퍼런스와 유사하다. 예를 들어, Button::newButton 생성자를 가리키는 레퍼런스다. 그런데 어느 생성자를 가리킬까? 실제 가리키는 생성자는 문맥에 따라 다르다. 문자열 리스트가 있다고 할 때, 다음과 같은 호출을 이용해 각 문자열을 대상으로 생성자를 호출함으로써 문자열 리스트를 버튼 배열로 변환할 수 있다.


List<String> labels = ...;

Stream<Button> stream = labels.stream().map(Button::new);

List<Button> buttons = stream.collect(Collectors.toList());


 

2장에서 stream, map, collect 메서드를 자세히 설명한다. 지금은 map 메서드가 리스트의 각 요소를 대상으로 Button(String) 생성자를 호출한다는 점이 중요하다. Button 생성자는 여러 개지만, 컴파일러는 문자열로 생성자가 호출되는 문맥으로부터 추정해서 String 파라미터 한 개를 받는 생성자를 선택한다.

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