You will be fine

<자바로 배우는 리팩토링 입문> 13장~15장

by BFine
반응형

13장. 상속을 위임으로 치환 

 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

 

출처 : www.gilbut.co.kr/book/view?bookcode=BN001847  

반응형

블로그의 정보

57개월 BackEnd

BFine

활동하기