본문 바로가기
Programming/Java

[리팩토링] 리팩토링21~23

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

리팩토링21. 파생 변수를 질의 함수로 바꾸기

Replace Derived Variable with Query

  • 변경할 있는 데이터를 최대한 줄이도록 노력해야 한다. (가급적이면 변경 있는 변수 줄이기)
  • 계산해서 알아낼 있는 변수는 제거할 있다.
  • 계산에 필요한 데이터가 변하지 않는 값이라면, 계산의 결과에 해당하는 데이터 역시 불변 데이터기 때문에 해당 변수는 그대로 유지할 있다.
  • Ex) discountedTotal : 파생 데이터 (총액 할인액)

 

 

 

 

리팩토링22. 여러 함수를 변환 함수로 묶기

Combine Functions into Transform

  • 관련있는 여러 파생 변수를 만들어내는 함수가 여러곳에서 만들어지고 사용된다면 그러한 파생 변수를 변환 함수(transform function)” 통해  곳으로 모아둘  있다.
  • 소스 데이터가 변경될  있는 경우에는(Setter 가지고 있는 경우) “여러 함수를 클래스로 묶기 (Combine Functions into Class)” 사용하는 것이 적절하다.
  • 소스 데이터가 변경되지 않는 경우에는  가지 방법을 모두 사용할  있지만, 변환 함수를 사용해서 불변 데이터의 필드로 생성해 두고 재사용할 수도 있다.
  • Ex) Reading Object (record 자료구조 – immutable)
    • EnrichReading 메소드(변환함수) – immutable 새로운 타입의 레코드 리턴새로운 타입에 baseCharge   계산이 필요한 필드를 생성하여변환함수를 통해 새로운 타입의 레코드 생성.
    • 변환함수 호출  새로운 타입의 레코드를 리턴하여 Client마다 baseCharge 등을 계산해야하는 번거로움 줄일  있음 (중복 제거)

 

 

리팩토링 23. 참조를 값으로 바꾸기

Change Reference to Value

  • Immutable values 완전히 반대로 하는 리팩토링
  • 레퍼런스 (Reference) 객체 vs  (Value) 객체
    • 레퍼런스 객체 – 얼마든지 데이터 변경 가능한 객체, 레퍼런스 객체 사용 중인 모든 곳에서 변경 사항이 전파됨
  •  객체는 객체가 가진 필드의 값으로 동일성을 확인 (setter 비제공, equals  hashCode 재정의 필요 : 동일성 확인을 위해. -> record 자료구조 활용 권장자바17 이전 버전에서는 intellij에서 자바빈즈 템플릿빌더 템플릿레코드 템플릿 선택 가능)
  •  객체는 변하지 않음(불변객체)
  • 어떤 객체의 변경 내역을 다른 곳으로 전파시키고 싶다면 레퍼런스아니면  객체 사용

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