ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • '오브젝트' 책 보고 공부하기 - ③ 역할, 책임, 협력
    JAVA공부/JAVA 2023. 5. 28. 16:32

    1) 협력

     

    객체지향 원칙을 따르는 애플리케이션의 제어 흐름은 어떤 하나의 객체에 의해 통제되지 않고 다양한 객체들 사이에

    균형 있게 분배되는 것이 일반적이다.

     

    객체들이 애플리케이션의 기능을 구현하기 위해 수행하는 상호작용을 협력 이라고 한다.

     

    객체는 메시지 전송을 통해 객체사이의 협력을 커뮤니케이션을 한다.

    예를들어

    Screening  ------- calcuateMovieFee(Screening)  ---> Movie

    Screening 객체가 Movie에게 calculateMovieFee 메시지를 전송함 으로써 Movie에게 요금 계산을 요청한다.

    이는 Movie가 요금 계산을 하는데 필요한 정책, 요금등을 잘 알고 있기때문에 처리를 위임한 것이다.

    이렇게 자신이 할 수 없는 일을 다른 객체에게 위임하면 협력에 참여하는 객체들의 전체적인 자율성을 향상 시킬 수 있다.

       

    Movie가 수행하는 행동을 보자 영화를 '플레이'  하는 것이 아닌 '영화 요금 계산'을 수행하고있다.

    이는 영화 예매를 위한 '협력' 을 위해 결정된 행동이다. 즉, 객체의 행동을 결정하는 것은 협력이다.

     

    객체의 상태는 그 객체가 행동을 수행하는데 필요한 정보가 무엇인지로 결정된다. 즉, 객체의 상태를 결정하는 것은 행동이다.

     

    협력 -> 행동 -> 상태 로 인해 객체가 참여하는 협력이 객체를 구성하는 행동과 상태 모두를 결정한다.

    결과적으로 협력은 객체를 설계하는데 필요한 일종의 문맥(Context)를 제공한다.

     

     


     

    2) 책임

     

    협력에 참여하기 위해 객체가 수행하는 행동을 책임이라고 한다.

    또, 크레이그 라만은 객체의 책임을 크게 2가지로 나누고 있다.

     

    하는것

    • 객체를 생성하거나 계산을 수행하는 등의 스스로 하는 것
    • 다른 객체의 행동을 시작시키는 것
    • 다른 객체의 활동을 제어하고 조절하는 것

    아는 것

    • 사적인 정보에 관해 아는 것
    • 관련된 객체에 관해 아는 것
    • 자신이 유도하거나 계산할 수 있는 것에 관해 아는 것

    일상생활에서 자신이 처리할 수 없는 일을 변호사, 의사 등에게 도움을 받아 처리하는 것 처럼

    객체도 가장 잘 알고 있는 객체에게 책임을 할당하여 사용해야한다.  (INFORMATION EXPERT 정보 전문가 패턴)

     

    객체에게 책임을 할당하려면 우리가 무엇에 대한 협력이 필요한지 문맥을 정의하고 책임을 할당해야한다.

    가령, 우리가 골절되면 정형외과, 치아가 안좋으면 치과를 찾듯이 책임을 부여하기 위한 문맥 정의가 필수이다.

    협력을 설계하면서 객체의 책임을 식별해가는 과정에서 인터페이스와 오퍼레이션 목록을 얻을 수 있다.

     

    이렇게 책임을 찾고 책임을 수행할 적절한 객체를 찾아 책임을 할당하는 방식으로 협력을 설계하는 방법을

    책임 주도 설계라고 부른다.

     

    많이 빠지는 실수로, 객체의 행동이 아닌 상태에 초점을 맞추게 되면 객체 내부구현에 초점을 맞춘 데이터 주도 설계가 된다.

    기억하자, 객체의 상태는 행동을 수행하기위한 필요한 재료일 뿐이다.

     

     


     

    3) 역할

     

    객체가 협력안에서 수행하는 책임의 집합을 역할이라고 한다.

    역할이 중요한 이유는 무엇일까?? 

    역할로 구분하여  설계를 하게되면 추상화를 쉽게 진행할 수 있다.

    포인트 적립이라는 예시를 들어보면 원가의 %로 적립하거나, 고정된 금액(P)을 포인트 적립해줄 수 있는데,

    이를 포인트 적립이라는 메시지로 추상화하면 %, P 의 공용인터페이스를 만들고 중복코드를 덜어낼 수 있다.

    또한, 추상화는 구체적인 포인트 적립방법을 알고 있지 않아도 되며, 추가되는 정책에따라 추상화된 인터페이스를 통해

    객체를 구현하면된다.

     

    설계 초반에 적절한 책임과 협력의 큰 그림을 탐색을 우선시하자. 

    역할과 책임을 구분하는데 너무 큰 시간을 쓰지 말고 구현하면서 책임과 협력을 정제하면서 필요한 순간에 객체로부터 역할을 분리해내자.

    역할 보다는 책임이 우선이다. 단, 다양한 객체들이 협력에 참여한다면 역할로 시작하자.

     

     

     


    정리

    • 협력을 우선설계하자, 객체를 구성하는데 중요하고 필요한 문맥을 제공한다.
    • 협력이 필요한 전문 객체에게 책임을 맡기자. 이가아플땐 치과에, 허리가 아플땐 정형외과에 
    • 역할의 관점에서 객체를 설계하자, 유연하고 재사용가능해진다. 구체적일수록 변화가 힘들다.
Designed by Tistory.