객체지향 프로그래밍에서 사용하는 설계도 로,
클래스 간의 객체상속, 데이터 전달 방식을 명시적으로 표현하는 개요도 이다.
클래스 다이어그램(Class Diragram) 을 사용함으로써 얻을 수 있는 이득
- 자신의 프로그램을 명시적으로 표현할 수 있다.
- 각 코드는 작성자가 아니면, 이해하기가 매우 힘들 수 있으나, 클래스 다이어그램으로 상속관계와 데이터 구조를 표현하면 더 쉽게 알 수 있다.
- 전체 구조와 클래스 의존성을 파악하기 쉽다.
- 데이터를 명시적으로 나타냄으로 각 데이터와 객체간 의존성을 파악하고, 객체 구조를 손쉽게 수정할 수 있다.
- 유지보수에 용이하다.
- 다른사람이 이해하기 편하다는것 은, 나중에 살펴보거나 코드구조를 잊었을 때 살펴볼경우. 다시 기억을 떠올리기가 쉽다는 의미로 코드에 수정사항이 발생하였을 경우. 또는 시스템의 수정을 할 경우 필요한부분을 갈아치울 수 있다.
클래스 다이어그램의 구조
Class
클래스는 3개 구역으로 나누어진 사각형으로 그린다.
클래스의 이름, 속성, 기능을 표기하며 이름은 필수로 명시해야 한다.
클레스의 세부사항은 필드와 메서드의 접근제한자, 필드명, 데이터타입, 매개변수, 리턴타입 등을 나타낸다.
- 접근 제한자 (Access Modifier)
- + : public
- - : private
- # : protected
- 속성 (Attribute)
- 접근 제어자 이름 : 타입 = 기본값
- 기능 (Method)
- 접근 제어자 이름(파라미터 속성) : 리턴값
- void 리턴일경우 생략할 수 있다.
- + setTitle(String)
- + getTitle() : String
클래스를 세부적으로 작성하는것 또한 중요하지만, 다이어그램을 그릴 때 의 목적을 명시하여. 구조도를 더 명확하게 표현하는것에 집중하는것 이 좋다.
Stero Type
Class 객체의 확장요소를 나타낸다.
주로 인터페이스 형태의 객체이거나 Utitlity형태의 객체이거나 등의 객체 구현방식에 따라 나타낼 수 있다.
Abstract Class / Method
추상클래스로, 1개이상의 메소드가 구현체 없이 명세만 할 경우 존재하는 클래스를 이야기한다.
이름과 메소드를 기울여 표현하거나, {abstract}를 사용하거나 하여 명확하게 표현할 수 있다.
Class RelationShip
클래스간의 관계도를 표현하는 방식이다.
화살표 또는 점선 같은 것으로 객체끼리의 관개성을 표시한다.
일반화 ( Generalization)
부모클래스와 자식 클래스 간의 상속관계를 나타낸다.
부모클래스는 자식클래스를 일반화 한 것이고, 자식클래스는 부모 클래스를 구체화 한 것 이다.
상속은 부모클래스의 필드와 메소드를 구체화 해 사용하며, 필요에따라 메소드를 재정의해 사용하게 ㅗ딘다.
부모클래스가 추상일 경우 반드시 Overriad해준다.
위에서 실선으로 연결하고 부모 클래스 쪽에 비어있는 삼각형 화살표를 그리는것 으로 표현한다.
위 그림에서는 Magician이 test.Jop을 상속받는다고 표현되어있다.
실체화 (Realization)
인터페이스의 기능을 실제고 구현한것 을 의미한다.
위 그림에서 인터페이스와 실체화 객체 사이에는 인터페이스쪽에 비어있는 삼각형과 점선 선을 사용하여 연결한다.
의존 (Dependency)
클래스 다이어그램에서 가장 많이 사용되는 관계로
어떤 클래스가 다른 클래스를 참조하는것 을 의미한다.
클래스 사이를 점선과 참조할 클래스에 점선으로 이어 화살표를 붙여서 표현한다.
참조는 다음과 같다.
- 메서드 내 대상 클래스 객체 생성
- 메서드 내 대상 클래스 객체 사용
- 메서드 내 대상 클래스 메서드 호출
- 메서드 내 대상 클래스 객체 리턴
- 메서드에서 대상 클래스 객체를 매개변수로 받아서 사용하는것.
연관 (Association, Directed Association)
클래스 다이어그램에서 Association은 다른객체의 참조를 가지는 필드를 의미한다.
위의 다이어그램은 두가지 형태를 나타내고 있다.
- 일반적인 Association
- 실선 한개로 연결한다.
- 방향이 없음으로 User가 Phone를 참조할 수도 그 반대가 될 수도 있다. 또는 그 두가지 전부 일 수 있다.
- Directed Association
- 클래스를 실선으로 연결 후 끝에 화살표를 추가한다.
- user에서 Phone으로 화살표가 향함으로, User가 Phone를 참조하는걸 의미한다.
- -phones는 역할명 을 나타내고, 어떤 역할로 참조되는지 의미한다.
*은 개수를 나타내는데, 대상 클래스에 가질 수 있는 인스턴스의 범위를 나타낸다.
- 1 : 1개
- * : 0 ~ n개
- n...m : n부터 m까지의 연관관계
집합 (Aggregation, Shared Aggregation)
Association 관계를 조금 더 특수하게 나타내 전체와 부분의 관계를 나타낸다.
집한관계를 나타내는것 임으로 Collection이나 Array등을 이용하는 관계이다.
합성 (Compositon, Composite Aggregation)
Aggregation과 비슷하게 전체와 부분의 집합관계를 나타낸다. 그러나, Aggeration보다 더 강한. 소유권에 영향을 미치는 집합관계를 이야기한다.
윗부분의 다이아몬드 모양이 아랫부분 화살표를 소유한다.
part가 whole에 독립적이고, whole이 part를 빌려쓰는것과 비슷하게 동작한다.
특징점
- 위의 이미지에서 part를 가지는 whole인스턴스가 part인스턴스의 전체 수명을 책임진다.
- part에 해당하는 인스턴스는 공유될 수 없다.
- part가 공유될 경우, DeepCopy를 통해 공유해야 한다.
화살표 정리
'컴퓨터 용어 정리' 카테고리의 다른 글
스레드와 멀티스레딩 (0) | 2023.12.14 |
---|---|
DirectX Particle Trail (0) | 2023.12.09 |
행동 객체화 방법 [ FSM 응용 ] (0) | 2023.12.01 |
유한 상태 기계방법[ FSM(Finite State Machine) ] (0) | 2023.12.01 |
DirectX Instancing (0) | 2023.11.28 |