메서드 활용 패턴 (고급)
6. 정리
- 메서드 참조 4종: static(
Integer::parseInt), 특정 객체(obj::method), 임의 객체(String::length, 첫 인자가 this), 생성자(ArrayList::new). 인자를 그대로 넘기는 람다는 모두 참조로 줄인다. - 고차 함수: 함수를 받으면 전략 주입·콜백·파이프라인, 함수를 돌려주면 팩토리·커링·부분 적용, 받고 돌려주면 데코레이터(재시도, 캐시, 시간 측정). 돌려주는 람다는 매개변수를 캡처한다(effectively final).
- 합성:
Function.andThen(왼→오),compose(오→왼),Predicate.and/or/negate,Comparator.thenComparing/reversed, 도메인 인터페이스에는default조합 메서드(then,orCheaper)를 직접 만든다. - 제네릭 메서드는
<T>를 반환 타입 앞에 선언하고 인자·대입 대상에서 추론한다. 추론 근거가 없으면클래스.<T>메서드()로 명시. - 지연 실행은 값 대신
Supplier. 메모이제이션은computeIfAbsent(단, 재귀 안에서는 get/put 분리). 선형 재귀는LongStream.reduce, 수열은Stream.iterate/generate. CompletableFuture:thenApply(동기 변환),thenCompose(의존하는 비동기),thenCombine(독립 작업 합치기). 독립 작업은 먼저 둘 다 시작한 뒤 합친다.
배치 06 레슨에서는 이 데코레이터·헬퍼 기법을 실무 배치에 적용합니다. withReader/withWriter로 리소스를 안전하게 감싸고, forEachChunk로 청크 반복을, timed로 진행률·시간 측정을, retry/skip으로 실패 처리를 함수로 묶어 재사용 가능한 BatchUtils를 만듭니다.