"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

오늘이군

Class Diagram 본문

삶../프로그래밍

Class Diagram

오늘이군 2017. 6. 20. 14:50
반응형

※ 추천 글

http://hongjinhyeon.tistory.com/25

주의 : 스타크래프트 게임을 모르면.. 와 닿지 않을 수도 있습니다.

http://mydevnote.tistory.com/144

http://blog.naver.com/gangi000/20007183670


1. 클래스 다이어그램

시스템의 논리적인 구조 (클래스) 를 표현한다. 

다른 엔터티들(사람, 제품, 데이터)이 서로 어떻게 관계를 맺고 있는지를 표현한다. 정적 구조라고 할 수 있다. 

요구사항에 표현된 작업. 즉, 시스템이 처리해야 하는 작업에 대한 책임을 분할 한 것이다.


2. 작성 tip

요구 분석 시에는 요구사항에 맞게 개념적으로 클래스 수준에서 작성한다. 

설계 시 멤버변수, 메서드 단위로 확장하여 구현가능하게 작성한다.

SOLID 에 의거하여 작성한다.

SRP : 책임이 집중된 클래스는 분할을 한다.

ISP : 자신이 사용하지 않는 메서드에 의존 관계를 맺지 않는다.

DIP : 자주 변경되는 구체에 의존하지 않고 추상화 된 것에 의존 (의존의 역전) 한다.

모델이 점점 증가되면 관련된 클래스끼리 패키지화 한다.

다른 모델링 기법도 그렇지만 너무 작게 쪼개거나 기능을 너무 많이 포함하지 않고, 적절 한 수준에서 분할을 한다.


3. 클래스 다이어그램 작성요령

가. Class


나. Class relationship

1) generalization / inheritance (일반화)상속을 표현한다. 

public class 마린 extends 유닛


2) realization (실체화) 인터페이스를 구현하는 관계를 표현한다.

public class 배럭 implements IBuildingMove


3) association (연관관계) JPA DDD 를 진행하며 가장 많이 쓰일 관계 이며 한 객체가 다른 객체를 소유(사용) 하거나, 참조하여 사용할 때 표현한다.

Direct Association (단방향) 

class TeamA {}

class MemberA {

TeamA team;

TeamA getTeam() { return team; }

}

getMember() 는 참조가 없으므로 불가능 하다.

Association (양방향)

class TeamB {

MemberB member;

MemberB getMember() { return member; }

}

class MemberB {

TeamB team;

TeamB getTeam() { return team; }

}


* 연관관계는 대상이 되는 객체의 Life Cycle 에 따라서 아래 두 가지로 분류 된다. 


가) composition (합성(강결합)) : 메인 클래스가 삭제될시 대상 클래스는 같이 삭제가 

public class 캐리어 {

private 인터셉터 _b = new 인터셉터();

}

public class 캐리어 { 

private 인터셉터 _b;

public 캐리어() { 

_b = new 인터셉터() ;

}


나) aggregation (집합(약결합)) : 메인 클래스가 삭제될시 대상 클래스는 같이 삭제가 안됨

public class 팩토리 { 

private 팩토리addon _b;

public void set팩토리addon(팩토리addon b) {

_b = b; 

}


4) dependency (의존관계) : 실무에서 가장 많이 쓰이는 관계이며, 한 객체가 다른객체를 소유하지는 않지만, 다른객체의 변경에 따라서 같이 변경을 해주어야 할때 사용

⑴ 다른 객체를 파라미터로 받아서 그 메서드를 사용한다.

public class 배럭b { 

public void doSomething(마린b b) {}

}

⑵ 객체의 메서드 안에서 다른 객체를 생성해서 리턴한다.

public class 배럭b { 

public 마린b MakeMarine() {

return new 마린b();

}

}

배럭스에서는 마린이나 메딕등을 생산을 할 수가 있습니다. 배럭스는 마린이나 메딕을 사용하지 않고 단순히 MakeMarine이라는 메서드를 통해서 마린을 new로 생성해서 리턴할 뿐입니다. 위에서 마린의 클래스에서 생성자에 변경이 생기면 배럭스에서도 생성하는 구문을 수정이 되어야 합니다.




4. 연관관계와 의존관계

가. 연관관계

A class에서 B 객체를 사용한다. A 는 B 를 알지만 B 는 A을 모른다.  시스템은 getB() 함수를 이용해서 두 객체 사이의 관계를 맺어준다

만약 서로 연관 관계를 가지고 있다면 각 Class에 사용되는 Class 객체를 서로 가지고 있다는 것이다.

A class에서 B 객체 변수를 사용하고 B class에서 A 객체 변수를 사용하는 것이다.

나. 의존관계

한 클래스의 변경이 다른 클래스에도 영향을 주는 상황에서 사용된다. 의존 관계는 일반화, 포함, 연관 관계에 비해서 개념적으로 보다 자세한 상황을 표현하며, 구체적으로 말하면 다음과 같은 경우에 클래스 간에 의존 관계가  발생할 수 있다.

다른 클래스의 메소드 인자

- 메소드 내의 지역 객체를 정의할 때 사용된다.


다. 비교

 

 

연관관계 

 의존관계

코드와의 관련성

클래스 속성으로 표현 

메소드의 인자, 지역객체

관계범위 

클래스 범위 

하나의 연산 범위 

방향성 

양방향 가능 

단방향 


반응형

'삶.. > 프로그래밍' 카테고리의 다른 글

DDD (Domain Driven Design)  (0) 2017.07.04
Sequence Diagram  (0) 2017.07.04
Business Process Model and Notation (BPMN)  (0) 2017.06.08
Use Case Diagram  (0) 2017.06.08
JPA 영속성 컨텍스트  (0) 2017.05.24

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
Comments