본문 바로가기

Programming/Architecture

06 Collaboration Diagram

협력 다이어그램 자체는 내용이 많거나 어려운 부분이 없기 때문에 이런저런 도입부 없이 바로 넘어 갈게요 :)
  • 협력(Collaboration) 다이어그램

    앞선 포스트와 매우 연관 있는 다이어그램 이에요. 시퀀스(Sequence) 다이어그램 이나 협력 다이어그램이나 객체간의 관계에 대해서 표현하는 것이고, 의미적으로 다른 게 있다면 시퀀스 다이어그램은 동적인 상태를 보여 주고 협력 다이어그램은 정적인 상태를 보여 준다는 거죠.

    사용되는 요소 보기(box1)


    사용 되는 요소 역시 간결해요 :D (개인적으로 많은 것을 공부하지 않아도 쉽게 익힐 수 있는 이런거 조으다조으다 요..ㅋ) 일단은, 협력 다이어그램을 만들어 볼까요?
    • 협력 다이어그램 생성(Create Collaboration Diagram)

      앞선 포스팅에 연이어 설명을 해야 할 거 같아요. 시퀀스 다이어그램 생성시 모델 탐색기(Model Explorer)를 보시게 되면 아래와 같아요.


      시퀀스 다이어그램을 만들었는데, 생성되는 상위 요소는 CollaborationInstanceSet1(구지 직역하면, 협력객체집합1)이라고 되어 있어요. 그리고, 생성 했었던 시퀀스 다이어그램은 InteractionInstanceSet1(상호작용객체집합1) 이라는 상위 요소를 가지고 있구요.



      "CAMERA" 클래스 요소에서 협력 다이어그램(Collaboration)을 생성하게 되면 해당 요소 하위에 생성되게 되요.
      (CAMERA/CollaborationInstanceSet2/InteractionInstanceSet1/CollaborationDiagram1)

      생성되는 부분을 잘 보시면, CollaborationInstanceSet이 새롭게 생성되는 것을 볼 수 있어요.(원래 있던 이름이 Coll…1 이었는데, 뒤에 2로 해서) 이는 "같은 요소이긴 하지만, 앞으로 만들것이 반드시 원래 만들었던 것과 같지 않다" 라는 걸 전제 하는 거 같아요.

      지금 하고 있는 예시는 앞서 만든 시퀀스 다이어그램과 동일한 표현의 다이어그램을 만들 거고, 방법만 바뀌는 거라 같은 곳에 넣어서 관리하길 원하면 기존에 만들어 졌던 "CollaborationInstanceSet1"에서 위와 같은 방법으로 만들거나, 만들어진걸 옮기면 되요.




      어찌 보면 Collaboration이 더 큰 범주이고, Sequence는 그 안에서 좀 더 디테일하게 객체간의 상태를 보여주는 작은 범주로 생각 할 수 있죠.
      위의 생성되는 이름은 여태까지 쭉- 포스팅을 따라오면서 만들어 보셨다면 아시겠지만, 자동 생성 되는 이름의 초기값들 이어요:)

    • 객체 삽입(Insert Object)

      이 부분은 앞선 포스팅의 객체 생성과 동일 해요.

      시퀀스 다이어그램에서 만들었던 객체는 모델 탐색기(Model Explorer)에서 찾을 수 있으며, 만들어 두었던 요소를 또 재사용 할 수 있어요. 여기서는 재사용 하는 방법만 소개 할 게요.


      이렇게 해서, 두 개의 객체를 짜잔~

    • 연결 삽입(Insert Link)

      시퀀스 다이어그램에서 메시지를 전송에 대한 부분과 동일 하지만 약간 다른 부분이 존재 해요. Link는 단순히 "연결"만 의미 하는 거에요. display 객체가 camera에게 요구 할 수 있는 메시지는 UpdateScene만 있었고, 나머지는 자기 스스로 메시지를 받았었잖아요?

      어디서 어디로 가느냐는 Link에서는 중요하지 않아요. 일단, display가 camera 객체와 연결되는 것을 표현 하는 방법은 아래와 같아요.


      camera는 스스로에게 메시지를 보내는 게 많았죠? 그래서 자기 스스로 하는 링크는 그냥 클릭 한 번만 하면 되요.(이 부분은 실습~.^ㅋ)

      만들고 나면 아래와 같이 모양새를 슬슬 갖춰가게 되는 군요!

    • 메시지 전송 삽입(Insert Forward & Reverse Stimulus)

      링크만 연결 되어 있으면, 뭐에 대한 건지 하나도 모르잖아요? 그 부분을 해결 하는 것이 메시지 전송! 설명은 시퀀스 다이어그램에서 설명 했기 때문에 다시 언급 하지 않을게요.(기억이 나지 않으시면 다시 가서 복습!ㅋ)

      협력 다이어그램에서 조금 다른 부분이 있다면, Forward와 Reverse(정방향과 역방향)으로 나뉜 다는 거에요. 사용법은 단순히 클릭 두 번으로 끝난답니다~



      방금 전에 설명 했던 "연결 삽입"에서 저는 display객체에서 camera객체 방향으로 연결을 했잖아요? 여기서 정방향 메시지 전송을 하게 되면 제가 원래 연결시켰던 방향이 정방향으로 해서 메시지를 보낸다고 표기해 줘요.


      위의 숫자는 순번을 의미 해요. 몇 번째에 동작 해야 하는 메시지 전송인가에 대해서요.
      방금 생성했던 정방향 메시지 전송의 속성을 수정해서 이름을 바꿔 볼까요?


      그럼 camera객체는 내부에서 자기 스스로 UpdateProjection 메시지를 보내게 되죠. 같은 방법으로 ForwardStimulus 요소를 삽입 하고, 이름을 변경하면 아래와 같이 표현 할 수 있어요.

      다이어그램에서의 요소 위치를 조금 수정해서, 좀 더 깔끔하게 표현 해 봤어요.
      이 부분은 선택 후에 드래그 하는 식으로 변경 가능하니까, 실습!


      이제, camera객체가 할 일을 끝냈으면 다시 display에게 내용을 전달해야 겠죠? 이번에는 역방향 메시지 전송으로 display - camera 링크를 클릭 해 보시면, 아래와 같이 나오게 되요.(위치는 제가 조금 바꾼 거랍니다:D)


      정방향 메시지 전송 아무리 넣어도, camera로 부터 display로 가지 않아요. Forward와 Reverse를 적절히 활용해서 표현 해야 한답니다.


      일을 끝내고 보내는 메시지 전송은 return이죠. 마지막에 삽입한 역방향 메시지 전송(ReverseStimulus) 요소를 선택한 후에, return 형이라는 것으로 수정 할게요.


