리팩터링/냄새 (리팩터링할 시점)
냄새 6. 가변 데이터 (Mutable Data)
developer-tj
2023. 3. 6. 12:00
반응형
가변 데이터(Mutable data)는 값이 변경될 수 있는 데이터를 의미합니다.
이는 데이터가 동시에 여러 곳에서 변경될 가능성이 높아져 코드를 이해하고 유지보수하기 어렵게 만들며, 오류의 가능성도 높아집니다.
이러한 문제를 해결하기 위해서는 불변성(Immutability)을 지향해야 합니다.
즉, 값을 변경하는 대신 새로운 값을 반환하도록 구현하면 됩니다.
이를 통해 코드 유지 보수성이 향상되며, 동시성 이슈 등 다른 문제들을 예방할 수 있습니다.
가변 데이터를 캡슐화하여 객체로 만들고, 값을 사용할 때는 불변 객체를 반환하여 데이터 변경에 대한 책임을 객체 내부에 캡슐화하는 것입니다.
그리고 전역 변수의 사용을 최소화하고, const를 적극 활용하여 불변성을 보장하는 것이 좋습니다.
불변 데이터를 사용하면 데이터를 복사하는 데 일부 오버헤드가 발생하지만, 이는 대개 성능 문제가 되지 않습니다.
적용 가능한 리팩터링 기법
- 변수 캡슐화 하기 (Encapsulate Variable)
- 변수 쪼개기 (Split Variable)
- 문장 슬라이드하기 (Slide Statements)
- 함수 추출하기 (Extract Function)
- 질의 함수와 변경 함수 분리하기 (Separate Query from Modifier)
- 세터 제거하기 (Remove Setter)
- 파생 변수를 질의 함수로 바꾸기 (Replace Derived Variable with Query)
- 여러 함수를 클래스로 묶기 (Combine Functions into Class)
- 여러 함수를 변환 함수 묶기 (Combine Functions into Transform)
- 참조를 값으로 바꾸기 (Change Reference to Value)