PlantUML 디자인 패턴

6751 단어 plantuml

소개



PlantUML는 텍스트 기반 UML을 설명하는 아마도 세계에서 가장 인기있는 도구입니다.

텍스트 기반이므로, git를 사용한 UML의 변경 관리 등이 용이하고, 마우스를 사용하지 않고 UML을 빨리 쓸 수 있는 메리트가 있다.
여기에서는 PlantUML을 기술하는데 있어서 참고가 되는 디자인 패턴을 소개한다.
  • 패턴 미적용
    디자인 패턴 미적용 상태의 PlantUML 파일과 그 과제를 설명한다.
  • 패턴 적용
    디자인 패턴이 적용된 PlantUML 파일과 그 이점을 설명합니다.

  • Package 패턴



    패턴 미적용



    하나의 PlantUml 파일에 여러 패키지가 정의됩니다.

    Arrow 패턴 미적용
    package shop {
      class Shop
      Shop *-- Item
    }
    
    package customer {
      class Customer
      Customer --> Item : buy
    }
    

    클래스가 늘어날수록 파일이 비대화되어 유지보수성이 열화된다.

    패턴 적용



    패키지별로 파일을 나눕니다.

    Arrow 패턴 적용
    package shop {
      class Shop
      Shop *-- Item
    }
    

    Arrow 패턴 적용
    package customer {
      class Customer
      Customer --> Item : buy
    }
    

    클래스 증가시에도 파일이 비대화하기 어렵고, 유지보수성을 유지할 수 있다.

    Arrow 패턴



    패턴 미적용



    객체 간의 종속성은 extends 또는 implements와 같은 키워드로 설명됩니다.

    Arrow 패턴 미적용
    class Parent
    class Child extends Parent
    



    이 표현에는 다음과 같은 문제가 있습니다.
  • 화살표 방향을 지정할 수 없습니다.
  • 개별 오브젝트를 표현한다 class 선언과, 「화살표」라고 하는 레이아웃을 지정한다 extends 키워드가 섞여 있다.

  • 패턴 적용



    Arrow 패턴을 적용한 예를 이하에 나타낸다.

    Arrow 패턴 적용
    class Parent
    class Child
    
    Parent <|-up- Child
    



    Arrow 패턴은 개별 객체의 컨텍스트를 유지합니다 class 선언에서 레이아웃 정보를 보유하는 화살표를 분리합니다.

    컨텍스트와 레이아웃을 분리하면 더 유연한 다이어그램이 가능합니다. 위의 예에서는 화살표에 up 키워드를 사용하여 화살표의 방향을 역방향으로 했다.

    Include 패턴



    패턴 미적용


    start/endsubincludesub 키워드를 사용하여 PlantUML 파일을 객체 지향 구조로 결합합니다.

    다음과 같은 UML을 작성하는 것을 생각해 보자.


    Activity 클래스는 activities 패키지의 일부이며, 추상 클래스 ActivityEdge를 집계한다. 이 UML을 하나의 PlantUML 파일에 설명하면 다음과 같이 보일 것입니다.

    all.puml
    @startuml
    
    package activities {
      class Activity
    }
    
    abstract class ActivityEdge
    
    Activity "0..1" *-- "*" ActivityEdge
    
    @enduml
    

    이 때, activities 패키지내의 Activity 클래스와 패키지외의 ActivityEdge 클래스가, 같은 파일내에 쓰여지게 된다.

    이렇게 하면 예를 들어 activities 패키지만을 도시하고 싶은 경우나 다른 클래스 다이어그램에 Activity 클래스를 올리고 싶은 경우에 코드 클론할 수밖에 없어 불편하다.

    패턴 적용 예



    여기서 사용할 수 있는 것은 start/endsubincludesub 키워드이다. 위의 PlantUML 파일을 이 키워드를 사용하여 두 개의 파일로 나눕니다.

    activity.puml
    @startuml
    
    !startsub interface
    package activities {
      class Activity
    }
    !endsub
    
    @enduml
    

    index.puml
    @startuml
    
    !includesub activity.puml!interface
    
    !startsub interface
    abstract class ActivityEdge
    !endsub
    
    Activity "0..1" *-- "*" ActivityEdge
    
    @enduml
    

    느낌표 !는 PlantUML 전처리기 명령을 의미하는 기호입니다.
    activity.puml!startsub interface ... !endsubinterface라는 서브 파트를 선언하는 전 처리기 명령입니다. 이 서브 파트는, !includesub 키워드를 사용해, 다른 PlantUml로부터 호출할 수가 있다.
    index.puml!includesub activity.puml!interfaceactivity.pumlinterface 서브 파트를 호출하는 전 처리기 명령이다.

    따라서 start/endsubincludesub 키워드를 사용하여 activities 패키지를 재사용하기 쉬운 다른 파일로 나눌 수있었습니다.

    좋은 웹페이지 즐겨찾기