휴우... 이렇게 다이어그램 하나가 끝이 났네요. 사실, 다음 예정 포스팅이 Development Diagram 이였는데, 이 부분은 아직 제가 진행하고 있는 작업물로 표현의 한계가 있기 때문에 언제가 될지는 모르지만 잠정적 보류 하려고 해요.

진행하던 작업을 이제 또 이어가야 하기 때문에 :)

사실 문서작성시에 이런 다이어그램을 너무 세세하게 마구 필요로 하지는 않지만, 일정 부분 뼈대는 필요하니까 만드는 부분이 있어요. 거의 Usecase, Activity, Class 정도를 많이 사용 만들게 되죠. 프로그래밍 하시는 분들 중 바로 타자부터 두들기면서 코딩 하시는 분 아니면, 완전 구색에 맞추지 않더라도 손으로 어느정도 그림 그리고 시작 하는게 좋다고도 배웠어요(일명 손코딩????@_@ㅋ).

'Programming > Architecture' 카테고리의 다른 글

Architecture my OpenGL engine core2  (0) 2012.08.10
Architecture my OpenGL engine core1  (0) 2012.08.07
05 Sequence Diagram  (2) 2012.07.14
04 Statechart Diagram  (2) 2012.07.10
03 Class Diagram 2  (6) 2012.05.30