본문 바로가기

Concepts/UML38

UML - 클래스 다이어그램 고급 - 연관 클래스 - 이 글은 UML Distilled (마틴 파울러)책을 기반으로 작성하였습니다. - 연관 클래스(Association class) 연관 클래스는 클래스간 연관 관계에 속성, 오퍼레이션 그리고 다른 기능들을 더해줄 수 있도록 해준다. 어떤 사람(Person)이 회의(Meeting)에 참석(Attendance)하는 다이어그램을 한번 살펴보자. Person과 Meeting 연관 관계에 Attendance 연관 클래스를 더했다. 또 연관 클래스에는 참석 여부를 가리키는 attentiveness 속성을 더했다. 사실 연관 클래스를 사용하지 않아도 우리는 이 관계를 표현할 수 있다. 연관 클래스가 아닌 완전한 클래스로 변환하여 위와 같은 다중성을 표시해주면 의미가 같아진다. 다중성을 변환한 부분이 좀 헷갈릴 수 .. 2021. 2. 10.
UML - 클래스 다이어그램 고급 - 클래스화와 일반화 - 이 글은 UML Distilled (마틴 파울러)책을 기반으로 작성하였습니다. - 클래스화(classification)와 일반화(generalization) 하위 타입을 판단할 때 "is-a 관계"를 사용하라고 말한다. 하지만 이 문장에는 함정이 있다. 아래 문장은 모두 "is-a" 로 표현할 수 있는 문장이다. 양치기 개는 콜리이다. (클래스화) 콜리는 개이다. (일반화) 개는 동물이다. (일반화) 콜리는 품종이다. (클래스화) 개는 종이다. (클래스화) 위의 문장들을 합쳐서 생각해보자. 1+2 문장을 합치면 "양치기 개는 개이다"가 된다. 2+3을 합치면 "콜리는 동물이다"가 되고, 1+2+3을 하면 "양치기 개는 동물이다"가 된다. 3 문장 모두 오류가 없다. 역시 하위 타입 판별에는 "is-a.. 2021. 2. 10.
UML - 클래스 다이어그램 고급 - 한정 연관 - 이 글은 UML Distilled (마틴 파울러)책을 기반으로 작성하였습니다. - 한정 연관(Qualified association) 한정 연관은 UML 에서 관계 배열, 맵, 해시, 딕셔너리로 표현할 수 있다. 위 다이어그램은 Order 클래스와 OrderLine 클래스 사이의 관계를 Product를 이용하여 한정자(Qualifier)를 표시한것이다. 여기서 Product 의 인스턴스는 각 하나의 OrderLine 만 존재한다는것을 표현한다. 한정 연관에서 다중성을 잘 해석해야 한다. OrderLIne 의 0..1 다중성은 Product에 대한 것이지 Order에 대한것이 아니다. Order 는 여러 개의 OrderLine 을 가질 수 있더라도 위의 다이어그램에서 다중성 상한 1(0..1)이 나타내.. 2021. 2. 10.
UML - 클래스 다이어그램 고급 - 참조 객체, 값 객체 - 이 글은 UML Distilled (마틴 파울러)책을 기반으로 작성하였습니다. - 참조 객체와 값 객체 보통 객체는 고유성을 가지고 있다. 이는 참조 객체에 대한 이야기이며, 값 객체에서는 해당사항이 없는 이야기이다. 참조 객체는 무엇이고 값 객체는 무엇인가? - 참조 객체(Reference Object) 참조 객체는 고객과 같은 객체이다. 만약 프로그램에서 고객을 참조한다면, 해당 고객의 참조는 유일하길 원할 것이다. 그래야만 해당 고객에 대한 정보가 변경될 때, 해당 고객을 사용(참조)하고 있던 여러 사용자들(여기서는 사람을 말하는것이 아니라 참조를 하는 다른 코드를 말한다.)에게 해당 정보가 반영될것이다. 만약 어떤 고객에 대한 참조가 여러개 있고 이런 참조들이 같은 고객을 참조하고있는지 확인하.. 2021. 2. 10.
UML - 클래스 다이어그램 고급 - 인터페이스 추상 클래스 - 이 글은 UML Distilled (마틴 파울러)책을 기반으로 작성하였습니다. - 인터페이스와 추상 클래스 추상 클래스는 직접 인스턴스화 될 수 없는 클래스이다. 추상 클래스는 추상 오퍼레이션을 가지고 있으며 추상 오퍼레이션은 구현을 갖고 있지 않다. UML 에서 추상 클래스 및 오퍼레이션을 표시할 때 글씨체가 기울어진 이탤릭체를 사용한다. 클래스는 인터페이스를 필요로하거나, 인터페이스의 기능을 제공한다. Order 클래스는 Line Item의 리스트를 필요로하며, List 인터페이스에 의존하고 있다. 인터페이스 기능을 제공하는 구현체는 AbstractList 추상 클래스를 상속하는 ArrayList 이다. 물론 Order가 사용시에는 ArrayList 구현체를 직접 사용하지 않고, List 인터페이.. 2021. 2. 10.
UML - 클래스 다이어그램 고급 - 집합과 합성 - 이 글은 UML Distilled (마틴 파울러)책을 기반으로 작성하였습니다. - https://www.visual-paradigm.com/guide/uml-unified-modeling-language/uml-aggregation-vs-composition/ - 집합(Aggregation)과 합성(Composition) 집합과 합성은 UML 에서 가장 헷갈리는 개념이다. 여기에다가 연관까지 끼어서 연관과 집합과 합성은 무엇이냐라고 묻는다면 이 질문이 곧 지옥이다. 집합을 단순하게 정의하기는 쉽다. 일부분이 되는 관계이며, 자동차가 엔진과 바퀴를 갖고 있는것과 같다고 정의하기도 한다. 하지만 이런 정의는 너무도 애매해서 집합의 개념을 모델링을 하는 사람마다 다르게 사용한다. 이런 애매한 정의로는 집합.. 2021. 2. 10.
UML - 클래스 다이어그램 고급 - 키워드, 책임, static - 이 글은 UML Distilled (마틴 파울러)책을 기반으로 작성하였습니다. - 개요 사실 앞의 클래스 다이어그램편에서 언급한 표기법을 사용할 줄 안다면 이미 대부분을 사용하고 있는것이다. 고급편에서는 적절한 곳에 사용하면 유용한 그 외의 표기법을 소개한다. - 키워드 그래픽언어의 단점은 심볼을 모두 외워야 한다는것이다. UML에는 키워드라는것이 있다. 만약 모델링을 위해 UML을 사용하는데 비슷한 기호만 존재할 때, 해당 기호를 사용하고 키워드로 표시하면 사용자에게 해당기호를 어떤 의미로 사용했다고 어필할 수 있다. UML 인터페이스는 몸체가 없는 public 오퍼레이션만 정의되어 있다. 이것을 클래스의 특별한 타입이라고 본다면, 클래스 기호를 사용하고 키워드로 표시해주면 해당 의도를 표현할 수 .. 2021. 2. 10.
UML - 시퀀스 다이어그램 - 동기, 비동기호출 - 이 글은 UML Distilled (마틴 파울러)책을 기반으로 작성하였습니다. - 동기와 비동기 메시지 UML 에서 내부가 채워진 화살표는 동기 메시지를 나타내고, 선으로만 나타낸 화살표는 비동기 메시지를 나타낸다. 동기 메시지를 보낼 경우 호출하는쪽에서는 메시지가 끝날때까지 기다려야 한다. 반면 비동기메시지를 보낸 경우에는 응답을 기다릴 필요가 없다. 위 그림처럼 동기(sync) 라면 활성바가 생기며, 비동기(async) 라면 활성바가 생기지 않는다. - 시퀀스 다이어그램은 언제 사용하는가? 시퀀스 다이어그램은 1개 유스케이스에서 여러 객체의 행동을 볼 때 사용한다. 우리가 앞서 그려왔던 다이어그램을 보면 알 수 있듯이 여러 객체간의 협력을 보여주는데에 유용하다. 만약 여러개의 유스케이스에서 객체 .. 2021. 2. 10.
UML - 시퀀스 다이어그램 - loop, if - 이 글은 UML Distilled (마틴 파울러)책을 기반으로 작성하였습니다. - 루프, 조건문 시퀀스 다이어그램에서는 루프와 조건문을 표현하기가 좋지 않다. 이런 제어구조는 액티비티 다이어그램이나 코드로 표현하는것이 더 좋고 간결하다. 시퀀스 다이어그램은 제어로직보다는 객체들의 상호교류 표현을 훨씬 잘 나타낸다. 시퀀스 다이어그램에서 제어를 표현하기 위해 용어를 몇 가지 알아보자. 1: dispatch 아래에 loop 로 둘러쌓인 큰 사각형이 있는데 이를 프레임이라 부른다. 그 안에 [모든 line item] 라는 Text를 가드라고 한다. 그리고 loop 를 둘러싼 작은 사각형을 연산자 라고 한다. 모든 프레임에는 연산자가 있고, 해당 연산자 조건을 가드에 적는다. UML 프레임에서 자주 사용하는.. 2021. 2. 10.
UML - 시퀀스 다이어그램 - 참가자 - 이 글은 UML Distilled (마틴 파울러)책을 기반으로 작성하였습니다. - 참가자의 생성과 삭제 시퀀스 다이어그램에는 참가자를 생성하고 삭제하는 표기법이 있다. 위 다이어그램 2번 화살표에서 a Handler는 a Query Command 참가자를 생성하였다. 흔히 new 라고 많이 표기하며, StarUML 에서는 화살표의 Action Kind를 Create를 선택하면 로 표기한다. 참가자의 삭제는 X 로 표시한다. 7번 화살표에서 a Query Command가 a Database Statement 에 메세지를 보냄으로써 참가자를 삭제하고 있다. 반면 자기자신이 삭제되는 표현도 가능한데 8번 화살표에서는 재귀 화살표로 자기자신에 메시지를 보낸다. 가비지 컬렉션을 지원하는 언어의 경우 직접 객체.. 2021. 2. 10.