먹고 기도하고 코딩하라

[디자인패턴] UML과 클래스/시퀀스 다이어그램 본문

상자

[디자인패턴] UML과 클래스/시퀀스 다이어그램

사과먹는사람 2022. 12. 3. 23:55
728x90
728x90

 

UML

Unified Modeling Language의 약자로서, 직역하면 통합 모델링 언어이다.

시스템을 모델로 시각화하거나 요구 사항 명세서(specification) 또는 설계(design)를 문서화하기 위해 사용되는 표준화된 범용 모델링 언어다. 시스템 사양을 나타내는 언어이기도 하다.

UML은 사물(Things), 관계(Relationships), 다이어그램(Diagrams)로 구성된다.

  • 사물 : 추상적 개념. 시스템의 구조/행위를 표현하거나, 개념을 그룹화/설명하는 사물.
    • 예를 들면 클래스나 인터페이스 등을 사물이라고 할 수 있다. 클래스는 보통 직사각형으로 표현되며, 인터페이스는 원으로 표현하거나 직사각형으로 표현하되 <<interface>> 등으로 인터페이스임을 따로 표시하기도 한다.
    • 메시지 역시 사물이라고 할 수 있다. 객체 간 직선으로 표시된 것 등을 메시지로 볼 수 있다.
    • 패키지, 주석 등 노트도 사물로 분류 가능하다. 
  • 관계 : 사물 간의 관계를 나타낸다. 의존(Dependency), 연관(Association), 일반화(Generalization), 실체화(Realization) 관계 등이 있다. 이들 관계에 관해서는 따로 번역 글을 포스팅했으니 참고하면 좋겠다.
    • 의존 : 두 사물 사이 의미적 관계로, 한 사물의 명세가 바뀌면 그것을 사용(의존)하는 다른 사물에게 영향을 끼칠 때 의존 관계가 있다고 한다. 점선으로 된 직선으로 표현하며, 화살표 방향은 사용(의존)하는 사물을 향한다. 한 클래스가 다른 클래스를 매개변수로 사용하는 등에 쓰인다.
      • 집합(Aggregation) 관계와는 유사하지만 조금 다른 것 같다. 집합 관계는 무언가를 갖고 있는 관계이다. 다른 클래스 인스턴스를 갖고 있는 클래스 쪽에 마름모를 붙인 화살표를 그려서 나타낸다. 어떤 클래스가 다른 클래스의 인스턴스를 갖고 있다면, 그 개수에 상관없이 그 관계는 집합 관계이다. 
    • 연관 : 구조적 관계로, 한 사물 객체가 다른 사물 객체와 연결됐다는 것을 의미한다. 클래스 간 관계를 나타내기 위해 클래스를 실선으로 연결하고, 그 위에 관계를 나타내는 이름을 붙인다. 예를 들면, Client 객체에서 Target 객체 방향으로 실선으로 연결되어 있으며 Uses라는 이름이 실선에 붙었다면, Client가 Target을 사용한다고 이해할 수 있다.
    • 일반화 : is-a-kind-of 관계로, 일반화된 사물과 특수화된 사물 사이 관계를 나타낸다. 자식 객체는 부모 객체가 사용되는 어느 곳에서나 사용될 수 있다, 즉 부모를 대신할 수 있는 것을 의미한다(이것은 SOLID 원칙의 리스코프 치환 원칙과도 연관된 내용이다). 비슷한 표현으로 상속이라고 표현할 수도 있다.
    • 실체화 : 일반화와 비슷하지만, 의존 + 일반화의 혼합과도 같다. 실체화는 추상 클래스나 인터페이스를 실제로 구현하는 것을 주로 의미한다. 추상 클래스는 주로 기울임체로 클래스 이름을 표기하게 된다.
  • 다이어그램 : 여러 종류의 다이어그램이 있으나 이 포스팅에서는 클래스/시퀀스 다이어그램만 살펴본다. (내가 당장 필요한 거라서)
    • 클래스 : 클래스, 객체, 인터페이스 간 정적 관계(상속, 집합, 일반)를 표현. 정적 관계이기 때문에 시간의 흐름에도 불변
    • 시퀀스 : 객체들 사이 메소드들이 어떤 순서로 실행되는지 표현. 시간에 따라 변하는 동적 관계와 행동들을 나타냄. 객체들 간의 협동 과정 표현. 
      • 객체를 먼저 그려준다. 객체는 생성되는 순간 세로 점선인 lifeline을 갖게 되는데, 이 lifeline은 객체가 존재하는 동안, 즉 메모리 위에 남아있는 동안에만 유지된다.
      • 가로 실선은 주로 다른 객체의 lifeline으로 뻗어가는데, 이는 다른 객체의 메소드를 호출했음을 나타낸다.
      • 가로 점선은 다른 메소드를 호출해 return받았음을 의미한다. 
      • lifeline 중간의 가늘고 긴 사각형은 객체가 현재 활동 중(CPU를 얻어 실행되는 상태)임을 나타낸다. 즉, 메소드 호출(메시지 전달)이 일어나고 있다는 것을 의미한다.

 

클래스 다이어그램의 예시
시퀀스 다이어그램의 예시

 

 

패턴을 처음 배운 것도 어언 4년 전 일이다. 전과하고 첫 해에 들은 패턴 강의에서 배웠으니..

 

난 입사한지 겨우 이틀됐다. 회사에 들어가서 업무를 맡을 때 구현 능력도 물론 중요하지만, 프로젝트를 이해하고 레거시 코드를 잘 분석하여 기획에 맞게 기능을 수정하고, 추가하고, 삭제하고, 또 유지보수하는 능력도 못지않게 중요한 것 같다.

신입 개발자로서 기존 서비스를 구성하는 코드를 이해하고 분석하는 건 중요한 업무 중 하나이므로.. 어떻게 분석하면 좋을까 생각해보다가 시퀀스, 클래스 다이어그램을 그려보고 화면과 어떻게 상호작용하는지, UI 상호작용에 반응해 언제 어떤 메서드가 호출되며 매개변수와 반환값은 어떤지 살펴보는 게 좋겠다는 생각이 들었다.

그래서~ 4년 전에 배운 자료를 다시 꺼내고 검색도 하면서 정리를 했다! 졸업하고 자료를 버리지 않은 게 천만다행이다.

 

 

 

References

 

 

728x90
반응형
Comments