
UML을 공부하면서 참고한 서적입니다.
디자인패턴과 리팩토링
UML
Eclipse에서 UML생성하는 방법과 UML 작성방법에 대해 배워봅시다.
Eclipse에서 UML 생성하기
이클립스에서 클래스 다이어그램을 생성할 수 있는 ObjectAid라는 플러그인이 있습니다.
ObjectAid는 java 파일들을 드래그&드롭 하는 것으로 간단하게 클래스들의 관계도가 만들어지므로 편리합니다.
먼저 이클립스를 실행시키고 Help - Install New Software를 클릭합니다.

그리고 add를 클립합니다.

그리고 ObjectAid에 들어가서 빨간 네모로 표시된
Name과 URL을 복사해서 다음과 같이 설정해줍니다.


그리고 다음화면에서 License가 필요없는 위 두개를 클릭하고 Next를 누릅니다.

다음 화면도 Next로 넘깁니다.

그리고 ObjectAid Class Diagram Editor License를 클릭하고 accept를 누르고 넘깁니다.

이제 클래스 다이어그램을 생성하기 위해서 File - New - Other에서 다음과 같이 따라합니다.


그리고 프로젝트 경로명과 클래스 다이어그램 이름을 입력하고 Finish를 누릅니다.

이제 자바 클래스들을 끌어다 놓으면 클래스 다이어그램이 생성됩니다.

Unified Modeling Language
UML(Unified Modeling Language)은 소프트웨어의 내부구조를 Visual하게 표현할때 사용되는 언어입니다.
UML은 모델(Model) 즉, 구현 대상 자바에서는 클래스(객체)가 모델이 되며 이 모델간의 관계를
한 눈에 볼 수 있게 표현할때 사용하는 것입니다. UML이 잘 만들어져 있으면 그대로 프로그래밍을 하면 되기 때문에
쉽게 구현(Implements)할 수 있습니다.
-
종류
-
구조 다이어그램(Structure Diagram)
- 클래스 다이어그램, 객체 다이어그램, 복합체 구조 다이어그램, 배치 다이어그램, 컴포넌트 다이어그램, 패키지 다이어그램
-
행위 다이어그램(Behavior Diagram)
- 활동 다이어그램, 상태 머신 다이어그램, 유즈 케이스 다이어그램, 상호작용 다이어그램
-
-
형식
UML을 표기하는 형식은 다음과 같습니다. [ ]는 옵션(Option)입니다.

