👀 가변 데이터 (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 ]
출처 : 인프런 강의 (백기선 - 코딩으로 학습하는 리팩토링)
'Programming > 리팩토링' 카테고리의 다른 글
[리팩토링 기술-6] 단계 쪼개기 / 클래스 추출하기 (0) | 2022.11.10 |
---|---|
[리팩토링 기술-5] 반복문을 처리하는 리팩토링 (0) | 2022.11.08 |
[리팩토링 기술-3] 긴 매개변수를 처리하는 리팩토링 (0) | 2022.11.08 |
[리팩토링 기술-2] 긴 함수를 처리하는 리팩토링 (0) | 2022.11.07 |
[리팩토링 기술-1] 중복코드를 처리하는 리팩토링 (0) | 2022.11.07 |