앞서서 살펴본 디폴트 메서드인 andThen()과 compose()에 대해서 기본적인 내용을 우선 상기하도록 하겠습니다. 지금부터는 이 기본 내용을 가지고 각각의 인터페이스에서 실제 순차적으로 연결하여 이 메서드를 활용하는 방법을 알아볼 예정입니다.
○ Consumer 인터페이스의 순차적 연결
Consumer 종류의 함수적 인터페이스의 경우, 처리 결과를 리턴하지 않는다고 배웠습니다. 추상메서드 accpet( )은 파라미터는 있지만 리턴 값은 void였다고 했죠? 기억이 안 난다면 다시 복습합시다.
아래 예시를 통해서, Consumer<Member> 함수적 인터페이스 두 개를 순차적으로 연결해 실행하는 방법을 살펴보겠습니다. andThen( ) 디폴트 메서드를 사용하게 되면, 리턴 값이 없으므로 사실상 해당 함수적 인터페이스의 호출 순서만을 정하게 됩니다.
public class Address {
private String country;
private String city;
public Address(String country, String city) {
this.country = country;
this.city = city;
}
public String getCountry() { return country; }
public String getCity() { return city; }
}
public class Member {
private String name;
private String id;
private Address address;
public Member(String name, String id, Address address) {
this.name = name;
this.id = id;
this.address = address;
}
public String getName() { return name; }
public String getId() { return id; }
public Address getAddress() { return address; }
}
Member에는 스트링 데이터인 name과 id가 있고, 주소인 address도 있는데 이 주소는 Address라는 클래스 타입의 데이터입니다.
import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;
import java.util.function.Consumer;
public class ExampleMain {
public static void main(String[] args) {
Consumer<Member> consumerA = (m) -> {
System.out.println("consumerA: " + m.getName());
};
Consumer<Member> consumerB = (m) -> {
System.out.println("consumerB: " + m.getId());
};
Consumer<Member> consumerAB = consumerA.andThen(consumerB);
consumerAB.accept(new Member("스윙스", "AP ALCHEMY", null));
}
}
/* 출력
consumerA: 스윙스
consumerB: AP ALCHEMY
*/
기본 개념에서도 언급했듯이, andThen( )메서드는 Consumer 함수적 인터페이스에서 디폴트 메서드로 정의되어 있으므로, 사용이 바로 가능합니다. consumerAB를 정의하고 accept( )를 실행해서 원하는 결과를 출력했습니다.