Skip to content

Instantly share code, notes, and snippets.

@choiseoungho
Last active March 17, 2019 09:18
Show Gist options
  • Save choiseoungho/9bc12098f73613f4f049d52aef0417e6 to your computer and use it in GitHub Desktop.
Save choiseoungho/9bc12098f73613f4f049d52aef0417e6 to your computer and use it in GitHub Desktop.
Class diagram 은 starUML을 이용한다.
클래스 다이어그램은
1. 다른 사람들과의 의사소통 또는 설계 논의
2. 전체 시스템의 구조 및 클래스의 의존성 파악
3. 유지보수를 위한 설계의 back-end 문서
작성시 주의사항
Access : 다이어그램을 보고 직관적으로 이해할 수 있도록 의미있고 명확하나 이름을 부여한다.
Simplicity : 불필요한 내용을 제외하고 모델을 간결하게 그려야한다. (Getter, Setter, Constructor는 생략이 가능)
Cost : UML을 작성하는 것이 개발비용보다 더 들어가는 경우도 있으므로 비용을 고려하여 작성여부를 검토하는 것이 좋다.
표기 방법
Class 는 객체지향에서 사용되는 클래스를 표현하는 모델링 언어
클래스를 표현할때에는 세 가지 부분으로 나누어 표현 1. 클래스 이름 2. 멤버변수 3. 메서드
표기방법
클래스 이름은 다음과 같이 네모 박스 안에 기입한다. 다음의 규칙을 따라야 한다.
상자의 가운데에 위치해야 한다. 굵은 굴씨체로 기입, 첫번째 글자는 대문자.
멤버변수는 Property 개념 의 한 종류 각 멤버변수가 하나하나가 property 하나하나이다.
visbility 는 접근 제어자를 표현한다. 1. + : public 2. - private 3. # protected ~ package
메서드(Operation)
클래스의 메서드는 UML에서 Operation 이라고 하는 개념의 한 종류이다. 각 메서드 하나하나가 operation 하나하나이다.
operation 은 다음과 같은 순서로 작성한다.
[visibility] operation-name (property1, property2,...): return-type
operation-name 은 메서드명이다.
메서드의 파라미터는 () 괄호 안에 작성하면되고 작성방법은 property 와 동일하다. 리턴타입은 : 콜론 뒤에 작성한다.
Relationship 종류
1. Generalization 상속관계 class A가 super class class b 가 sub class
2. Dependency 지역변수로 사용하거나, 파라미터로 사용하는 등 멤버변수로 갖지 않고 사용하는 관계
Class A의 메서드가 class B의 메서드를 호출하거나, class B를 메서드의 인자로 받는 등 사용하는 경우
3. Realization Dependency의 한 종류이고, 인터페이스를 구현하는 관계
interface A가 있고, class B가 Interface A를 구현한 경우
4. Association Dependency와 달리 멤버 변수로 가지고 사용하는 관계
class A가 class B를 멤버 변수로 가지고 있고, 사용하는 경우
5. aggregation : Association의 한종류이며 전체와 부분의 관계를 가지는 클래스에 적용된다. 멤버변수로 가지고 있지만, new를 직접하지
하지 않는 관계 e.g) class A가 class B를 멤버변수로 가지고 있는 경우, class A가 전체개념이고, class B가 부분의 개념이다.
하지만 class A가 직접 class B를 new 하지는 않는다.
6. composition : Association의 한종류이며 전체와 부분의 관계를 가지는 클래스에 적용된다. 멤버변수로 가지고 있고, Agrregation과
달리 직접 new를 하는 관계
e.g) class A가 전체개념이고, class B가 부분의 개념이다. class A가 직접 class B를 new 해서 생성한다.
7. Nested Inner Class의 관계 class A안에 class B가 이너클래스로 존재하는 경우.
Generalization
상속관계의 클래스를 실선으로 연결하고 Super class 쪽에 빈 삼각형을 그린다.
Dependency
Dependency는 의존관계이다. 단, 한 클래스가 다른 클래스를 멤버변수로 가지지 않고 지역변수, 파라미터등 일시적으로 사용하는 경우에 성립되는 관계
Realization
인터페이스와 구현관계이다. 두 클래스를 점선으로 연결하고 인터페이스 쪽에 화살표를 그린다.
Association
한 클래스가 다른 클래스를 멤버변수로 가지는 경우이다. 두 클래스를 실선으로 연결하고 사용 당하는 클래스 쪽에 화살표를 그린다.
여기서 중요한 것은, 화살표가 없거나 한쪽만 있거나 양쪽 다 있는 경우 다양하게 존재.
화살표가 아예 없다는 것은 Unspecify로 구현하는 사람이 적절하게 구현되는 되는 것이다. 한쪽만 있다는 것은 그 한쪽은 확실하게 구현해야 한다는 양 쪽 다 있는 경우는 서로를 멤버변수로 가지고 있다.
Dependency
Dependency는 의존관계이다. 단, 한 클래스가 다른 클래스를 멤버변수로 가지지 않고 지역변수, 파라미터등 일시적으로 사용하는 경우에 성립되는 관계
Realization
인터페이스와 구현관계이다. 두 클래스를 점선으로 연결하고 인터페이스 쪽에 화살표를 그린다.
Association
한 클래스가 다른 클래스를 멤버변수로 가지는 경우이다. 두 클래스를 실선으로 연결하고 사용 당하는 클래스 쪽에 화살표를 그린다.
여기서 중요한 것은, 화살표가 없거나 한쪽만 있거나 양쪽 다 있는 경우 다양하게 존재.
화살표가 아예 없다는 것은 Unspecify로 구현하는 사람이 적절하게 구현되는 되는 것이다. 한쪽만 있다는 것은 그 한쪽은 확실하게 구현해야 한다는 양 쪽 다 있는 경우는 서로를 멤버변수로 가지고 있다.
Aggregation
Aggregation 은 한 클래스가 전체의 역할을 하고 다른 클래스가 부분의 역할을 하는 전체 부분 관계일 때 사용되는 표현이다. Composition 또한 전체-부분 관계에서 사용되는 표현, 둘의 차이는 전체가 부분 클래스를 new 하는지 여부이다.
Aggregation은 전체 클래스가 부분 클래스를 new 하지 않고 외부에서 주입받는다. 반면 Composition은 전체가 부분 클래스를 직접 new 하여 사용한다.
Composition
Composition은 Aggregation과 거의동일하고 다른 점은 사용하는 클래스에서 직접 new를 해준다. 생명 주기를 사용하는 경우에 사용.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment