[OODP] Chain of responsibility Pattern

Peace·2021년 3월 2일

객체 지향 설계 패턴 Day1(03/02)

Chain of responsibility pattern.

클라이언트의 요청이 들어왔을 때, 해당 요청을 어떤 서버가 처리할 수 있는지 사전에 모르는 상황에 사용하는 design pattern이다.
서버는 서버끼리 서로 chain 형식으로 연결되어 있다. 그래서 자신이 처리할 수 있는 요청이라면, 자신이 처리하고, 자신이 처리하지 못하는 요청이라면 다음 서버에게 pass한다.

교수님 ppt 설명

  • to avoid coupling the sender(client) of a request to ist receiver(sever), by giving more than one object a chance to handle the request.
  • to isolate the clients from knowledge of how responsibilities are assigned.

  • Handler : request을 처리하기 위한 sender(client)들이 가져야 할 인터페이스를 정의.

  • ConcreteHandler : Handler 인터페이스 구현, 각자가 요청 종류에 따라 자신이 처리 할 수 있는 부분을 구현.

  • Client : 맨 처음 sender(client)에게 처리를 요구함.

Design pattern을 사용 목적.

  • Document the experience.(여러 사람들이 사용할 수 있도록 document로 만들어 놓을 수 있음.)
  • support reuse.(디자인 패턴을 만들어 놓고 사용하면, reuse하고 활용하기가 편하다.)
  • common vocabulary(디자인 패턴을 사용하면, communication vocabulary가 생긴다. 그래서 다른 개발자와 소통할 때 유용함.)
  • extended, adapted and reused(많은 다른 context를 변형없이 사용할 수 있고, 여러 개 다른 application을 만들 때 사용 가능해진다.)

해야될 일.

교수님 올려주신 코드(Yuki_chain 코드 이해하기)

  1. logic 이해하기.
  2. 6개의 서버를 어떻게 체인으로 연결했을까?
  3. 6개의 server가 하나의 abstract class로 inheritance됨
  4. 여기서 abstact class가 무엇일까? abstract method는 왜 body가 존재하지 않을까?
  5. this와 toString의 역할
  6. client와 server는 어떻게 분리되었고, client의 job이 server로 어떻게 전달될까?

Support.java

constructor

  • name을 parameter로 받고, 해당 name을 this를 통해 자신의 member variable name에 parmeter로 받은 name을 저장한다.
    -> 여기서 this란 클래스의 인스턴스를 의미한다.

variable

  • String name
  • Support next

method

  • setNext: parameter로 Support 인스턴스를 받고, 해당 parameter를 클래스의 인스턴스에 next member variable에 저장한다. 그리고 next를 반환한다.
  • support: Trouble 인스턴스를 받는다. resolve에서 true를 반환하면, trouble을 해결가능 한 거기 때문에 done method를 부르고, 만약 false라면, next에 instance에 support method를 불러준다.
    그리고 만약 next도 null이라면, fail method를 호출해준다.
  • toString: [name]을 반환해준다.
  • resolve: 선언만 존재한다.(아마 상속받는 class들일 overriding 할듯)
  • done: resolved된 trouble이 넘어옴.
    -> 여기서 this가 toString을 호출하는 거 같은데 왜 하는 지 아직 모르겠음.
    -> this를 출력하면 toString가 실행된다. 모든 클래스는 Object 클래스를 상속하는데, toString은 Object class에 정의되어 있다. 여기선 override한 toString이 실행되는 것이다.
  • fail: resolve가 되지 않은 trouble.
    -> 여기서도 trouble instance를 그냥 쓰면, trouble내에 있는 toString method가 실행됨.

Trouble.java

constructor

  • parameter number를 member variable number에 저장.

member variable

  • int number

method

  • getNumber: member varibale number를 return.
  • toString: [Trouble number]를 return.

OddSupport.java

resolve overriding한 것만 다르기 때문에 OddSupport만 review하겠음.

constructor

  • super를 통해 부모 constructor를 불러, parameter name을 보내준다.

method

  • resolve: 부모의 resolve를 overriding한 함수이다.
    trouble instance의 getNumber를 통해 number를 얻어 홀수인 경우만 true를 return 해준다.

Main.java

각각의 class들로 instance를 만들고, setNext를 통해 연결한다. 그리고
support method를 불러 trouble해결 여부를 판단하고, 만약 해결하지 못한다면, 연결된 인스턴스에 넘겨준다.

느낀 점.

자바가 익숙하지 않다. 아직 이해되지 않는 문구들이 여러 개 남아있지만, 오늘은 첫 수업이기 때문에 이해가 아닌, 인정을 하고 넘어가려고 한다.
다음엔 자바의 정석을 찾고 읽어서 이해하도록 노력해야겠다.

Reference

OODP 수업.
https://lktprogrammer.tistory.com/45

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

0개의 댓글