본문 바로가기
Programming/Java

[리팩토링] 냄새16,리팩토링36

by 읽고 쓰는 개발자 2023. 5. 21.

냄새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 (상위 클래스) 에서 특이 케이스 클래스인지 판단 메소드 생성 
    • 하위 클래스에서 특이 케이스에 맞는 적절한 메소드 생성

 

출처 : 백기선님 - 코딩으로 학습하는 리팩토링