18.6 생성자 참조
1. 객체 생산 공장 🏭
람다식의 역할이 “단순히 객체를 생성해서 리턴하는 것”이라면, 생성자 참조를 쓸 수 있습니다.
마치 공장에 설계도(new)만 던져주는 것과 같습니다.
- 람다식:
(id, name) -> new Member(id, name) - 생성자 참조:
Member :: new
2. 오버로딩된 생성자 선택
Member 클래스에 생성자가 여러 개(Member(String id), Member(String id, String name)) 있어도 걱정 마세요.
자바 컴파일러가 매개변수의 개수와 타입을 보고 알아서 맞는 생성자를 찾아줍니다. (똑똑하죠?)
// 매개변수 1개짜리 생성자 호출
Function<String, Member> f1 = Member :: new;
// 매개변수 2개짜리 생성자 호출
BiFunction<String, String, Member> f2 = Member :: new;
3. 예제: 회원 생성
생성자 인터페이스
@FunctionalInterface
public interface Creatable1 {
public Member create(String id); // 매개변수 1개
}
@FunctionalInterface
public interface Creatable2 {
public Member create(String id, String name); // 매개변수 2개
}
실행 코드
package ch18.sec06;
public class ConstructorReferenceExample {
public static void main(String[] args) {
Person person = new Person();
// 1. 매개변수 1개 -> Member(String id) 호출
Member m1 = person.getMember1(Member :: new);
System.out.println(m1);
// 2. 매개변수 2개 -> Member(String id, String name) 호출
Member m2 = person.getMember2(Member :: new);
System.out.println(m2);
}
}
실행 결과
Member(String id) 생성자 실행
{ id: winter, name: null }
Member(String id, String name) 생성자 실행
{ id: winter, name: 한겨울 }
핵심:
클래스이름 :: new만 기억하세요. 어떤 생성자를 부를지는 파라미터가 결정합니다.
서브목차