5장 클래스 다이어그램 : 고급 개념(Class Diagrams : Advanced Concepts)
정적 오퍼레이션과 속성
UML에서는 인스턴스가 아닌 클래스에 적용되는 오퍼레이션이나 속성을 정적(static)이라고 부른다.
정적 속성은 클래스 다이어그램에서 밑줄이 그러진 속성으로 표시.
집합과 합성
하나의 클래스는 다른 많은 클래스의 컴포넌트가 될 수 있지만, 하나의 인스턴스는 단 하나의 소유자를 가져야 한다는 것.
집합(aggregation)
-
일부분이 되는 관계
파생 프로퍼티(derived property)
다른 값들을 기초로 계산할 수 있는 것.
인터페이스와 추상 클래스
추상 클래스(abstract class)란 직접 인스턴스화 될 수 없는 클래스. 대신 하위 클래스의 인스턴스를 생성한다.
전형적으로 추상 클래스는 한 개 이상의 추상 오퍼레이션을 가진다.
추상 오퍼레이션(abstract operation)은 구현을 가지고 있지 않다.
이것은 클라이언트와 추상 클래스를 연결하는 순수한 정의이다.
인터페이스는 구현이 없는 클래스이다. 즉, 모든 기능이 추상이다.
읽기 전용과 동결
클라이언트가 읽을 수만 있고 수정할 수 없는 프로퍼티 {readOnly}, {frozen}
어떤 객체의 생애동안 어떤 프로퍼티를 수정할 수 없을 때에 그 프로퍼티가 동결(frozen) 되었다고 하며, 이것은 불변(immutable)이라고 불린다.
참조 객체와 값 객체
객체가 고유성(identity)을 가지고 있다는 것.
-> 참조 객체에는 중요하지만, 값 객체에는 중요하지 않다.
참조 객체(reference object)란 예를 들어 고객 같은 것.
-
보통 실세계의 한 고객을 지칭하는 소프트웨어 객체가 단 하나이기를 원할 것. 고객 객체를 참조하는 모든 객체는 참조나 포인터를 사용할 것이고, 즉 같은 소프트웨어 객체를 참조하게 될 것.
-
이렇게 되면 고객에 대한 변경 사항은 고객을 사용하는 모든 사용자에게 반영된다.
값 객체(value object)란 예를 들어 날짜 같은 것.
-
실세계에는 같은 물체를 나타내는 다양한 값 객체들이 있다.
-
예를 들어 2004년 1월 1일을 가리키는 수 백 개의 객체가 있는 것이 보통이다. 이것들은 모두 서로 바꿔 쓸 수 있는 사본들이다.
-
두 개의 날짜가 있는데 이 날짜들이 같은 지 비교하고 싶다면 고유성을 보는 것이 아니라 그것들을 나타내는 값을 본다.
-
값 객체는 분변이어야 한다.
클래스화와 일반화
사람들이 하위 타입을 is a(이다) 관계라고 말하는 것을 듣는데, 그런 식으로 생각하지 않기를 강력히 권한다.
-
양치기 개는 콜리이다. (클래스화)
-
콜리는 개이다. (일반화)
-
개는 동물이다.(일반화)
-
콜리는 품종이다.(클래스화)
-
개는 종이다.(클래스화)
1번 문장 + 2번 문장 -> 양치기 개는 개이다.
2번 문장 + 3번 문장 -> 콜리는 동물이다.
1번 문장 + 4번 문장 -> 양치기 개는 품종이다. (맞지 않는 표현)
-
클래스화(classification) - 양치기 개 객체는 콜리 타입의 인스턴스이다.
-
일반화(generalization) - 콜리 타입은 개 타입의 하위 타입이다.
클래스 화 다음에 일반화가 오면 합칠 수 있지만 반대는 아니다.
열거(enumeration)
몇 가지 심볼 값 외에는 다른 프로퍼티를 갖지 않는 고정된 값 세트를 표현하는 데 사용.
가시성(visibility)
Public -> 다른 모든 클래스에서 사용 가능.
private -> 자신을 소유하는 클래스에서만 사용 가능.
+(public), -(private), ~(package), #(protected)
'책' 카테고리의 다른 글
DDD 10장 이벤트 (0) | 2020.08.25 |
---|---|
[DDD START] 9장 도메인 모델과 BOUNDED CONTEXT (0) | 2020.08.13 |
[UML DISTILLED 3판] 4장 시퀀스 다이어그램 (0) | 2020.08.08 |
[DDD START] 8장 애그리거트 트랜잭션 관리 (0) | 2020.08.02 |
[UML DISTILLED 3판] 3장 클래스 다이어그램 (0) | 2020.08.02 |