지난 시간에는 Functional Interface에 대해서 알아보았다. Functional Interface는 Java에서 동작 파라미터화의 대표적인 예시로 메서드를 파라미터로 전달하는 것이다. (자바에서는 객체에 메서드를 담아서 전달) 요구사항에 유연하게 대처할 수 있게 코드 간 의존성을 줄여 엔지니어링 공수를 줄일 수도 있다. 자세한 내용은 이전 포스팅을 참고하면 된다.
https://today-devstart.tistory.com/28
오늘 이 시간에는 Functional Interface가 자바에서 주로 사용되는 실전 예제를 소개해보려고 한다. 예제로 보여줄 내용은 총 4가지인데 하나하나씩 살펴보도록하겠다.
1. 정렬에 사용되는 Comparator
웹 개발을 하면서 자바에서 직접 정렬을 해야하는 문제는 많이 만나보지 못했는데, 코딩테스트 문제를 풀다보면 정렬을 하는 문제를 자주 만나봤다. 단순히 오름차순, 내림차순으로 정렬하는게 아니라 Person이라는 class가 있으면 나이로 정렬한다던지, 키로 정렬한다던지하는 조건이 있을 수 있다. 이 때 정렬 조건을 유연하게 사용할 수 있도록 @FunctionalInterface인 Comparator를 사용해서 내가 원하는 조건으로 정렬을 구현할 수 있다.
2. Thread의 Runnable
두번째 예시는 바로 Thread에서 사용하는 Runnable이다. Thread를 종종 사용할 때마다 Runnable을 사용했는데, 뭔지는 모르고 그냥 사용해왔다. Runnable이 바로 @FunctionalInterface이다. Thread가 생성되면 어떤 작업을 할지 전달해주는 것이다. Thread도 마찬가지로 어떤 작업을 할지가 무궁무진 하기 때문에 동작 파라미터화 기법을 사용한다.
3. ExcecutorService의 Callable
세번째는 ExecutoreService이다. ExecutorService은 task 제출과 실행과정의 의존성을 끊어준다. 실행과정을 요구사항에 따라 마음대로 지정할 수 있는 것이다. 여기서 사용할 수 있는 @FunctionalInterface는 Callable이다. Callable은 Runnable과 비슷한데 차이점은 결과를 반환한다는 점이다. ExecutorService의 결과로 Future 객체를 반환해서 저장할 수 있다. Runnable의 업그레이드 버전이라고 봐도 된다.
4. GUI 이벤트
마지막 예시는 바로 GUI 이벤트이다. 위의 예시는 button을 클릭 했을 때의 예시인데, 버튼에는 무한대의 경우의 수의 동작들이 들어갈 수 있다. 그렇기 때문에 여기서도 @FunctionalInterface를 사용해서 동작 파라미터화시켰다.
'Java' 카테고리의 다른 글
Java - 비동기 api 호출 (CompletableFuture 1편) (0) | 2022.09.04 |
---|---|
Java - 람다란 무엇인가?(Lambda) (0) | 2022.08.21 |
Java - Functional Interface란? (모던 자바 인 액션 참고) (0) | 2022.08.19 |
Spring - @RestController와 @Controller의 차이 (0) | 2022.08.11 |
Java - Stream에 대해서 (0) | 2022.08.09 |