[CHAPTER 2] - 동작 파라미터화 코드 전달하기 #17
Unanswered
coalong
asked this question in
CHAPTER 2 동작 파라미터화 코드 전달하기
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
[CHAPTER 2] - 동작 파라미터화 코드 전달하기
소비자의 요구사항은 계속 바뀔 수 있고 이에 유연하게 대처하면서 비용은 최소로 하고, 장기적으로 유지보수가 가능해야 한다.
동작 파라미터화 란?
2.1 변화하는 요구사항에 대응하기
아래 예제를 통해 변화에 대응하는 유연한 코드를 작성하는 과정을 살펴보자.
2.1.1 첫 번째 시도: 녹색 사과 필터링
비교적 간단한 기능 구현이다.
여기서 농부가 녹색 사과 대신 빨간 사과도 필터링 하고 싶어진다면?
단순하게 생각하면, filterReadApples 메서드를 하나 더 만들고 조건문을 수정하면 된다.
하지만, 더 다양한 색을 필터링하는 요구사항이 온다면?
거의 비슷한 코드가 반복 존재된다면 그 코드를 추상화하라.
2.1.2 두 번째 시도: 색을 파라미터화
이제 농부가 원하는 모든 색상을 대응할 수 있다.
다음에는 농부가 다른 조건으로 무게를 기준으로 무거운 사과, 가벼운 사과를 구분할 수 있도록 요구사항을 추가했다.
색과 마찬가지로 무게 기준도 얼마든지 바뀔 수 있기 때문에 무게를 파라미터로 넘겨 메서드를 작성해보자.
위 코드를 작성해보면서 느꼈겠지만, 색을 필터링 하는 코드와 중복된다.
이는 소프트웨어 공학의 DRY(don't repeat youreslf) 원칙에 위배된다.
2.1.3 세 번째 시도: 가능한 모든 속성으로 필터링
위 메서드를 아래와 같이 사용한다.
2.2 동작 파라미터화
이것이 전략 디자인 패턴이다.
메서드에서 ApplePredicate 객체를 받아 사과의 조건을 검사하도록 메서드를 작성해보자.
2.2.1 네 번째 시도: 추상적 조건으로 필터링
❔ 여러 클래스를 구현해서 인스턴스화하는 과정을 간소화할 수 없을까?
2.3 복잡한 과정 간소화
2.3.1 익명 클래스(Anonymous class)
익명 클래스(anonymous class) 란?
람다(Lambda) 란?
함수형 인터페이스(Functional Interface) 란?
하나의 추상 메서드를 가진 인터페이스
이다.(3장에서 함수형 인터페이스에 대해 설명)
2.3.2 다섯 번째 시도: 익명 클래스 사용
위의 코드는 필터링 조건을 구현한 클래스인
AppleHeavyWeightPredicate
,AppleHeavyWeightPredicate
을 만드는 대신익명클래스
를 이용해서ApplePredicate
인터페이스를 구현한 방법이다.이렇게 구현하게 되면 각 조건에 따라 계속 클래스를 만들지 않아도 되었지만, 여전히 반복되는 코드가 있고 코드를 작성하고 읽기 어려워진다.
2.3.3 여섯 번째 시도: 람다 표현식 사용
2.3.4 일곱 번째 시도: 리스트 형식으로 추상화
Beta Was this translation helpful? Give feedback.
All reactions