리팩토링 - 냄새 10. 데이터 뭉치

들어가기

해당 포스팅은 인프런 백기선님의 '리팩토링'을 학습 후 정리한 내용입니다.



냄새 10. 데이터 뭉치

Data Clumps

  • 항상 뭉쳐 다이는 데이터는 한 곳으로 모아두는 것이 좋다.
  • 여러 클래스에 존재하는 비슷한 필드 목록
  • 여러 함수에 전달하는 매개변수 목록
  • 관련 리팩토링 기술
    • 클래스 추출하기 (Extract Class)”를 사용해 여러 필드를 하나의 객체나 클래스로 모을 수 있다.
    • 매개변수 객체 만들기 (Introduce Parameter Object)” 또는 “객체 통째로 넘기기 (Preserve Whole Object)”를 사용해 메소드 매개변수를 개선할 수 있다

예제 코드

Employee

public class Employee {

    private String name;

    private String personalAreaCode;

    private String personalNumber;

    public Employee(String name, String personalAreaCode, String personalNumber) {
        this.name = name;
        this.personalAreaCode = personalAreaCode;
        this.personalNumber = personalNumber;
    }

    public String personalPhoneNumber() {
        return personalAreaCode + "-" + personalNumber;
    }
	
    //getter, setter 등
}

냄새

personalAreaCode, personalNumber 필드는 전화번호를 의미하는 필드 이므로 클래스로 추출할 필요가 있다.

해결

두개의 필드를 필드로하는 새로운 클로스를 만들자

리팩토링 후

Employee

public class Employee {

    private String name;

    private TelephoneNumber personalNumber;

    public Employee(String name, TelephoneNumber telephoneNumber) {
        this.name = name;
        this.personalNumber = telephoneNumber;
    }
    
    ...
    
    //getter, setter 등
}

TelephoneNumber

public class TelephoneNumber {

    private String areaCode;

    private String number;

    @Override
    public String toString() {
        return this.areaCode + " - " + this.number;
    }
    
    
    ...
    
    //getter, setter 등
}

설명

TelephoneNumber 클래스를 만들어 전화번호를 의미하는 필드를 객체 내부 필드에 작성하였다.

좋은 웹페이지 즐겨찾기