냄새 6. 가변 데이터

  • 데이터를 변경하다보면 예상치 못했던 결과나 해결하기 어려운 버그가 발생하기도 한다.
  • 함수형 프로그래밍 언어는 데이터를 변경하지 않고 복사본을 전달한다. 하지만 그밖의 프로그래밍 언어는 데이터 변경을 허용하고 있다. 따라서 변경되는 데이터 사용 시 발생할 수 있는 리스크를 관리할 수 있는 방법을 적용하는 것이 좋다.
  • 관련 리팩토링
    • "변수 캡슐화하기"를 적용해 데이터를 변경할 수 있는 메서드를 제한하고 관리할 수 있다.
    • "변수 쪼개기"를 사용해 여러 데이터를 저장하는 변수를 나눌 수 있다.
    • "코드 정리하기"를 사용해 데이터를 변경하는 코드를 분리하고 피할 수 있다.
    • "함수 추출하기"로 데이터를 변경하는 코드로붙터 사이드 이팩트가 없는 코드를 분리할 수 있다.
    • "질의 함수와 변경 함수 분리하기"를 적용해서 클라이언트가 원하는 경우에만 사이드 이팩트가 있는 함수를 호출하도록 API를 개선할 수 있다.
    • 계산해서 알아낼 수 있는 값에서 "파생 변수를 질의 함수로 바꾸기"를 적용할 수 있다.
    • 변수가 사용되는 범위를 제한하려면 "여러 함수를 클래스로 묶기" 또는 "여러 함수를 변환 함수로 묶기"를 적용할 수 있다.
    • "참조를 값으로 바꾸기"를 적용해서 데이터 일부를 변경하기 보다는 데이터 전체를 교체할 수 있다.

리팩토링 18.

리팩토링 19.

리팩토링 20.

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