본문 바로가기

Programming/Architecture

05 Sequence Diagram

슬슬 마무리를 향해 가고 있는 다이어그램 포스팅 이네요 :)
으쌰 으쌰 힘내서 가볼까요?!
  • 시퀀스 다이어그램(Sequence Diagram)

    시퀀스 다이어그램(Sequence Diagram)은 별도의 직역을 모르겠네요. 원래 원어 그대로 읽고 이해 하는걸 좋아라 하기 때문에, 일단은 시퀀스 다이어그램이라고 해 둘게요.


    실제로 구현 상에서는 클래스 그 자체를 사용하지 않고, 클래스로 부터 만들어진 "객체"를 사용하는 건 다들 알고 계실 거에요. 그런 객체가 자신이 하게 되는 "일"을 구현상에서는 함수 또는 메소드(Function or Method)라고 하는데, 의인화 시킨다면 객체가 다른 객체에게 "메시지"를 전달 하는 거라고 보면 되요.
    • 시퀀스 다이어그램(Sequence Diagram) 생성

      앞서 사용한 "CAMERA" 예시를 사용 해 볼 게요.



      물론, 시퀀스 다이어그램을 만드는 와중에 해당 객체가 다른 객체에게 메시지를 전달하는 과정이 있겠지만, 저는 주체가 되는 객체에서 시퀀스 다이어그램을 만드는 걸로 생각 했어요.

    • 객체(Object) 생성

      객체 생성은 두 가지 방법이 있어요. 정공법 부터 가보죠!


      앞서 얘기 했다시피, 객체는 코드에서 클래스로 부터 만들어 지는 변수 에요.
      // some code...
      
      CAMERA camera; // 지역 변수
      
      CAMERA *camera = new CAMERA(); // 포인터 변수
      
      // some code...
      


      그 내용이 다이어그램 안에 들어가 있는 거죠~


      방금 생성된 객체를 선택(선택 시 가상에 선택이 되었다는 의미의 박스가 둘러 쌓여요.)후 속성창(Properties)를 보게 되면, Name과 Classifier가 있는데, 위에 표기 한대로 변수명과 클래스명을 의미하는 거에요.

      생성 방법에서 보신거 처럼 "이름:클래스명" 형식으로 이름을 작성하면 두 개가 나눠서 입력 된답니다~

      그리고 또 다른 방법 하나는 아래와 같아요.


      이미 생성했던 클래스 중 하나를 드래그 해서 가져다 놓는 방식 이죠.


      드래그를 해서 만들어 진 객체는 클래스 명만 있고, 변수 명이 설정이 되어 있지 않으므로 이 부분은 직접 입력을 해야 해요:)

      "CAMERA" 객체는 소통하는 대상이 자신을 포함하고 있는 "DISPLAY"객체만 있어요. 그 외의 대부분은 자기 자신에게 보내는 메시지가 대부분 이죠. 그래서 "DISPLAY" 객체도 만들어 볼게요.


    • 메시지 전송(Stimulus, SelfStimulus)삽입

      자가 메시지 전송(SelfStimulus)은 아래와 같이 삽입 할 수 있어요.


      처음 메시지 전송을 삽입하면 아래와 같은 결과가 나오지 않을 거에요.


      모델 탐색기(Model Explorer)에서 해당 시퀀스 다이어그램의 요소를 선택 한 후, 속성창(Properties)를 보게 되면 아래와 같은 속성을 볼 수 있어요.


      직접 해보면서 본인의 취향(혹은 회사의…)에 맞춘 디스플레이 옵션을 선택 하면 될 거 같아요 :)


      본디 "CAMERA" 클래스는 "OBJECT"클래스를 상속 받아서 만들어 진 것이기 때문에, 이동과 회전은 부모 클래스인 "OBJECT"가 가지고 있는데, 그 부분은 "="아이콘을 선택해서 나오지 않더라구요.

      나머지 부분을 직접 기입으로 만들면, 아래와 같은 모양을 갖추게 되요.


      "CAMERA" 객체는 "DISAPLY" 객체로 부터 "UpdateScene" 메시지를 받게 되요. 해당 함수(Operation)는 "CAMERA" 객체가 가지고 있는 것이고, 이 부분은 스스로 호출 하는 게 아닌 거죠.(SelfStimulus가 아니라는 얘기 에요.) 그래서 초기에 "DISPLAY" 객체도 만들었던 거죠.

      거의 비슷한 방법이긴 한대 Stimulus는 드래그 하는 방식으로 만들어 져요.


      이 후 함수 명 입력과정은 동일 하답니다:D 하지만 시작이 되는 부분이 있다면 끝나는 부분이 있어야 하는데, SelfStimulus와는 다르게 다른 객체로 부터 메시지를 전송 받았으면 해당 작업을 마쳤다는 반환(return)을 해주어야 하죠.

      메시지 전송(Stimulus)를 역으로 만들어 주면 아래와 같은 모양이 되요.


      하지만 이번에는 단순히 끝났다를 알려주는 return 이니까 display에게 가서 별다를 일을 하지 않을 테니까 Activation이 필요가 없잖아요?


      그럼 아래와 같이 return 받았음을 "DISPLAY"객체가 받고 끝나는 것으로 표현 되요.


      UpeateScene이 호출 되면, 내부적으로 "CAMERA"객체는 UpdateProjection을 호출 하게 되요. UpdateProjection은 UpdateScene의 함수(Operation)내에서 이루어지는 것이기 때문에 표현하면 아래와 같이 되는데, 이 부분은 직접 실습~!

    • 프레임(Frame), 프라그먼트(Combined Fragment) 영역 생성

      제 예시에서는 만들 수 없는 부분이니까, 다른 예시로 들어서 설명 할게요.

      프레임은 단순히 설계자가 영역을 그룹화 시키고 싶을 때 보여주는 거에요. 별다른 의미는 없다고 생각해요.
      프라그먼트는 특정한 조건들을 자세히 보여 줄 때 만드는 거죠. 조건문, 루프, 종료, 등등..

      계산기라는 클래스가 a 부터 b까지(which, a < b) 합을 하는 함수가 있다고 한다면, 결과적인 측면에서는 아래와 같은 그림이 될 거에요.


      생성 방법은 드래그 방식으로 이루어 져요(이 부분은 너무 많이 했으므로 생략을…ㄷㄷㄷ) 가장 아름다운 예시인 loop 에 대해서 코딩을 약간이라도 배우신 분들은 무슨 의미인지 바로 아실 거에요.

      사용법에 대해서만 언급을 드리자면, 모든 것들이 속성 창에서 이루어 진답니다.


      프라그먼트 요소는 Interaction 영역을 선택 할 수 있는데, 메인 윈도우에서는 아래와 같은 영역을 마우스 좌클릭 하면 선택 할 수 있어요 :)


      이후에 속성창을 보게 되면, "Guard"라는 항목을 볼 수 있어요.


뭐 그렇게 많이 어렵지 않은, 다이어그램이에요. 사실, 이 부분은 복잡하거나 그런거 보다 "귀.찮.죠" (ㄱ-) 객체가 어느 특정한 시점에 어떻게 작동 할 것인가에 대해서 묘사하는 것이기 때문에 함수의 흐름 찰나들을 쭉- 보여줘야 되거든요.

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

Architecture my OpenGL engine core1  (0) 2012.08.07
06 Collaboration Diagram  (0) 2012.07.21
04 Statechart Diagram  (2) 2012.07.10
03 Class Diagram 2  (6) 2012.05.30
03 Class Diagram 1  (0) 2012.05.26