일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- beanfactory
- String
- springwebmvc
- 빌드툴
- Immutable
- FunctionalInterfaces
- JPA
- java
- 클린코드
- 메이븐
- 토비의스프링3.1
- 토비의스프링
- 프록시
- 링커
- IOC
- Kotlin for Java Developers
- Spring
- DispatcherServlet
- 컴퓨터시스템
- gradle
- exception
- hibernate
- 링킹
- lambda
- ORM
- ApplicationContext
- springboot
- DesignPattern
- AutoConfiguration
- 자바
- Today
- Total
엔지니어로 가는 길
JAVA Interface Consumer<T>와 람다 표현식 본문
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>
'프로그래밍 > Java' 카테고리의 다른 글
JAVA 디폴트 메소드 (0) | 2020.08.30 |
---|---|
JAVA 메소드 참조(Method References) (0) | 2020.06.30 |
JAVA 람다 표현식의 문법과 사용 (0) | 2020.06.23 |
JAVA 익명 클래스(Anonymous Classes) (0) | 2020.05.28 |
JAVA 지역 클래스(Local Classes) (0) | 2020.05.20 |