[OODP] Refactoring by Inheritance and Its Problem Template Method Concept

Peace·2021년 3월 6일

객체 지향 설계 패턴 Day2(03/05)

Refactoring이란

반복되는 코드를 계속 사용하는 것이 아니라, 하나의 component로 만들어서 계속 사용하게 코드를 바꾸는 것이다.
refactoring를 하면, 가독성을 높이고 유지보수를 쉽게 할 수 있게 도와준다.

Refactoring Process

  1. 코드에 반복되는 부분이 있는지 찾는다.
  2. 반복되는 login을 generic component로 만든다.
  3. 코드에 반복되는 부분을 generic component를 참조하여 대체한다.

Refactoring 예제

상속을 통한 refactoring이다. 해당 방법은 부모 클래스에 미리, 반복되는 component들을 하나의 component로 만들어, 자식 클래스에서는 해당 component를 부르는 것만으로, 동일한 기능이 작동되게 한다.

다음은 반복되는 component를 부르는 component를 다른 클래스에 정의한 후, 필요한 경우에 해당 component를 부르는 방법으로 refactoring한 경우이다.

Template Method Pattern

Template Method Pattern이란

  • operation의 전체적인 구조를 정의하는 method이고, 해당 operation을 하위 클래스가 재정의하여 사용할 수 있도록 해주는 pattern이다.
  • template method는 수정없이 재사용된다(?)
  • abstact를 사용하여 empty implementation을 만들고, 하위 클래스에서 abstract부분을 정의할 수 있도록 한다.
    -> abstract method는 시그니처만 정의되어 있고, body는 비어있는 메소드를 말한다. abstract method를 가지고 있는 class는 abstract class이다. 그리고 abstract class를 추상화하면, 오류가 난다.
  • 실행 과정을 구현한 상위 클래스
  • 실행 과정의 일부 단계를 구현한 하위 클래스

이용할 수 있는 예제

  • authenticator를 구현할 때, 사용하면 될 거 같다. 일반적인 회원가입할때, sns로 할 때, 실행 과정은 동일하고 내부 구현만 바꾸면 되기 때문에, 그 부분만 abstract method로 정의하고 구현하면 될 거 같다.

code 예제

Network.java

abstract class이다.
post method를 제외한 method들은 모두 abstract method이다. 즉 하위 클래스에서 해당 method들을 정의해야된다는 것이다. 시그니처들은 미리 정의해놓았기 때문에, 이 class를 상속받은 하위 클래스는 비슷한 logic을 갖고 있는다고 볼 수 잇다.

Twitter.java

해당 class는 앞에서 본 network class를 상속받은 클래스이다.
constructor로 상속받은 member variable들을 초기화 시켜준다.
그리고 상속받은 abstract method들을 오버라이딩해준다.

network class를 상속받은 다른 class인 facebook class도 위 twitter class와 동일한 logic가지고, 오버라이딩을 한다. 다만, 세세한 내용들만 다르다.

이렇게 template method pattern은 같은 역할을 하는 Method지만, 다른 class에서 형태만 다르게 구현되는 코드를 작성할 때, 유용하게 사용할 수 있는 디자인 패턴이다.

profile
https://peace-log.tistory.com 로 이사 중

0개의 댓글