포스팅 전 먼저 서론을 조금 써보자면, 보통 학교 교과목 숙제에서는 흔히 생기지 않는 일이지만, 공모전이나 조금 덩치가 있는 프로그램 혹은 일을 하다보면 가장 많이 생기는 것이 있는 것 같아요. 


그것은 바로 "변화" 라는 생각이 드는데요


회사에서도 일을 하다보면, 기획이나 디자인 혹은 개발과정 중 여러 상황 등 기타 이유로 인하여, 심심치 않게 변화가 등장함을 알 수 있습니다.


변화란 나쁜 것인가? 라고 생각했을 때 전 아닌 것 같습니다. 어디서 흔히 들은 이야기론,

 

"프로젝트의 변화가 나쁜 게 아니라, 변화에 적응하지 못하는 개발자의 무능함이 나쁘다" 


이런게 있습니다. "변화를 사랑하는 개발자가 됩시다. ㅡㅡ^"


서론 부분에 변화에 대한 이야기를 쓴 이유는 함수형 프로그래밍의 4번째 포스팅인 동작 파라미터화(Behavior parameterization)와 관련된 이야기와 조금 관련이 있어서 조금 꺼내봤습니다.


이 이야기와 비슷한 포스팅을 아마, 



이 곳에서 진행을 했었습니다. 이 곳에서 진행한 코드를 조금 더 디테일하게 리뷰해보고자 합니다. (귀찮아서 그러는게 아닙니다. ㅡㅡ^)


copy&paste가 변화에 유연하지 못함과 그렇기 때문에 이를 해결하기 위한 객체지향적 관점에서 여러 디자인 패턴이 등장했고, 지난번에는 그 중 추상화 과정을 통해 전략패턴을 사용해보았음을 알 수 있습니다.


그 중 우리가 다시한번 살펴볼 곳은, 아래 코드입니다. 


/**
     * 사과 객체를 분류하기 위한 함수
     * 
     * @param appleList
     * @param appleFilter
     * @return
     */
    public static List<Apple> GetFilterApple(List<Apple> appleList, AppleFilterAble appleFilter) {
        ArrayList<Apple> resultList = new ArrayList<>();
 
        for (Apple apple : appleList) {
            if (appleFilter.isContain(apple)) {
                resultList.add(apple);
            }
        }
 
        return resultList;
    }
cs


우리는 보다 GetFilterApple을 유연하게 사용하기 위해 interface를 만들어 inContain 에 대한 명세를 추상화하였고, 사용처에서 익명클래스로 할일에 대한 최종 명세를 표기하였습니다. 아래와 같이 말이죠.


1
2
3
4
5
6
7
GetFilterApple(inventory, new AppleFilterAble(){
    @Override
    public boolean isContain(Apple apple){
        return "green".equals(apple.getColor());
    }
});
 
cs


여기에서 우린 isContain이라는 동작을 파라미터화(이번 포스팅의 주제)하여, GetFilterApple 메소드로 넘기게 되었고, 보다 더욱 변화에 유연하게 사용할 수 있게 되었습니다.


그러나, 이 곳에서 우리는 단지, inContain 이란 메소드를 넘기기 위해, 인터페이스를 만들고, 객체로 한번 감싸 넘기고 있습니다. 이런 과정이 보다 복잡하고, 어려운 작업이 될 수 있지 않을까요? (복잡한 것을 좋아하는 사람은 없습니다. ㅡㅡ^)


그렇기 때문에 람다 표현식과 메소드를 코드로 넘기는 방법 같은 방법이 제시 되었음을 알 수 있습니다. 아래는 지난번에 했던 람다표현식을 통해, 함수만 넘기는 예제입니다.


1
GetFilterApple(inventory, (Apple a) -> "green".equals(a.getColor()));
cs


우리는 동작을 추상화하고, 파라미터로 넘기는 것이 변화에 대해 유연함을 줄 수 있다는 것을 알았고, 함수형 프로그래밍을 통해 간결함까지 사용할 수 있음을 알 수 있게 되었습니다. 단순히 람다가 등장하여 코드가 짧아졌다는 것만을 알게 아니라, 이러한 전과정을 모두 알면 좋을 것 같아서 코드에 대한 리뷰를 다시 해보게 되었습니다.^^;



자바 8 인 액션
국내도서
저자 : 라울-게이브리얼 우르마(RAOUL-GABRIEL URMA),마리오 푸스코(MARIO FUSCO),앨런 마이크로프트(ALAN MYCROFT) / 우정은역
출판 : 한빛미디어 2015.04.01
상세보기


반응형
Posted by N'