본문 바로가기
공부일기/JAVA

JAVA 공부일기2-2

by 고다나 2023. 5. 14.
모던 자바 인 액션
Chapter2 동작 파라미터화 코드 전달하기

 

동작 파라미터화를 이용하면 자주 바뀌는 요구사항에 효과적으로 대응. (동작파라미터화: 어떻게 실행할 것인지 결정하지 않은 코드 블록. 코드 블록은 나중에 프로그램에서 호출.)

 

2.1 변화하는 요구사항에 대응하기

 

가정: 농장 재고목록 애플리케이션에 리스트에서 녹색 사과 필터링 기능 추가.

2.1.1 첫 번째 시도: 녹색 사과 필터링

모던자바인액션 p.69

→ 농부가 변심해 빨간 사과를 요구 등 다양한 변화에 대응x. 거의 비슷한 코드가 반복 존재한다면 그 코드를 추상화.

 

2.1.2 두번째 시도: 색을 파라미터화

모던자바인액션 p.70
모던자바인액션 p.70

색과 무게를 파라미터화 함. 하지만 목록 검색, 각 사과에 필터링 조건을 적용하는 부분의 코드가 중복.

 

2.1.3 세 번째 시도: 가능한 모든 속성으로 필터링

모던자바인액션 p.71

색과 무게를 filter라는 메서드로 합침. true와 false의 의미 모호. 요구사항에 유연하게 대처x.

 

2.2 동작 파라미터화

2.2.1 네 번째 시도: 추상적 조건으로 필터링

모던자바인액션 p.72
모던자바인액션 p.73

List<Apple> heavyApples = filterApples(inventory, new AppleHeavyWeightPredicate());

 선택 조건을 결정하는 인터페이스 정의. 사과 선택 전략을 캡슐화함. ApplePredicate 객체를 받아 사과 조건을 검사하도록 함.

 

2.3 복잡한 과정 간소화

2.3.1 다섯번째 시도: 익명 클래스 사용

모던자바인액션 p.79

익명클래스를 이용해 ApplePredicate를 구현. 익명 클래스가 많은 공간 차지.

 

2.3.2 여섯 번째 시도: 람다 표현식 사용

모던자바인액션 p.81

 자바8람다표현식을 이용해 복잡성 해결.

모던자바인액션 p.82

2.3.3 일곱 번째 시도: 리스트 형식으로 추상화

모던자바인액션 p.82

List<Apple> redApples = filer(inventory, (Apple apple) -> RED.equals(apple.getColor()));

유연성과 간결함.

'공부일기 > JAVA' 카테고리의 다른 글

JAVA 공부일기1-14  (0) 2023.05.31
JAVA 공부일기2-3  (0) 2023.05.17
JAVA 공부일기2-1  (0) 2023.05.10
JAVA 공부일기1-13  (0) 2023.05.07
JAVA 공부일기1-12  (0) 2023.04.30

댓글