본문 바로가기

Programming/JAVA

람다식(4) - 표준 API의 함수적 인터페이스 7 : 디폴트 메서드 andThen(), compose() 2

JAVA logo image

 

앞서서 살펴본 디폴트 메서드인 andThen()과 compose()에 대해서 기본적인 내용을 우선 상기하도록 하겠습니다. 지금부터는 이 기본 내용을 가지고 각각의 인터페이스에서 실제 순차적으로 연결하여 이 메서드를 활용하는 방법을 알아볼 예정입니다. 

 

 

람다식(4) - 표준 API의 함수적 인터페이스 7 : 디폴트 메서드 andThen(), compose() 1

우리가 지금까지 살펴본 '함수적 인터페이스'의 기본 성질이 무엇이었나요? 뜬금없이 느껴지겠지만, 너무나도 기본적인 내용이니 잘 기억하실 것입니다. 바로 "하나의 추상 메서드를 가지고 있

nozeroslope.tistory.com

 

 


 

 

○ Consumer 인터페이스의 순차적 연결

 

Consumer 종류의 함수적 인터페이스의 경우, 처리 결과를 리턴하지 않는다고 배웠습니다. 추상메서드 accpet( )은 파라미터는 있지만 리턴 값은 void였다고 했죠? 기억이 안 난다면 다시 복습합시다. 

 

 

 

람다식(4) - 표준 API의 함수적 인터페이스 2 : Consumer Functional Interface

앞선 아티클에서 표준 API로 제공되는 함수적 인터페이스들의 종류에 대해서 간단히 살펴보았습니다. 람다식(4) - 표준 API의 함수적 인터페이스 1 앞서서 함수적 인터페이스 - 즉, 단 한 개의 추상

nozeroslope.tistory.com

 

아래 예시를 통해서, 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( )를 실행해서 원하는 결과를 출력했습니다.