✍️ 악취 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();
}
}
'리팩토링' 카테고리의 다른 글
[리팩토링] 악취 11 : 기본형 집착 (2) (0) | 2023.01.02 |
---|---|
[리팩토링] 악취 11 : 기본형 집착 (1) (0) | 2023.01.02 |
[리팩토링] 악취 9 : 기능 편애 (0) | 2023.01.02 |
[리팩토링] 악취 8 : 산탄총 수술 (0) | 2022.12.22 |
[리팩토링] 악취 7 : 뒤엉킨 변경 (0) | 2022.12.19 |