본문 바로가기
Concepts/UML

UML - 클래스 다이어그램 고급 - 인터페이스 추상 클래스

by ocwokocw 2021. 2. 10.

- 이 글은 UML Distilled (마틴 파울러)책을 기반으로 작성하였습니다.

- 인터페이스와 추상 클래스

추상 클래스는 직접 인스턴스화 될 수 없는 클래스이다. 추상 클래스는 추상 오퍼레이션을 가지고 있으며 추상 오퍼레이션은 구현을 갖고 있지 않다.

 

UML 에서 추상 클래스 및 오퍼레이션을 표시할 때 글씨체가 기울어진 이탤릭체를 사용한다.

클래스는 인터페이스를 필요로하거나, 인터페이스의 기능을 제공한다. Order 클래스는 Line Item의 리스트를 필요로하며, List 인터페이스에 의존하고 있다. 인터페이스 기능을 제공하는 구현체는 AbstractList 추상 클래스를 상속하는 ArrayList 이다. 물론 Order가 사용시에는 ArrayList 구현체를 직접 사용하지 않고, List 인터페이스를 통해 사용할것이다.

 

ArrayList 는 추상클래스인 AbstractList 를 상속받고 있다. get 메소드를 구현하며, add 메소드를 재정의한다. equals 메소드는 AbstractList가 정의한 그대로 사용할것이다.

 

UML 에서는 화살표의 점선과 실선, 화살표가 완전한 삼각형 모양으로 닫혀있는지 아니면 열려있는지를 주의해야 한다. 이 화살표 모양은 유스케이스 다이어그램이나 컴포넌트 다이어그램등에 사용되므로 친숙해지는것이 좋다.

  • 의존(dependency): Order는 List 에 의존하고 있다. 이를 '점선'과 '열린 화살표'로 표시한다.
  • 일반화(Generalization): List가 Collection을 그리고 ArrayList가 AbstractList를 상속한다. 이를 '실선'과 '닫힌 화살표'로 표시한다.
  • 구현(Realization): AbstractList는 List를 구현하고 있다. 즉 List의 기능을 제공하고 있다. 이를 '점선'과 '닫힌 화살표'로 표시한다.

- 인터페이스의 다른 표기법

<<interface>>를 키워드로 사용하여 표현하기도 하지만 UML2 에서는 다른 표기법도 제공한다.  아래는 공-소켓 표기법으로 인터페이스를 나타낸것이다. Order는 List 인터페이스가 필요해서 움푹 파인모양이고, List 인터페이스를 공 모양으로 표시한것이다.

막대 사탕 표기법에서는 Order 쪽이 움푹 파인 모양이 아닌 점선 열린 화살표 ----> 로 그대로 표시하고, List 만 공 모양으로 표기한다.

 

만약 어떤 객체의 상위 클래스 중 하나의 인터페이스를 통해 객체를 표시한다면 막대 사탕으로 표기해서 가독성을 높이기도 한다. 물론 순수한 인터페이스는 아니기 때문에 엄격하게 문법적으로 보면 오류가 맞긴하다. 하지만 UML을 실용적인 의사소통의 도구가 아니라 맞냐 틀리냐는 툴 사용에 집착하는 순간 의사소통이라는 본래 목적의 취지 자체가 멀어질 수 있음을 잊지 말자.

댓글