ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 챕터[2] 동작 파라미터화
    모던자바인액션 2020. 10. 21. 15:55

    제너릭이란 클래스에서 사용할 타입을 클래스 외부에서 선택하여 사용한다.

    제네릭 타입은 참조형 타입만 가능하다 (기본형 사용 불가능)

      ->Wrapper Class 사용


    동작 파라미터화란?

    자주 바뀌는 요구사항에 효과적으로 대응할 수 있는 방법으로 아직은 어떻게 실행할 것인지 결정화지 않은 코드 블럭을 의미한다.

     

    동작 파라미터화

    변화는 요구사항에 대응하기 위하여 기존에는 메서드를 제작하여 구현하였다. 아래와 같이 2가지의 일을 하는 2개의 메서드를 구현하여 판단했다.

      -> 사과의 색이 빨간색인 사과만 거르는 필터링 메서드

      -> 사과의 색이 초록색인 사과만 거르는 필터링 메서드

     

    매 요구사항마다 메서드가 하나씩 생길 수 있는 반면 동작 파라미터화를 이용하여 참 또는 거짓만 반환하는 함수인 프리디케이트를 정의해보자.

     

     

    아래의 예제코드와 같이 ApplePredicate를 정의하여 요구사항에 맞게 test 메서드를 다른 방식으로 동작 시킨 것 이다.

    그 외 두개의 동작을 동시에 구현한 프리디케이트도 정의할 수 있다.

    코드 github.com/hodolee246/ModernJavaStudy/blob/master/src/test/java/com/example/modernjava/ch2/ch2Predicate.java

    public interface ApplePredicate {
        boolean test (Apple apple);
    }
    
    public class AppleColorPredicate implements ApplePredicate {
        @Override
        public boolean test(Apple apple) {
            return "GREEN".equals(apple.getColor());
        }
    }
    
    public class AppleHeavyWeightPredicate implements ApplePredicate {
        @Override
        public boolean test(Apple apple) {
            return apple.getWeight() > 150;
        }
    }
    

    반면 이러한 방식으로 생기는 코드도 여러 클래스를 정의 하여 인스턴스화 하며 많은 코드량을 발생시키는데 이 문제점을 개선하는 방법으로는 익명 클래스 라는 기법을 제공한다. 

     

    익명클래스 : 자바의 지역 클래스 와 비슷한 개념으로 이름이 없는 클래스이다. 익명 클래스를 이용 시 클래스 선언과 인스턴스화를 동시에 할 수 있다. (아래 예제와 같이 즉석에서 구현하여 만들고 사용할 수 있다.)

    public List<Apple> inventory = Arrays.asList(new Apple(150, Apple.Color.GREEN),
                                                  new Apple(110, Apple.Color.GREEN),
                                                  new Apple(170, Apple.Color.RED));
    
    List<Apple> redApples = filterApples(inventory, new ApplePredicate() {
      @Override
      public boolean test(Apple apple) {
      	return Apple.Color.RED.equals(apple.getColor());
      }
    });

    람다 : 반면 익명클래스 만으로도 공간이 너무 많이 사용되고 있어서 결국에는 이걸 보완하기 위하여 자바8부터 도입된 방법으로 아래 예제와 같이 구현할 수 있다.

    public List<Apple> inventory = Arrays.asList(new Apple(150, Apple.Color.GREEN),
                                                    new Apple(110, Apple.Color.GREEN),
                                                    new Apple(170, Apple.Color.RED));
                                                    
    List<Apple> result = filterApples(inventory, (Apple apple) -> Apple.Color.RED.equals(apple.getColor()));

    그나마 github : github.com/hodolee246/ModernJavaStudygithub.com/hodolee246/ModernJavaStudy/blob/master/src/main/java/com/example/modernjava/ch2/ExamPredicate.java

    '모던자바인액션' 카테고리의 다른 글

    챕터[7] 스트림 병렬화  (0) 2020.10.21
    챕터[6] 스트림 그룹화  (0) 2020.10.21
    챕터[5] 스트림 데이터 수집  (0) 2020.10.21
    챕터[4] 스트림  (0) 2020.10.21
    챕터[3] 람다  (0) 2020.10.21

    댓글

Designed by Tistory.