LISTORY

코드 리팩토링 [ 지나친 관여 / 인터페이스가 다른 대용 클래스 / 미흡한 라이브러리 클래스 ] 본문

IT/리팩토링

코드 리팩토링 [ 지나친 관여 / 인터페이스가 다른 대용 클래스 / 미흡한 라이브러리 클래스 ]

LiStoryTeller 2018. 4. 22. 02:21

1​. 지나친 관여

객체 지향으로 프로그래밍을 할때 당연한 것이지만, 클래스는 독립성을 유지해야하고 클래스끼리 관여해서는 안된다.

클래스끼리 지나치게 관여하는 경우, 메서드와 필드를 적절히 이동하여 클래스끼리의 관여를 줄여주어야 한다.

만일 공통으로 사용해야하는 부분이 있다면 클래스 추출을 하여 새로운 별도의 클래스로 빼내는 것이 좋다.

아니면 대리 객체 은폐를 실시하는 것이 좋은데, 이는 간단히 말하자면 필요한 데이터를 대신 전달해 주는 메라드를 작성하는 것이다.


2. 인터페이스가 다른 대용 클래스

기능은 같은데 시그니처가 다른 메서드에는 메서드명 변경을 실시해야 한다.

3. 미흡한 라이브러리 클래스

많은 이들이 재사용을 객체의 목적이라 생각하는데, 이는 재사용을 지나치게 과대 평가한 것이다.

아무리 라이브러리를 쓴다고 하더라도 본인의 입맞에 맞추어 변경하는 것은 어려운 일이다.

이러한 문제를 해결하기 위해 사용되는 기법이 두개가 있다.

첫번째는 라이브러리 클래스에 넣어야 할 메서드가 두개 뿐일때, 외부 클래스에 매서드를 추가하는 것이다.

외부 클래스에 메서드를 추가하는 것은, 사용 중인 클래스를 (여기서는 라이브러리 클래스를 뜻한다) 수정할 수 없을 때 클라이언트 클래스 안에 사용 중인 클래스의 인스턴스을 첫번째 인자로 받는 메서드를 작성하는 것이다.

간단히 말하자면 라이브러리 클래스에 메서드를 따로 추가할 수 없으므로 라이브러리 클래스를 사용하는 클래스에 라이브러리 클래스의 객체, 즉 인스턴스를 넘겨주는 것이다.

두번째는 부가 기능이 많을 때 국소적 상속확장 클래스를 사용하는 것이다.

이는 사용중인 서버 클래스..여기서도 라이브러리 클래스를 뜻한다. 이 서버 클래스에 여러 메서드를 추가해야하는데 할 수 없을 때, 새 클래스를 생성하여 필요한 메서드들을 작성하는 것이다.

그런다늠 이 클래스를 원본 클래스의 하위클래스나 래퍼 클래스로 만들면 된다.

Comments