냄새 16. 임시 필드
- etc/리팩토링
- 2023. 5. 10.
들어가기 전
이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다.
냄새 16. 임시 필드(Temporary Field)
- 클래스에 있는 어떤 필드가 특정한 경우에만 값을 갖는 경우.
- 어떤 필드가 특정한 경우에만 값을 갖는 경우, 그 특정한 경우가 아닐 때는 해당 클래스의 해당 필드가 임시 값을 가진다. 따라서 임시변수라고 의미한다.
- 어떤 객체의 필드가 '특정한 경우에만' 값을 가진다는 것을 이해하는 것은 일반적으로 예상하지 못하기 때문에 이해하기 어렵다.
- 관련 리팩토링
- '클래스 추출하기'를 사용해 해당 변수들을 옮길 수 있다.
- '함수 옮기기'를 사용해서 해당 변수를 사용하는 함수를 특정 클래스로 옮길 수 있다.
- '특이 케이스 추가하기'를 적용해 '특정한 경우'에 해당하는 클래스를 만들어 해당 조건을 제거할 수 있다.
클래스의 어떤 필드가 있고, 그 값이 임시적인 값이라고 보자. 예를 들어 일반적인 기본값은 null, "EMPTY" 같은 형태가 존재할 수 있을 것이다. 이런 임시적인 값을 '임시 필드 냄새'로 표현한다. 항상 값이 있는 필드와 임시 필드가 한 객체에 섞여있으면, 해당하는 클래스가 '어떤 경우에 임시 필드에 값을 가지는지'에 대해 이해하는데 많은 시간을 사용해야 한다.
임시적인 필드가 들어있다면, 최악의 경우에는 이렇게 더 코드가 더러워 질 수 있다.
- 이런 경우에 임시적인 필드의 값을 가진다. → 이걸 표현하는 코드 추가
- 임시적인 필드에 값이 있는 경우 이런 식으로 동작하고, 없다면 저런식으로 동작하고. → If ~ Else문 추가
따라서 임시적인 필드를 제거하는 것이 중요하다.
이 때 가능한 리팩토링은 다음과 같다.
- 클래스를 하나 만들고, 임시 필드와 해당되는 메서드들을 옮기는 형식
- 임시 필드와 항상 값을 가지는 객체가 분리되면서, 의미를 더욱 명확히 할 수 있다.
- 특이케이스로 추출하기
요지는 '임시 필드와 항상 값을 가지는 객체를 분리'시키는 것이다. 이를 통해 특정 케이스에만 값을 가지는 로직을 따로 고려하지 않아도 되게 된다.
'etc > 리팩토링' 카테고리의 다른 글
리팩토링 37. 위임 숨기기 (0) | 2023.05.10 |
---|---|
냄새 17. 메세지 체인 (0) | 2023.05.10 |
리팩토링 36. 특이 케이스 추가하기 (1) | 2023.05.10 |
리팩토링 35. 죽은 코드 제거하기 (0) | 2023.05.10 |
냄새 15. 추측성 일반화 (0) | 2023.05.10 |