| 인프런 - 백기선님의 코딩으로 학습하는 리팩토링 강의를 수강하며 정리한 글입니다.
메시지 체인
- 레퍼런스를 따라 계속해서 메서드 호출이 이어지는 코드
- this.member.getCredit().getLevel().getDescription()
- this.member.getCredit().getLevel().getDescription()
- 코드 체인을 모두 이해해야 로직을 이해할 수 있다.
- 체인 중 일부가 변경된다면 클라이언트의 코드도 수정해야 한다.
- 관련 리팩토링
- 위임 숨기기 -> 메시지 체인의 캡슐화
- 함수 추출하기 -> 메시지 체인 일부를 함수로 추출
Refactoring 1. 위임 숨기기
- 캡슐화 -> 어떤 모듈이 시스템의 다른 모듈을 최소한으로 알아야 한다는 것 -> 그래야 어떤 모듈을 변경할 때, 최소한의 모듈만 그 변경에 영향을 받는다.
- 메서드 호출을 숨길 수 있다.
- this.member.getDescription() -> getDescription() 안에서 this.member.getCredit().getLevel() 호출
Before
public class Department {
private String chargeCode;
private Person manager;
public Department(String chargeCode, Person manager) {
this.chargeCode = chargeCode;
this.manager = manager;
}
public String getChargeCode() {
return chargeCode;
}
public Person getManager() {
return manager;
}
}
public class Person {
private String name;
private Department department;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
public Department getDepartment() {
return department;
}
public void setDepartment(Department department) {
this.department = department;
}
}
=> Person Department의 Manager의 값을 확인하려면 Person -> Department를 거쳐야 한다.
- person.getDepartment().getManager()
After
public class Department {
private String chargeCode;
private Person manager;
public Department(String chargeCode, Person manager) {
this.chargeCode = chargeCode;
this.manager = manager;
}
public String getChargeCode() {
return chargeCode;
}
public Person getManager() {
return manager;
}
}
public class Person {
private String name;
private Department department;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
public Department getDepartment() {
return department;
}
public void setDepartment(Department department) {
this.department = department;
}
public Person getManager() {
return this.department.getManager();
}
}
=> person.getManager()로 Manager 값 확인 가능
'클린코드' 카테고리의 다른 글
[Refactoring] 19. 내부자 거래 (1) | 2022.09.23 |
---|---|
[Refactoring] 18. 중재자 (0) | 2022.09.22 |
[Refactoring] 16. 임시 필드 (1) | 2022.09.20 |
[Refactoring] 15. 추측성 일반화 (0) | 2022.09.18 |
[Refactoring] 14. 성의없는 요소 (0) | 2022.09.17 |