냄새 11. 기본형 집착

    들어가기 전

    이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다.


    냄새 11. 기본형 집착 (Primitive Obsession)

    • 기본형 집착
      • 어플리케이션이 다루고 있는 도메인에 필요한 클래스를 만들지 않고, 프로그래밍 언어가 제공하는 기본 타입만을 계속 사용하는 경우가 많다. 
      • 예) 전화번호, 좌표, 돈, 범위, 수량 등
      • 기본형으로는 단위 (인치 vs 미터) 또는 표기법을 표현하기 어렵기 때문에 한계가 존재한다.
    • 관련 리팩토링 기술
      • 기본형을 객체로 바꾸기
      • 타입 코드를 서브 클래스로 바꾸기 (타입 코드를 기반으로 서브 클래스를 각각 생성한다.)
      • 조건부 로직을 다형성으로 바꾸기 
      • 클래스 추출하기 (앞에서 공부)
      • 매개변수 객체 만들기  (앞에서 공부)

     

    어플리케이션을 만들 때, 처음에는 프로그래밍 언어에서 제공해주는 기본 타입(int, double..)을 이용해서 데이터를 표현해도 문제가 없다. 그런데 어플리케이션을 개발하다보면 기본 타입만으로는 부족한 경우가 점점 많아진다. 아래에 관련되 몇 가지 예시가 있다.

    • 전화번호 : 처음에는 한국만 서비스 되었으나, 나중에는 미국을 서비스 할 수도 있음. 이 때 국가번호가 들어가야함. 
    • 화폐 : 처음에는 원화만 지원했으나, 유로화도 지원할 수 있음. 

    어플리케이션의 요구 사항이 변하면서, 언어의 기본형만으로는 충분히 표현할 수 없게 된다. 이처럼 언어가 제공하는 기본형 사용만 고수하는 냄새를 '기본형 냄새'라고 한다. 만약 '기본형 냄새'로 넘어가게 된다면 몇 가지 리팩토링 기술을 적용해서 처리해 볼 수 있다. 


     

    리팩토링 예시

    앞서서 TelephonNumeber라는 클래스를 개발할 때,  AreaCode, AreaNumber 매개변수가 계속 같이 다녔었는데, 클래스로 추출하기 좋다. 만약 특정 메서드의 매개변수로 함께 반복해서 전달되는 녀석들이라면, 기본형 타입이 아니라 하나의 타입으로 만들어 볼 수 있을 것이다. 

    댓글

    Designed by JB FACTORY