지난 포스팅에 이어
동작 파라미터화에 대해서 알아보겠다.
'동작 파라미터화'란 메소드의 파라미터로 값이 아닌 '코드(Code)'를 넘기는 기술이다. 이전 포스팅에서는 인터페이스를 만들고 구현클래스를 생성하여 동작 파라미터화를 구현했다.
하지만
매번 구현클래스를 생성하는 것도 낭비이다. 단 한 번 파라미터로 코드를 넘기기 위해, 클래스를 생성하는 것은 메모리에 좋지 못하다. 그러므로 1회성 객체를 생성할 필요가 있는데, 그것이 익명 클래스이다.
자료구조는 데이터의 집합이다. 알고리즘은 데이터에 접근하는 방법이다. 그리고 조건은 데이터를 분류하는 기준이다.
보통 데이터구조와 데이터 접근법은 정해져 있다. 그러나 데이터를 분류하는 조건은 다양하게 존재한다. 예를들어, 사과 여러 개가 있다. 사과 여러 개를 분류하는 기준은 다양하다. 색깔별, 무게별 등등...
그러므로 보통 코드를 파라미터로 넘기는 동작 파라미터화는 다양한 조건에 대응하는 코드로 구현된다.
public class AnonymousClass {
public static void main(String[] args) {
//데이터
List<Apple> apples = new ArrayList<Apple>();
apples.add(new Apple("RED",8));
apples.add(new Apple("GREEN",10));
apples.add(new Apple("RED",7)) ;
// getFilteredApples : 사과를 분류하는 메소드
// 파라미터 1 : 데이터 집합
// 파라미터 2 : 데이터를 분류하는 조건 ( 익명클래스 )
List<Apple> result = getFilteredApples(apples, new ApplePredicate() {
@Override
public boolean isProper(Apple apple) {
if(apple.getColor().equals("RED")) return true; // 색깔로 분류
else return false;
}
});
}
// 사과를 분류하는 메소드
public static List<Apple> getFilteredApples(List<Apple> allApples, ApplePredicate applePredicate){
List<Apple> filteredApples = new ArrayList<Apple>(); // 자료구조
// 알고리즘 : for문
for(Apple apple : allApples){
if(applePredicate.isProper(apple)){ // 데이터를 분류하는 조건
filteredApples.add(apple);
}
}
return filteredApples;
}
}
getFilteredApple 메소드는 데이터 집합(자료구조)과 인터페이스 객체를 파라미터로 갖는다. 인터페이스 객체를 파라미터로 갖으면 다양한 형태를 가진 코드를 파라미터로 던질 수 있다.( 다양한 조건 ) getFilteredApple 메소드는 for문(알고리즘)을 통해 데이터 집합(자료구조)에 접근하고 다양한 조건을 인터페이스를 통해 구현하여 변화에 대응 가능한 코드가 된다.
그럼 다음 포스팅에서는 익명클래스를 이용하여 동적파라미터를 구현한 대표적인 예시들에 대해서 다루어 보겠다.
참고자료
'JAVA > Modern JAVA' 카테고리의 다른 글
[MODERN JAVA] 람다(Lambda)의 활용 - Predicate, Consumer, Function (0) | 2023.03.15 |
---|---|
[MODERN JAVA] 람다(Lambda)의 활용 - 실행 어라운드 패턴 (0) | 2023.03.08 |
[MODERN JAVA] 람다(Lambda)란? (0) | 2023.02.14 |
[MODERN JAVA] 동작 파라미터화 - Comparator,Runnable,Callable (1) | 2023.01.25 |
[MODERN JAVA] 동작 파라미터화 - 전략 디자인 패턴 ( Strategy Pattern ) (0) | 2022.10.24 |