리팩터링/냄새 (리팩터링할 시점)
냄새 11. 기본형 집착(Primitive Obsession)
developer-tj
2023. 3. 31. 12:00
반응형
기본형 집착(Primitive Obsession)은 객체 지향 언어에서 자주 나타나는 코드 냄새 중 하나입니다.
기본형 집착은 프로그래머가 객체를 사용하기보다 기본형 데이터 타입(정수, 문자열, 부동 소수점 등)을 사용하여 비즈니스 로직을 구현하도록 유도하는 코드 구조를 의미합니다.
기본형 집착은 코드의 가독성과 유지보수성을 저해하며, 프로그램의 일관성과 안정성을 감소시킬 수 있습니다.
예를 들어, 각 사용자의 나이를 저장하는 경우, 기본적으로 나이를 int 형으로 저장할 수 있습니다.
그러나 이는 유효한 나이 값만이 저장된다는 보장이 없으므로 나이 값이 음수일 수 있거나 매우 큰 값이 될 수 있습니다.
이러한 문제를 해결하기 위해 객체를 사용할 수 있습니다.
나이를 나타내는 Age 클래스를 정의하면 유효성 검사를 수행하고 음수나 매우 큰 값이 저장되는 것을 방지할 수 있습니다.
Age 클래스는 기본형 데이터 타입과는 달리, 자체적으로 유효성 검사를 수행할 수 있기 때문입니다.
또 다른 예시로는, 비즈니스 로직에서 계산이나 비교를 위해 문자열을 사용하는 경우가 있습니다.
이 경우, 기본형 데이터 타입 대신 Money나 Price 클래스와 같은 객체를 사용하면, 금액을 검증하고 계산하는 데 필요한 로직을 포함할 수 있습니다.
따라서, 기본형 집착을 피하기 위해 객체를 사용하고 데이터를 캡슐화하여 코드의 가독성과 안정성을 높일 수 있습니다.
적용 가능한 리팩터링 기법
- 기본형을 객체로 바꾸기(Replace Primitive with Object)
- 타입 코드를 서브 클래스로 바꾸기(Replace Type Code with Subclasses)
- 조건부 로직을 다형성으로 바꾸기(Replace Conditional with Polymorphism)
- 클래스 추출하기(Extract Class)
- 매개변수 객체 만들기 (Introduce Parameter Object)