JAVA/Modern JAVA

[MODERN JAVA] 동작 파라미터화 - 익명 클래스(Anonymous Class)

IT록흐 2023. 1. 16. 22:14
반응형

 

 

[MODERN JAVA] 동작 파라미터화 - 전략 디자인 패턴 ( Strategy Pattern )

변화에 대처 가능한 코드를 짜려면 어떻게 해야할까? 컴파일에 결정되는 코드가 아닌 런타임에 결정되는 코드를 짜야 한다. 대표적으로 동작 파라미터화(behavior parameterization)이 있다. 많은 데이

lordofkangs.tistory.com

 

 

지난 포스팅에 이어

동작 파라미터화에 대해서 알아보겠다. 

 

'동작 파라미터화'란 메소드의 파라미터로 값이 아닌 '코드(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문(알고리즘)을 통해 데이터 집합(자료구조)에 접근하고 다양한 조건을 인터페이스를 통해 구현하여 변화에 대응 가능한 코드가 된다.

 

그럼 다음 포스팅에서는 익명클래스를 이용하여 동적파라미터를 구현한 대표적인 예시들에 대해서 다루어 보겠다.

 

 


 

참고자료

 

모던 자바 인 액션 - YES24

자바 1.0이 나온 이후 18년을 통틀어 가장 큰 변화가 자바 8 이후 이어지고 있다. 자바 8 이후 모던 자바를 이용하면 기존의 자바 코드 모두 그대로 쓸 수 있으며, 새로운 기능과 문법, 디자인 패턴

www.yes24.com

 

 

 

반응형