속성 : [+/-/#] 속성명 [멀티플리시티] [:타입] [=초기값] [{속성}]
메소드 : [+/-/#] 메소드명 [([패러미터 이름 : 타입], …..)] [:반환타입] [{속성}]
-
Eclipse에서 UML 사용
People 클래스를 만들고 안에 여러 타입의 속성과 메소드를 만들어 이클립스에서 UML이 표기되는 방식에 대해
확인해 보겠습니다.
public class People implements Comparable<People> {
public int age;
public String sex;
protected String tel;
String address;
static String birthday;
private String ssd;
private int weight;
@Override
public String toString() {
return "People [age=" + age + ", sex=" + sex + ", tel=" + tel + ", address=" + address + ", birthday="
+ birthday + ", ssd=" + ssd + "]";
}
static String getBirthday() {
return birthday;
}
private String getSsd() {
return this.ssd;
}
protected String tel() {
return this.tel;
}
@Override
public int compareTo(People o) {
if(weight>o.weight) return -1;
else if(weight == o.weight) return 0;
else return 1;
}
}

다음을 보면 알 수 있듯이 public은 동그라미 protected는 마름모 default는 삼각형
static은 밑줄 private는 사각형으로 표시되는걸 알 수 있습니다.
Class Diagram
클래스 다이어 그램(Class Diagram) 표기 방법은 다음 그림과 같습니다.
UML은 사각형으로 이루어져있고 그 안에 클래스 이름, 필드명, 메소드 등을 포함합니다.
필드명과 메소드명은 생략해도 되지만, 클래스 이름은 필수 로 들어가야 합니다.

추상 클래스와 추상 메소드는 글씨체가 이탤릭체 처럼 기울어져 있습니다.
추상 클래스는 객체를 생성할수 없으며 스테레오 타입(Stereo Type) <<, >>에 abstract를 적습니다.
« abstract » 인터페이스도 « interface » 처럼 표기합니다.

Object Diagram
객체 다이어그램(Object Diagram)은 클래스로부터 생성된 객체를 UML로 표현할 때 사용되며
클래스 다이어 그램과 비슷하게 생겼습니다.
차이점은 클래스이름을 적는 곳에 클래스에 대한 특정 객체를 가리킬때에는 객체명:클래스명으로 표기하고
임의의 객체를 가리킬 때에는 :클래스명으로 표기해주면 됩니다.

Person John = new Person();
관계 표현
클래스들간의 관계를 표현하는 방법은 크게 4가지 종류가 있습니다.
-
Class RelationShip
- 연관(association)
- 집합(aggregation, composition)
- 상속(inheritance)
- 의존(dependency)

-
연관 관계
연관관계는
방향(navigability)과 멀티플리시티(multiplicity)에 초점이 맞춰줘야 합니다.
한 클래스가 다른 클래스와 연관 관계 를 가지면 각 클래스의 객체는 해당 연관 관계에서 어떤 역할 을 수행하게 된다.- 두 클래스 사이의 연관 관계가 명확한 경우에는 연관 관계 이름 을 사용하지 않아도 됩니다.
- 역할 이름 은 실제 프로그램을 구현할 때 연관된 클래스의 객체들이 서로를 참조할 수 있는 속성의 이름으로 활용할 수 있습니다.
-
연관 관계는 방향성을 가질 수 있다. 양방향은 실선으로, 단방향은 화살표로 표시합니다.
-
실선(양방향 연관관계)
실선 : 서로의 존재를 알고있다.(인식한다)

위 처럼 각 클래스에 연결된 선 부근에 숫자를 적을 수 있는데 이것은
연관된 객체의 개수를
의미하며 이것이멀티플리시티(multiplicity)즉, 다중성 표시입니다. 1이면 1개의 객체 1,2,6은
1또는 2또는 6을 뜻하고 1..* 는 1개 이상, * 또는 0..* 는 0개이상 0..1 은 없거나 1개를 뜻합니다.숫자가 명시되어 있지 않은 경우는 DEFAULT 한개로 가정
-
화살표(단방향 연관관계)
화살표(>) : A -> B의 의미는 A는 B클래스의 존재를 알지만 B는 A를 모른다.

-
연관 클래스
연관 관계에 추가할 속성이나 행위가 있을때 사용합니다. 연관 클래스를 일반 클래스로 변환
연관 클래스는 연관 관계가 있는 두 클래스 사이에 위치하며, 점선을 사용해 연결한다.
이 연관 클래스를 일반 클래스로 변환하여 다대다에서 일대다 연관 관계로 변환한다
-
집합 관계
UML 연관 관계의 특별 경우로 전체와 부분의 관계 를 명확하게 명시하고자할 때 사용합니다.
집합 관계는 집약 관계와 합성 관계로 이루어집니다.
-
집약 관계(aggregation)
집약관계는 한 객체가 다른 객체를 포함하는 것입니다. 어떤 한 객체가 다른 객체들의 집합으로
이루어 질때 그 관계를 집합관계라고 합니다.‘전체’를 가리키는 클래스 방향에
빈 마름모로 표시
전체 객체의 라이프타임과 부분 객체의 라이프 타임은 독립적입니다.
전체 객체가 메모리에서 사라진다 해도 부분 객체는 사라지지 않습니다..아래 예제를 통해 확인해봅시다.
생성자에서 참조값을 인자로 받아 필드 세팅public class Computer { private MainBoard mb; private CPU c; // 생성자 public Computer(MainBoard mb, CPU c) { this.mb = mb; this.c = c; } } -
집합 관계(composition)
부분 객체가 전체 객체에 속하는 관계 ‘부분’을 나타내는 객체를 다른 객체와 공유할 수 없다.
‘전체’를 가리키는 클래스 방향에채워진 마름모로 표시 전체 객체의 라이프타임과 부분 객체의 라이프 타임은 의존적이다.
전체 객체가 없어지면 부분 객체도 없어진다.아래 예제를 통해 확인해봅시다.
생성자에서 필드에 대한 객체 생성public class Computer { private MainBoard mb; private CPU c; // 생성자 public Computer() { this.mb = new MainBoard(); this.c = new CPU(); } }
-
-
상속 관계
상속 관계는 일반화 관계라고도 하며 한 클래스가 다른 클래스를 포함하는 상위 개념일 때 두 클래스 사이에는 일반화 관계가 존재합니다. 상속은
IS-A관계일때 성립하며, 상속은Family개념이 성립합니다.삼각형 표시가 있는 클래스가 상위 클래스이며, 반대쪽이 하위 클래스입니다.

-
의존 관계
의존 관계는 한 클래스가 변경되었을때 이것을 사용하는 다른 클래스에 영향이 미치는 관계를
의존 관계라고하며역이 반드시 성립하지는 않습니다.두 클래스가 연관, 상속, 집합관계로 엮이진 않았지만
한 곳이 변경될때 사용하는 다른 곳도 변경해줘야 하는 경우에 사용합니다.
-
의존관계가 사용되는 경우
- 한 클래스의 메소드가 다른 클래스의 객체를 인자로 받아 그 메소드 사용(일반적)
- 메소드 내부에서 다른 클래스의 객체를 생성하여 그 메소드 사용
- 다른 클래스의 메소드가 또 다른 클래스의 객체를 반환. 이때 이 메소드를 호출하여 반환되는 객체의 메소드를 사용
아래 예제를 통해 확인해봅시다.
public class School { // 입학 가능한지 체크 public boolean isAdmitable(Student st) { if(st.getGrade().equals("A")) { return true; } else return false; } } -
-
인터페이스와 실체화 관계
인터페이스란 인터페이스란
책임입니다.
어떤 객체의 책임이란 객체가 해야 하는 일 또는 객체가 할 수 있는 일 즉, 객체가 외부에 제공하는 서비스나 기능은 객체가 수행하는 책임으로 봅니다. 어떤 공통되는 능력이 있는 것들을 대표하는 관점을 뜻합니다.인터페이스를 표현할때에는 스테레오 타입 안에
<< interface >>이런식으로 표기를 해줍니다.
인터페이스쪽에 삼각형 모양이 붙어있고 점선으로 생겼습니다. 인터페이스도 IS-A관계이며
can do this관계라고도 합니다.
Sequence Diagram
인터랙션 다이어그램(Interaction diagram)은 객체들끼리의 메시지 전달 구조를 표현한 것을 뜻하며, 인터랙션 다이어그램의 종류에는 시퀀스 다이어그램(Sequence diagram)과 콜라보레이션 다이어그램(Collaboration diagram)이 있습니다.
시퀀스 다이어그램은 클래스가 아닌 객체가 모델의 중심입니다. 왜냐하면 메시지(Message) 교환의 주체는 객체이기 때문입니다.
객체 다이어그램 밑에 직사각형인 활성화 바가 있으며 메시지를 받고 실행하는 기간 즉, 메소드 호출시간을 의미합니다.
어떠 한 객체가 다른 객체에게 메시지를 보내려면 그 객체에 대한 래퍼런스 값을 가지고 있어야 합니다.

Reference : heejeong Kwon




近期评论