ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [객체지향의 사실과 오해-2] 역할,책임,협력,책임주도 설계
    개발/프로그래밍 2021. 10. 30. 17:03

    객체지향 설계는 중요하게 책임, 역할, 협력으로 구성된다.

     

    이상한 나라의 앨리스에서 재판을 하는 이야기를 보면 

    왕이 재판을 주관하여 재판이 진행이되는데 왕이 토끼에게 모자장수(증인)을 부르라 명하고

    토끼는 증인을 불러와 증인이 증언을 하는 내용이 있다.

    여기서 이 각 객체들은 협력을 통해 재판을 진행한다.

    그리고 이 협력은 요청과 응답으로 이루어진다.

     

    1. 누군가 왕에게 재판을 요청한다.

    2. 왕이 토끼에게 (모자장수)증인을 불러올것을 요청한다.

    3. 토끼는 증인에게 재판에 입장을 요청한다.

    4. 증인은 재판 입장에 응답한다.

    5. 증인은 왕에게 증언을 응답한다.

     

    여기에서 각 객체가 수행하고 있는 요청과 응답은 각 객체의 책임을 의미한다.

    토끼는 증인을 불러올 책임을 가지고있고 증인은 증언을 할 책임이 있는것이다.

     

    책임은 쉽게 "아는것" 그리고 "하는것"으로 분류가 된다.

    하는것은 다른객체의 행동을 시작하거나 조절하는것이고

    아는것은 정보에 대해 아는것이다.

    토끼는 증인을 입장하도록 "하였고" 증인이 관련 사건에대해 아는것을 "알고있었다"

    이렇게 책임이란 하는것과 아는것의 범주안에 들어간다.

     

    이 이야기에서 왕은 판사의 역할을 하고 모자장수는 증인의 역할을 했다.

    이는 객체의 역할을 의미하는데 굳이 이 이야기에서 왕을 판사로 모자장수를 증인으로 할 의무는 없었다.

    그냥 왕이 판사였으면 되었고 모자장수가 증인이었다면 이 협력관계를 묘사하기에 문제가 없었을 것이다.

    그러나 이렇게 함으로써 재사용 가능한 유연한 객체지향 설계가 가능해진다.

    이 이야기에서 모자장수는 쓸만한 증언을 하지못해 다른 증인인 요리사를 불러내고

    그다음 앨리스를 증인으로 불러낸다. 이때 모자장수, 요리사, 앨리스는 모두 "증인"이라는 역할을 수행해낸다.

    이와같이 판사의 역할을 하는것은 여왕이 대신할수도 있을것이다.

     

    이렇게 왕-토끼-모자장수/  왕-토끼-요리사/ 왕-토끼-앨리스 간의 협력 관계를 

    판사 - 토끼 - 증인 의 협력관계로  추상화 하여 협력을 단순화 한다

    이렇게 협력이라는 것은 객체지향의 단순성 유연성 재사용성을 증가시킨다.

     

    책임 주도 설계란 어플리케이션을 설계할때 책임을 완수하기 위해 협력하는 객체들을 이용해 설계하는 방법을 말한다.

    이렇게 말하면 좀 어려운데 쉽게 풀어 말하자면

    1. 특정 책임을 완수하기 위해 다른 객체의 도움이 필요하다 판단되면 (ex> 재판을 하기위해 증언이 필요함)

    2. 어떤 메시지가 필요한지 결정하고 (ex> 증언하라 )

    3.메시지가 결정되면 메시지를 받을(메시지를 처리할 책임이 있는) 객체를 선택한다. (ex> 증인에게 요청해야겠다)

     

    즉 먼저 어떤행위를 할지 결정하고 그 다음에 누가 그 행위를 할지 결정한다

    어떤 객체의 특성이 있어서 그 객체의 특성에 따라 행위를 부여하는것이 아니라

    행위를 결정하고 그에맞는 객체를 찾는것이다.

     

    메시지를 우선으로 하는 책임주도 설계에서 송신자는 어떤 책임을 요청(시킬뿐) 할뿐이지

    어떻게 처리 해달라고 결정 하지 않는다. 여기서 메시지를 받는 수신자는 자율적으로 역할을 수행하며

    요청한 송신자는 내부를 볼수없다. 수신자의 상태에 대해 묻지도 않느다.

    이를 송 수신자간의 느슨한 결합이라 하며 수신자의 캡슐화를 증가 시킨다 한다.

     

    메시지에 초점을 맞춰 설계하라

    '개발 > 프로그래밍' 카테고리의 다른 글

    메모리 구조 (code,data,stack,heap)  (0) 2021.11.14
    객체지도  (0) 2021.11.07
    [객체지향의 사실과 오해-1] 객체,캡슐화,추상화  (0) 2021.10.16
    클린코드 - 클래스  (0) 2020.10.12
    클린코드 - 오류,예외처리  (0) 2020.10.07

    댓글

Designed by Tistory.