<aside> 1️⃣ 개념설명
</aside>
<aside> 2️⃣ 사용예시
</aside>
@Bean
public Consumer<PaperViewEvent> handlePaperViewEvent() {
return event -> {
event.setPaper(paperRepository.findPaperByPaperSn(event.getPaperSn()));
// Insert Logic here
System.out.println("insert here");
};
}
이 코드는 Java의 람다 표현식을 사용한 함수형 프로그래밍의 예시다. 람다 표현식은 Java 8부터 도입된 기능으로, 함수를 일급 객체로 취급하여 변수에 저장하거나 매개변수로 전달하거나 결과로 반환할 수 있게 해준다.
이 코드에서 handlePaperViewEvent
메서드는 Consumer<PaperViewEvent>
타입의 객체를 반환한다. **Consumer<T>
**는 Java의 함수형 인터페이스 중 하나로, T
타입의 객체를 입력으로 받아서 어떤 동작을 수행하고 결과를 반환하지 않는 함수를 나타낸다.
즉, **Consumer<PaperViewEvent>
**는 PaperViewEvent
타입의 객체를 입력으로 받아서 어떤 동작을 수행하는 함수를 나타낸다.
<aside> 2️⃣ - 1️⃣ return 바로뒤의 event는 뭘 의미하는가?
</aside>
// 이 람다식의 return 바로옆에 event는 뭔가?
return event -> {
event.setPaper(paperRepository.findPaperByPaperSn(event.getPaperSn()));
// Insert Logic here
System.out.println("insert here");
};
return
바로 옆의 **event
**는 람다 표현식의 입력 파라미터이며, 이 경우에 **event
**가 의미하는 입력 파라미터는 PaperViewEvent
타입의 객체를 나타낸다.
왜 입력 파라미터가 무슨근거로 PaperViewEvent타입의 객체라는것인가?
->
기호 뒤에 오는 { ... }
내용 부분은 **event
**를 입력으로 받아서 수행할 동작을 나타냅니다.이 코드에서는 event
객체의 setPaper
메서드를 호출하여 paper
필드를 설정하고, 그 다음에 **System.out.println("insert here");
**를 실행하여 콘솔에 "insert here"를 출력한다. 이 두 동작이 **event
**를 입력으로 받아서 수행하는 동작이다.
따라서 이 코드는 PaperViewEvent
타입의 객체를 입력으로 받아서 paper
필드를 설정하고 **"insert here"
**를 출력하는 Consumer<PaperViewEvent>
객체를 생성하여 반환하는 메서드이다. 이 Consumer<PaperViewEvent>
객체는 다른 곳에서 accept
메서드를 호출하여 사용할 수 있다.
<aside> 3️⃣ 조금 헷갈릴수도 있으니 추가설명을 보자
</aside>
Consumer<T>
**도 그 중 하나로, **void accept(T t)
**라는 하나의 추상 메서드를 가지고 있다.event -> { ... }
**는 이 accept()
메서드를 구현한다.
event
**는 accept()
메서드의 입력 파라미터 **T t
**에 대응되어 객체로 값이 들어가게 된다.Consumer<PaperViewEvent>
**의 경우, accept()
메서드는 **void accept(PaperViewEvent event)
**가 되는것이다.event -> { ... }
**가 되며, 여기서 **event
**는 PaperViewEvent
타입의 객체를 나타냅니다.
void accept(PaperViewEvent event)
여기서 람다식으로 적은 입력값 event가 accept 메소드의 인자로 들어가고 나는 event → {…} 여기서 {…} 안에 accept라는 메소드의 내용을 직접 구현한 것이다.Consumer<PaperViewEvent>
타입의 객체를 나타내는 람다 표현식의 입력 파라미터의 타입은 **PaperViewEvent
**가 된다.