[리팩토링] 악취 10 : 데이터 뭉치

 

✍️ 악취 10 : 데이터 뭉치

여러 클래스에 동일한 혹은 유사한 필드가 반복적으로 등장하거나, 메서드에 전달하는 매개변수 목록이 유사한 경우 이렇게 뭉쳐 다니는 데이터는 한곳으로 모아두는 것이 좋다.

 

여기 데이터 뭉치를 해결하기 위한 두 가지 리팩토링 기법이 있다.

1. "클래스 추출하기" 동일한, 유사한 필드를 하나의 클래스로

2. "매개변수 객체 만들기" 동일한, 유사한 매개변수를 하나의 클래스로

 

🍊 클래스 추출하기

아래 두 클래스 모두 학년과 반 번호라는 공통된 필드를 사용 중이라면, 두 필드를 하나의 클래스로 추출할 수 있다.

@AllArgsConstructor
@Getter
public class Student {

    private String name;

    private int grade;

    private int classNo;

    public String getGradeClassNo() {
        return grade + "-" + classNo;
    }
}

@AllArgsConstructor
@Getter
public class Teacher {

    private String name;

    /**
     * 담당 학년, 반 번호
     */
    private int grade;
    private int classNo;

    public String getGradeClassInCharge() {
        return grade + "-" + classNo;
    }
}

 

공통된 필드를 GradeClassNo 클래스로 추출했다.

@AllArgsConstructor
public class GradeClassNo {

    private int grade;

    private int classNo;

    @Override
    public String toString() {
        return grade + "-" + classNo;
    }
}

@AllArgsConstructor
public class Student {

    private String name;

    private GradeClassNo gradeClassNo;

    public String getGradeClassNo() {
        return gradeClassNo.toString();
    }
}

@AllArgsConstructor
public class Teacher {

    private String name;

    private GradeClassNo gradeClassNo;

    public String getGradeClassInCharge() {
        return gradeClassNo.toString();
    }
}