프로그램 아키텍쳐/Refactoring

클래스의 추출(Extract Class)

본클라쓰 2010. 12. 9. 13:19

 

클래스는 각각 담당하는 일이 있고, 그 일을 완수해야 할 책임이 있다. ‘1개의 클래스가 완수할 책임은 1개’라는 것이 가장 이상적인 클래스이지만 개발을 하다 보면 클래스가 점점 부풀어져서 1개의 클래스가 많은 책임을 갖게 되는 경우도 종종 있다.

 

이럴 때는 책임을 분산시킬 클래스를 추출한다. 클래스 추출을 하면 하나의 클래스가 책임질 부분이 명확해 진다.

 

클래스 추출을 하기 위해 책임을 어떻게 추출할지를 결정해야 한다. 추출한 책임을 완수할 새로운 클래스를 만들면서 기존의 클래스에 남겨진 책임에 클래스 이름이 어울리지 않는다면 기존의 클래스의 이름을 변경한다.

 

기존의 클래스에서 새로운 클래스로 링크한다. 새로운 클래스에 기존의 필드와 메소드를 이동시킨다. 이 때 이동할 때 마다 테스트를 실시한다. 추출한 클래스는 클래스 인터페이스를 줄일 수 있는가? 새로운 클래스를 외부에 공개해야 하나? 공개한다면 외부에서 수정하는 것을 허락하나? 등을 검토해야 한다.