[CHAPTER 2] - 동작 파라미터화 코드 전달하기 #12
Unanswered
Irisation23
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.
-
0. 개요
클라이언트의 요구사항은 언제나 바뀐다.
바뀔 요구사항을 대비해 미리 만들 수 없다면, 필요한 시점에 효과적으로 대응 할 수 있는 방법이 필요하다.
이를 위해
동작 파라미터화
를 이용한다.1. 변화하는 요구사항에 대응
총 7단계로 요구사항을 구성하여
동작 파라미터화
의 개념을 잡아보자.해당 코드를 보는 시각은
농부
가 자동화 된 농작물 필터링 기계의 로직을 만들어 달라고 요구해 온 상황이라 생각해보자.1.0 Domain
Apple 클래스
Color 클래스
Inventory 클래스
1.1 녹색 사과 필터링
농장 주인은 최초에 요구사항으로 녹색 사과에 대한 필터링만을 요청했다.
하지만 금새 마음을 바꿨다.
1.2 색을 파라미터화 (하지만 이내 무게 요청을 추가함)
하지만 위의 구조는 대부분의 코드가 중복된다.
그리고 해당 중복 코드를 엮어 색, 무게를 동시에 처리할 방법에 대해 강구 해 볼 수있다.
1.3 가능한 모든 속성으로 필터링 (flag가 의미하는 바는 색과 무게 중 어떤 것을 기준으로 필터링할지 가리키는 요소이다.)
해당 코드를 보자마자 true, false에 대해 무슨 행위를 하는지 분석하는데 골머리를 썩게된다.
기준이 명확하지 못해, 코드 가독성이 떨어지게 되고 이는 개발 속도를 저하시킨다.
이제 해당 사안을 안고
동작 파라미터화
에 대해 본격적으로 알아보자.2. 동작 파라미터화
ApplePredicate 인터페이스
import com.hello.modern.chapter1.domain.Apple;
public interface ApplePredicate {
boolean test(Apple apple);
}
AppleGreenColorPredicate 클래스
public class AppleGreenColorPredicate implements ApplePredicate {
}
Foo
import com.hello.modern.chapter1.domain.Apple;
import com.hello.modern.chapter1.domain.Color;
public class AppleGreenColorPredicate implements ApplePredicate {
}
2.1 요구사항 4: 추상적 조건으로 필터링
보다 변화에 다양하게 대응할 수 있도록 코드를 추가할 수 있었다.
하지만 해당 구조는 꽤 복잡한 구조를 가짐으로써 언젠간 해당 코드를 이어받아 코드를 작성하게 될 다음 개발자를 배려하지못했다.
각 변경 사안에 맞는 수많은
구현 클래스
를 구축할 것인가?극단적인 예시일 수 있지만, 자바는 클래스의 선언과 인스턴스화를 동시에 수행할 수 있도록
익명 클래스
기법을 제공하고 있다.2.2 요구사항 5: 익명 클래스 사용
익명 클래스에 대한 자세한 설명은 링크 를 참조하기 바란다.
2.3 요구사항 6: 람다 표현식 사용
인텔리제이는 사실 익명클래스의 사용보다는 람다 표현식을 권유한다.
하는 역할은 같지만 보다 깔끔한 코드와 복잡성을 해결하는
읽좋코
가 된것이다.마지막 추상화를 만나보자.
추상화의 관점은 아래와 같다.
2.4 요구사항 7: 리스트 형식으로 추상화
추상화
는 행위의 반복에 기반하기도 하며, 역할에 기반하기도 한다.3. 정리 및 회고 📚
2023-06-11 일
모던 자바 인 액션의 시작은 동작 파라미터화 코드 전달하기였다.
Behvior Parameterization 변화에 유연하기 위해 자바가 선택한 기법을 학습 해 볼 수 있었고, 과거의 코드 역사를 기반으로 해당 학습을 이어가니
체화 시키기에 좋았다.
하지만 개인적으로 글로 정리하기에는 호흡이 길었다는 느낌을 받았고, 1차적으로 정리를 마치면 정리 역시도 리팩터링을 이어나가 보다 중요한 부분에 포인트를 싣는게 좋을것 같다 생각했다.
시작이 반이라 생각하며 조금씩 나아 가 보자. (추신: 자바 20은 2023-03-23에 나옴)
Beta Was this translation helpful? Give feedback.
All reactions