본문 바로가기

Programming/리팩토링

[리팩토링 기술-4] 가변데이터를 처리하는 리팩토링

👀 가변 데이터 (Mutable Data)

 

- 데이터를 변경하다보면 예상치 못했던 결과나 해결하기 어려운 버그가 발생하기도 한다.

 

- 함수형 프로그래밍 언어는 데이터를 변경하지 않고 복사본을 전달한다.

하지만 그밖의 프로그래밍 언어는 데이터 변경을 허용하고 있다.

따라서 변경되는 데이터 사용 시 발생할 수 있는 리스크를 관리할 수 있는 방법을 적용하는 것이 좋다.

 

 

* 관련 리팩토링

- "변수 쪼개기(Split Variable)"을 사용해 여러 데이터를 저장하는 변수를 나눌 수 있다.

 

- "질의 함수와 변경 함수 분리하기(Separate Query form Modifier)"를 적용해서

클라이언트가 원하는 경우에만 사이드 이팩트가 있는 함수를 호출하도록 API를 개선할 수 있다.

 

- 가능하다면 "세터 제거하기(Remove Setting Method)"를 적용한다.

 

- 계산해서 알아낼 수 있는 값에는 "파생 변수를 질의 함수로 바꾸기(Replace Derived Variable with Query)"를 적용할 수 있다.

 

- 변수가 사용되는 범위를 제한하려면 "여러 함수를 변환함수로 묶기(Combine Function into Transform)"을 적용할 수 있다.

 

- "참조를 값으로 바꾸기(Change Reference to Value)"를 적용해서 데이터 일부를 변경하기 보다는

데이터 전체를 교체할 수 있다.

 

 


[ 가변데이터가 있는 코드를 리팩토링할 때 사용할 수 있는 기술 ] 

 

🙌  변수 쪼개기 (Split Variable)

 

- 어떤 변수가 여러 번 재할당 되어도 적절한 경우

(1) 반복문에서 순회하는데 사용하는 변수 또는 인덱스

(2) 값을 축적시키는데 사용하는 변수

 

- 그밖의 경우에 재할당 되는 변수가 있다면 

해당변수는 여러 용도로 사용될 수 있기 때문에

변수를 분리해야 더 이해하기 좋은 코드를 만들 수 있다.

 

(1) 변수 하나 당 하나의 책임을 지도록 한다

(2) 상수를 활용한다.

 

 

[  Berfore  ]

 

 

 

[  After 

 

 

 

 

[  Berfore  ]

 

 

[  After 

 

 

 

 


🙌  질의 함수와 변경 함수 분리하기 (Separate Query from Modifier)

 

- 명령-조회 분리 (command-query separation) 규칙

: 어떤 값을 리턴하는 함수는 사이드 이팩트가 없어야 한다.

 

 

[  Berfore  ]

 

 

 

[  After 

 

 

 

 

출처 : 인프런 강의 (백기선 - 코딩으로 학습하는 리팩토링)