본문 바로가기

Programming/JAVA

람다식(5) - 메서드 참조 4 : 생성자 참조

 

 

 

메서드 참조(method references)라는 것은, 단순한 메서드 호출로만 구성된 람다식을 대체하는 개념이었습니다. 

 

(left, right) -> Math.max(left, right);

// 메서드 참조
Math :: max;

 

 

 

이 개념을 생성자 호출에 적용해 보도록 하겠습니다. 생성자를 호출한다는 것은, 인스턴스를 생성해 낸다는 의미입니다. 그런데 이 생성자 호출에 있어서도 단순히 인스턴스 생성 후 리턴만 완료한다면, 이 역시 메서드 참조의 일종인 생성자 참조로 대체할 수 있습니다. 아래와 같은 케이스가 있다고 가정해 보겠습니다.

(a, b) -> { return new 클래스(a,b); }

 

생성자 참조도 메서드 참조와 비슷한 형태로 사용할 수 있습니다. 클래스의 이름을 작성하고 :: 기호를 붙인 다음, new 키워드를 작성해주는 방식입니다. 

 

클래스 :: new

 

예시를 통해서 살펴보도록 하겠습니다. 

 

 

 


 

 

 

우선 생성자 오버로딩이 되어있는 클래스 Member를 선언합니다. 

 

public class Member {
	private String name;
	private String id;
	
	// 생성자
	public Member() {
		System.out.println("Member() 기본 생성자 실행");
	}
	
	public Member(String id) {
		System.out.println("Member(String id) 생성자 실행");
		this.id = id;
	}
	
	public Member(String name, String id) {
		System.out.println("Member(String name, String id) 생성자 실행");
		this.name = name;
		this.id = id;
	}
	
	public String getId() {
		return id;
	}
}

 

import java.util.function.BiFunction;
import java.util.function.Function;

public class ExampleMain {
	public static void main(String[] args) {
		Function<String, Member> function1 = Member :: new;
		Member member1 = function1.apply("angel");
		
		BiFunction<String, String, Member> function2 = Member :: new;
		Member member2 = function2.apply("천사", "angel");
	}
}

/*출력
Member(String id) 생성자 실행
Member(String name, String id) 생성자 실행
*/