동작 파라미터화란 아직은 어떻게 실행할 것인지 결정하지 않은 코드 블록을 의미한다.
동작 파라미터화를 이용하면 자주 바뀌는 요구사항에 대해 효과적으로 대응할 수 있는데, 코드블럭의 실행은 나중으로 미뤄진다. 나중에 실행될 메서드의 인수로 코드 블록을 전달할 수 있고, 결과적으로 코드 블럭에 따라 메서드의 동작이 파라미터화된다.
- 리스트의 모든 요소에 대해서 '어떤 동작'을 수행할 수 있음
- 리스트 관련 작업을 끝낸 다음에 '어떤 다른 동작'을 수행할 수 있음
- 에러가 발생하면 '정해진 어떤 다른 동작'을 수행할 수 있음
동작 파라미터로 위와 같은 기능들을 구현할 수 있다.
프레디케이트를 활용하여 선택 조건을 결정하는 인터페이스를 아래와같이 정의할 수 있다.
위 조건에 따라 filter 메서드가 다르게 동작할 것이라고 예상할 수 있다.
이런 패턴을 전략 디자인 패턴이라고 부른다. 전략 디자인 패턴은 각 알고리즘(전략이라 불리는)을 캡슐화하 는 알고리즘 패밀리를 정의해둔 다음에 런타임에 알고리즘을 선택하는 기법이다.
컬렉션 탐색 로직과 각 항목에 적용할 동작을 분리할 수 있다는 것이 동작 파라미터화의 강점이다. 메서드가 다른 동작 을 수행하도록 재활용할 수 있다. 따라서 유연한 API를 만들 때 동작 파라미터화가 중요한 역할을 한다.
익명 클래스
자바는 클래스의 선언과 인스턴스화를 동시에 수행할 수 있도록 익명 클래스라는 기법을 제공한다. 익명 클래스를 이용하면 코드의 양을 줄일 수 있다. 하지만 익명 클래스가 모든 것을 해결할 수 있는 것은 아니다.
익명 클래스란, 자바의 지역 클래스(블록 내부에 선언된 클래스)와 비슷한 개념이다. 이름이 없는 클래스이다. 이를 활용하면 클래스 선언과 인스턴스 화를 동시에 할 수 있다. 즉, 즉석해서 필요한 구현을 만들어서 사용할 수 있다.
동작 파라미터를 활용하기 위해 람다 표현식을 활용해서도 간단하게 구현할 수 있다.
List<Apple> result = filterApples(inventory, (Apple apple) -> RED.equals(apple.getColor()));
리스트 방식을 통해서도 추상화 할 수 있다.
정리
- 동작 파라미터화에서는 메서드 내부적으로 다양한 동작을 수행할 수 있도록 코드를 메서드 인수로 전달한다.
- 동작 파라미터화를 이용하면 변화하는 요구사항에 더 잘 대응할 수 있는 코드를 구현할 수있으며 나중에 엔지니어링 비용을 줄일 수 있다.
-
코드 전달 기법을 이용하면 동작을 메서드의 인수로 전달할 수 있다. 하지만 자바 8 이전 에는 코드를 지저분하게 구현해야 했다. 익명 래스로도 어느 정도 코드를 깔끔하게 만 들 수 있지만 자바 8에서는 인터페이스를 상속받아 여러 클래스를 구현해야 하는 수고를 없앨 수 있는 방법을 제공한다.
'Language Study > Java' 카테고리의 다른 글
Java 17: LTS와장기적 사용의 이유 (3) | 2024.10.12 |
---|---|
[모던 자바 인 액션] 스트림(Stream) (1) | 2024.07.25 |
[모던 자바 인 액션] 람다 표현식 (2) | 2024.07.23 |
[모던 자바 인 액션] 자바 8,9,10,11: 무슨 일이 일어나고 있는가? (1) | 2024.07.23 |
multi-thread 에서 두 가지 task를 번갈아가도록 (0) | 2024.03.18 |