<자바로 배우는 리팩토링 입문> 13장~15장
by BFine13장. 상속을 위임으로 치환
a. 위임
- 다른 인스턴스의 메서드를 호출해서 처리하는 것을 위임한다고 표현한다.
- 상속은 클래스 사이의 관계(정적)이고 위임은 인스턴스 사이의 관계(동적)이다
- Master 인스턴스는 Client 인스턴스에 처리를 위임한다
=> Client command() 에서 Master 인스턴스의 command()를 실행하는 구조
b. 상속
- 상속을 사용하면 클래스와 클래스가 정적으로 결합된다.
=> 추후 상속관계 변경하기 여려운
- 상속에 대한 판단은 리스코프 치환 원칙을 따르자!
=> 다형성으로 했을때 전혀 문제가 없어야 한다. [Parent p = new Child()]
- IS-A 관계는 상속, HAS-A 관계는 위임으로 보면된다.
14장. 대리자 은폐
a. 의존관계의 단순화
- 대리자 은폐는 불필요한 위임관계를 단순히 하는것이다.
- 클래스 다이어그램의 화살표가 줄어들도록 단순화하는 것이 좋다.
server.getDelegate().handle(); (X)
server.handle(); (O)
b. 숨기기의 중요성
- 프로그램을 만드는데 자세한 구현내용을 알면 좋지 않나?
=> 숨기지 않으면 클래스끼리 의존 관계가 너무 깊어질 위험이 있다.
c. 다양한 은폐
- 접근 제어를 사용한 은폐
- 패키지를 사용한 은폐
=> public 없이 클래스를 선언하면 외부 패키지에는 보이지 않는다
- 중첩클래스를 사용한 은폐
d. 중개자 제거
- 대리자 은폐의 단점은 클래스안에 위임 메서드가 늘어난다.
- 반대로 중개자를 제거하고 하나로 합치는 것을 중개자 제거 리팩토링 방법이다.
15장. 상속 구조 정리
a. 정리
- 깔끔한 클래스 계층처럼 보이지만 양쪽의 Alpha, Beta 관련 Style 코드가 뒤섞여보인다.(중복코드)
- 상속 구조 정리를 통해 처리하면 공통적으로 묶고 Style은 Job으로 위임해서 처리한다.
b. 리팩토링 전
- 예제. 기존 클래스 계정에서 하던 작업 (String, File 이름을 기준으로 상속)
클래스명 | 역할 |
CSVStringReader | 문자열을 CSV로 읽음 |
CSVFileReader | 파일을 CSV로 읽음 |
CSVStringTablePrinter | 문자열을 읽고 표형식으로 표현 |
CSVFileTreePrinter | 파일을 읽고 트리형식으로 표현 |
c. 리팩토링 후
- 작업을 공통적인 표로 작성해보자
문자열 | 파일 | |
읽기 | CSVStringReader | CSVFileReader |
표형식 표시 | CSVStringTablePrinter | |
트리형식 표시 | CSVFileTreePrinter |
- 이동할 작업을 판단하자 여기서는 표시를 담당하는 클래스 계층을 새롭게 변경하자
=> 읽기와 쓰기로 클래스를 분리하자
- 공통되는 읽기 작업은 위임이 가능하기 때문에 Printer 에서 위임처리
- 표시형식을 서로 바꾸는 것은 어렵다 이런경우를 직교성이 없다고 부른다. (따로 처리해야함)
CSVPrinter --위임--> CSVReader
| |
| | | |
Table Tree String File
'개발서적 > 자바로 배우는 리팩토링 입문' 카테고리의 다른 글
<자바로 배우는 리팩토링 입문> 10장~12장 (0) | 2021.03.21 |
---|---|
<자바로 배우는 리팩토링 입문> 7장~9장 (0) | 2021.03.20 |
<자바로 배우는 리팩토링 입문> 4장~6장 (0) | 2021.03.16 |
<자바로 배우는 리팩토링 입문> 1장~3장 (0) | 2021.03.14 |
블로그의 정보
57개월 BackEnd
BFine