엔지니어로 가는 길

JAVA Interface Consumer<T>와 람다 표현식 본문

프로그래밍/Java

JAVA Interface Consumer<T>와 람다 표현식

탐p슨 2020. 6. 27. 14:44
728x90

https://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html

https://docs.oracle.com/javase/8/docs/api/java/util/function/Consumer.html

 

standard functional interfaces는 java.util.function에 있는 인터페이스로 java 1.8부터 지원한다.

Consumer는 standard functional interfaces 중 하나이다.

Interface Consumer<T>

 

 

하나의 인자를 받아 연산을 수행하지만 아무것도 리턴하지 않는다.

다른 대부분의 functional interfaces와 달리 side-effects를 기대하는 인터페이스이다.

 

예시

 

출력 결과

 

출력결과

 

andThen은 하나의 인자에 대해 Consumer를 연쇄적으로 이용하고 싶을 때 사용하는 Consumer 인터페이스 default 메소드이다. Consumer를 인자로 받아 Consumer를 리턴한다. 인자로 받는 Consumer는 나중에 적용할 Consumer이고, 리턴 결과는 일련의 Consumer가 압축된 하나의 Consumer이다.

 

예를 들어 과일을 인자로 받아 깎는 Consumer 'cut'이 있다고 했을 때, 과일을 깎은 뒤 먹기까지 하는 두 과정을 다루는 Consumer 'cutAndEat'를 만들고 싶다면, cut의 andThen 메소드 인자로 과일을 먹는 Consumer를 구현해야 한다(코드에서는 익명이지만 이름을 붙인다면 'eat'이라고 붙일 수 있다). 그럼 andThen의 결과로 나오는 Consumer는 과일을 깎고 먹기까지 하는 일련의 과정을 다루는 'cutAndEat'이 된다.

 

위의 코드를 아래와 같이 표현할 수도 있다.

 

 

 

이게 더 가독성이 좋은 것 같다.

다양한 종류의 Consumer

 

Consumer<T>외에도 아래와 같이 많은 Consumer가 있다. 인자의 개수나 종류만 다른데, 인자에 대한 정보는 이름을 보면 추측할 수 있다.

 

BiConsumer<T,U>: 임의의 두 인자를 받는다.

DoubleConsumer: double 타입의 인자를 받는다.

IntConsumer

LongConsumer

ObjDoubleConsumer<T>: 객체와 double 타입의 인자를 받는다.

ObjIntConsumer<T>

ObjLongConsumer<T>

 

 

728x90
Comments