킹차니 2022. 1. 1. 01:05

클래스 추출

클래스는 각각의 역할이 있어서 그 일을 완수할 '책임'이 있다. 즉 클래스에 있는 필드나 메소드는 해당 클래스가 그 책임을 다하기 위해 선언한 것이다. "클래스에는 하나의 책임만 있는 것이 이상적"이지만 코드를 작성하다 보면 점점 클래스의 크기가 커질 때가 있다.

이때 기존 클래스가 지는 책임 중 누군가에게 넘길 수 잇는 것이 있는지 찾아본다. 그리고 책임을 넘길 새로운 클래스를 작성한다.

 

책 정보를 관리하는 클래스인 Book을 보자.

Client는 Book객체를 생성해서 toXml메소드를 호출하여 Book에 대한 xml을 얻는다.

실행결과:

 

위의 Book클래스에 이미 노란 네모박스를 칠해 둔 것같이 하나의 클래스에 Book과 책의 저자인 Author에 대한 정보가 존재한다.

이를 클래스 추출로 분리해보자.

 

Author정보를 분리한 Book클래스는 다음과 같다.

Author를 가지고 있는 것을 볼 수 있다.

 

분리된 Author클래스

이를 실행해보면 이전과 결과는 똑같다.

 

이렇게 수정하고나면

1. 객체의 역할이 뚜렷해져 책임이 역시 분명해짐

2. Author혹은 Book에 대한 기능 추가할 때, 클래스가 비대해지는 것을 최소화할 수 있다.