클래스 다이어그램
- 대표적인 UML 구조 다이어그램이다.
- 객체 지향 프로그래밍에서 여러 클래스 상호관의 혐력 관계를 나타내는 다이어그램이다.
클래스 간의 관계를 설계 할때 유용
하다.
- 가장 윗부분이 클래스 이름이다.
- 메소드와 비슷하게 괄호가 붙은 것이 연산이다.
- 변수명 처럼 나타난 것이 속성이다.
이텔릭체
로 되어있는 것은추상클래스나 인터페이스
를 의미한다. (메소드도 마찬가지다)- 스테레오 타입으로 표현하기도 한다. (<>, <>)
다이어몬드 포살표
가 되었다는 의미는 의존관계를 나타내는데, 위와 같은 경우는 Decorator 클래스가 Component 형 변수를 component 라는 이름으로 가지고 있다는 것을 의미한다.
접근 제어자 표시
- public : +
- protected: *
- default: ~
- private: -
연관 관계
- 클래스 상호 간에 서로 연관되어 있음을 나타내며, 각 클래스의 객체는 해당 연관 관계에서 어떤 역할 을 수행하게 된다.
실선
으로 되어있다.- 단방향 연관관계의 경우는 화살표(->)로 표시한다.
- 양방향 연관관계는 직선(-)으로 표시한다.
- 클래스간의 연관된 개체의 수를 표현해야 하는 경우에는 선의 끝쪽에 다중성(multiplicity)를 나타낸다.
- 예시는 아래와 같다.
public class Student {
int studentID;
String studentName;
ArrayList<Subject> subjectList;
- 위와 같이 Student 클래스의 맴버 변수로 Subject 변수를 가지고 있다.
집합 관계 (composition, aggregation)
- 연관관계의 특별한 경우인데, 클래스간의 포함관계를 나타낸다.
- 전체 객체와 부분 객체의 인스턴스 생존 주기( life time ) 에 따라 두가지로 구분할 수 있다.
집약 관계
- 클래스 다이어그램에
빈 마름모
로 표시한다. - 전체 객체와 부분 객체의 라이프 타임이 독립적 즉, 포함하는 객체(전체 객체)가 사라져도 포함된 객체 (부분 객체)는 사라지지 않는다.
- 예를들어, 버스랑 학생이 연관이 있다고 했을때, 버스 객체가 사라져도 버스와 연관된 학생 객체는 사라지지 않는것을 예로 들 수 있다.
- 공유하는 리소스가 해당된다.
- 전체 객체가 생성될 때 매개 변수로 전달 받는다.
합성 관계
- 클래스 다이어그램에
채워진 마름모
로 표시 한다. - 전체 객체의 라이프 타임에 부분객체가 종속된 경우를 말한다.
- 전체 객체가 사라지면 부분 객체도 사라진다.
- 주로
멤버 변수
로 포함되어있다. - 전체 객체의 생성자에서 부분 객체를 생성하는 경우이다.
의존 관계 (dependency)
- 연관 관계 보다는
짧은 life time 을 갖는 경우
를 말한다. - 프로그램 내에서는 참조 변수가
매개변수나 지역 변수
로 구현한다. - 아래와 같이 매개변수로 밖에서 들어와서 사용되는 경우이다. -> 연관관계의 경우는 내부에서 생성돼서 매개변수로 사용되는 것에서 차이가있다.
점선
으로 되어있다.- 예시는 아래와 같다.
class Student {
int money;
...
public void takeBus(Bus bus) {
bus.take(1000);
this.money -= 1000;
}
public void takeSubway(Subway subway) {
subway.take(1500);
this.money -= 1500;
}
}
일반화 관계 (generalization)
- 객체 지향에서
상속
을 의미한다. - 일반적인 클래스(상위 클래스)를 보다 구체적인 클래스(하위 클래스)가 상속한다.
- 실선으로 되어있다.
실체화 관계 ( realization )
- 기능이 선언된
인터페이스
를 구현하는 클래스는 선언된 기능을 구현할 책임이 있다. - 여러 클래스가 하나의 인터페이스를 구현함으로써 다형성을 제공힌다.
- 점선으로 되어있다.
REFERENCES
- 박은종님의 디자인패턴
'객체지향' 카테고리의 다른 글
행위 패턴 (디자인 패턴) (0) | 2022.05.15 |
---|---|
구조패턴 (디자인 패턴) (0) | 2022.05.15 |
리플렉션을 활용한 동적 프락시 구현 (0) | 2022.03.10 |
데코레이터 패턴 활용해서 관심사 분리하기 (0) | 2022.03.10 |
상속 보다는 합성을 사용하라! (0) | 2022.03.10 |