![](https://velog.velcdn.com/images/sang1234yun/post/ac5ab16b-f37b-4ade-9599-9fbc155a7513/image.png)
클래스 관계의 종류
관계가 강한 순대로,
- Inheritance(상속관계)
한 클래스가 다른 클래스의 Type일 때. 즉, 자식-부모 관계
- Composition(합성관계)
어떤 클래스 B가 다른 클래스 A에 포함될 때, 클래스 B의 라이프 사이클이 클래스 A에게 종속됨을 의미한다. A가 없으면 B도 없다. (e.g. 학과-교수)
- Aggregation(집합관계)
어떤 클래스 B가 다른 클래스 A에 포함될 때, 클래스 B가 A에 종속적이지 않음을 의미한다. A가 없어도 B는 존재할 수 있다. (책-페이지)
- Association(연관관계)
두 클래스 사이에 서로 참조할 수 있으며, 그 관계가 어느정도 지속된다.
- Dependency(의존관계)
![](https://velog.velcdn.com/images/sang1234yun/post/dbe4c3d4-0f0b-4df0-b081-b98c02efd846/image.png)
한 클래스가 다른 클래스의 기능을 사용하고, 그 관계가 짧다. (메소드에 한번 사용되는 등)
Bianary Association
두 클래스 간의 관계
![](https://velog.velcdn.com/images/sang1234yun/post/72c06c16-d26f-4bc2-9ebd-59b2b2f3a85f/image.png)
-
구성 요소
-
Association Name
-
Reading direction
-
Role
객체가 연결 관계에 관여하는 방식
-
Visibility
Public(+), Private(-), Protected(#), Default(~)
-
Navigablility
![](https://velog.velcdn.com/images/sang1234yun/post/a128b392-7454-4be9-a089-b320b9b6732f/image.png)
한 객체가 다른 상대방의 객체에 대해 인식하고 접근할 수 있는가, 즉, 인스턴스에 접근할 수 있는가에 대한 정의이다.
Navigable 하면 화살표로, Non-navigable 하면 X자로 표시한다. 서로 non-navigable 한 경우에 실선으로 표시하지만, 실제로는 실선 표시는 Bidirectional(양쪽으로 탐색 가능)한 경우를 나타내는 경우가 많다.
-
Multiplicity
![](https://velog.velcdn.com/images/sang1234yun/post/82684674-576c-4be6-a466-bac0d54781dc/image.png)
반대쪽 객체와 연관될 수 있는 객체의 수.
(명시되지 않는 경우) 시작하는 쪽을 1로 본다
Unary Association
![](https://velog.velcdn.com/images/sang1234yun/post/4998f283-902e-4ce3-9b3d-3b178eb46c54/image.png)
왼쪽 다이어그램에 따르면 3번 관계는 husband role이 2개이기 때문에 허용되지 않는다. 그런데, 4번은 보기에는 말이 안되는데 왼쪽 다이어그램에 따르면 허용된다.
Association Class
![](https://velog.velcdn.com/images/sang1234yun/post/abc78165-4b8e-4245-9950-80d83f5eba76/image.png)
클래스 간의 관계에 속성을 할당
- n:m의 관계에서 필수
![](https://velog.velcdn.com/images/sang1234yun/post/1e768d9b-cdc7-4cc5-b5cd-a223d9823430/image.png)
- 1:1, 1:n에서는 필수는 아님
- 왜 그냥 클래스 안쓰고 Association 클래스 써요?
![](https://velog.velcdn.com/images/sang1234yun/post/6376d887-a52e-4db0-bd2b-7daafc30f19f/image.png)
왼쪽의 경우는 한 학생이 한 수업에 한번만 (기본적으로는) 등록할 수 있다. 그러나 오른쪽의 경우는 한 학생이 한 수업에 여러번 등록할 수 있다.
![](https://velog.velcdn.com/images/sang1234yun/post/7715b914-5a0a-4ddd-8f52-2fd681aeb6b6/image.png)
Association 클래스에서도 중복 관계를 만들고 싶다면, {non-unique}를 명시하면 된다.
Qualified Association
![](https://velog.velcdn.com/images/sang1234yun/post/eb9a6b11-bf6e-4cd0-a087-e95d4f6a5614/image.png)
한정자를 사용하여 연결된 개체에 액세스할 때의 모호성을 해결