리팩토링 - 냄새 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 클래스를 만들어 전화번호를 의미하는 필드를 객체 내부 필드에 작성하였다.
Author And Source
이 문제에 관하여(리팩토링 - 냄새 10. 데이터 뭉치), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@coconenne/리팩토링-냄새-10.-데이터-뭉치
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
해당 포스팅은 인프런 백기선님의 '리팩토링'을 학습 후 정리한 내용입니다.
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 클래스를 만들어 전화번호를 의미하는 필드를 객체 내부 필드에 작성하였다.
Author And Source
이 문제에 관하여(리팩토링 - 냄새 10. 데이터 뭉치), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@coconenne/리팩토링-냄새-10.-데이터-뭉치저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)