-
[Refactoring] 17. 메시지 체인클린코드 2022. 9. 21. 19:49
코딩으로 학습하는 리팩토링 - 인프런 | 강의
리팩토링은 소프트웨어 엔지니어가 갖춰야 할 기본적인 소양 중 하나입니다. 이 강의는 인텔리J와 자바를 사용하여 보다 실용적인 방법으로 다양한 코드의 냄새와 리팩토링 기술을 설명하고 직
www.inflearn.com
| 인프런 - 백기선님의 코딩으로 학습하는 리팩토링 강의를 수강하며 정리한 글입니다.
메시지 체인
- 레퍼런스를 따라 계속해서 메서드 호출이 이어지는 코드
- 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 - 레퍼런스를 따라 계속해서 메서드 호출이 이어지는 코드