냄새16. 임시필드(Temporary Field)
- 클래스에 있는 어떤 필드가 특정한 경우에만 값을 갖는 경우 (ex. null, 기본값, 임의로 정한 임시값 : String 변수의 "empty"로 한다던지)
- 변수가 임시값(unknown, null)을 가질 때 조건이 추가되어야 한다.
- 어떤 객체의 필드가 "특정한 경우에만" 값을 가진다는 것을 이해하는 것은 일반적으로 예상하지 못하기 때문에 이해하기 어렵다.
- 관련 리팩토링
- "클래스 추출하기(Extract Class)"를 사용해 해당 변수들을 옮길 수 있다.
- "함수 옮기기(Move Fuction)"을 사용해서 해당 변수를 사용하는 함수를 특정 클래스로 옮길 수 있다.
- "특이 케이스 추가하기 (Introduce Special Case)"를 적용해 "특정한 경우에 해당하는 클래스를 만들얼 조건을 제거할 수 있다.
리팩토링 36. 특이 케이스 추가하기(Introduce Special Case)
- 특수한 경우에만 바뀌는 로직이 반복되어 등장한다면, 해당 케이스를 별도의 클래스로 생성할 수 있다.
- 어떤 필드의 특정한 값에 따라 동일하게 동작하는 코드가 반복적으로 나타난다면, 해당 필드를 감싸는 "특별한 케이스"를 만들어 해당 조건을 표현할 수 있다.
- 이러한 매커니즘을 "특이 케이스 패턴"이라고 부르고 "Null Object 패턴(Null인 경우를 별도의 오브젝트로 빼내는 패턴)"을 이러한 패턴의 특수한 형태라고 볼 수 있다.
- ex) customerName이 unknown일 때의 특이케이스 분기가 반복됨
- Customer class 상속받은 특이 케이스 오브젝트를 생성
- Customer (상위 클래스) 에서 특이 케이스 클래스인지 판단 메소드 생성
- 하위 클래스에서 특이 케이스에 맞는 적절한 메소드 생성
'Programming > Java' 카테고리의 다른 글
[리팩토링] 냄새22,리팩토링42 (0) | 2023.05.27 |
---|---|
[리팩토링] 냄새17,리팩토링37 (0) | 2023.05.21 |
[리팩토링] 리팩토링21~23 (0) | 2023.05.07 |
[이펙티브자바] 아이템30. 이왕이면 제네릭 메서드로 만들라 (0) | 2023.04.08 |
[이펙티브자바] 아이템29. 이왕이면 제네릭 타입으로 만들라 (0) | 2023.04.08 |