일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 1110
- 백준
- 1546
- 그대로 출력하기
- 비트 코인
- Remix
- 별 찍기 - 11
- X보다 작은 수
- 1065
- Dapp
- 가상 화폐
- 1%d
- 10871
- for문 사용해보기
- if문 사용해보기
- 시험 성적
- Baekjoon
- 이더리움
- 솔리디티
- 세 수
- Mist
- 평균은 넘겠지
- 자바스크립트
- 2448
- 블록 체인
- 알고리즘 문제풀이
- 10817
- 단계별로 풀어보기
- 더하기 사이클
- 함수 사용하기
- Today
- Total
블링블링 범블링
UML-Relationship(관계) 본문
UML-Relationship(관계)
UML에서 가장 중요하다고 생각되는 부분이 관계다. 그만큼 어려운 부분이기도 하다. 시간이 걸리겠지만 정리를 해보려고한다.
관계는 구성 요소들 간의 관계성을 표현하며, 주로 클래스들간의 표현 시에 사용된다. 크게 의존(Dependency), 연관(Association), 일반화(Generalization), 실체화(Realization) 관계로 이뤄져있다. 그림과 예시를 통해서 설명해볼 것이다.
1. Dependency Relationships(의존 관계)
[개념]
하나의 클래스에 변화가 있으면 다른 클래스에도 변화가 가는 것을 두 클래스는 의존 관계에 있다고 말할 수 있다.
1) 한 클래스의 메소드가 다른 클래스의 개체를 인자로 받아 그 메소드를 사용할 경우를 의존관계라고 말한다.
2) 한 클래스의 메소드 내부에서 다른 클래스의객체를 생성해 그 메소드를 사용한다.
[표기법]
표기 방법은 점선 활살표를 이용한다 A가 B를 의존할 때 A->B방향으로 표기한다.
[예시와 코드]
위의 그림에 따라 코드로 표현한 것이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | public class Student { private int money = 10000 ; //가지고 있는 돈 public int getMoney() { return money; } } public class Wallet{ private int applePrice = 1000 ; //사과가격 public boolean isPay(Student stu) { //살수있나? if (stu.getMoney()>applePrice) return true ; // 구매가능 else return false ; //구매 불가능 } } |
2. Association Relationships(연관 관계)
[개념]
하나의 객체가 다른 객체와 연관관계에 있다는 것을 의미하며 특정 클래스의 인스턴스가 작업을 수행하기 위해서는 다른 클래스를 알아야 한다.
[표기법]
1)다중도
1) * : 0,1, 또는 그 이상을 의미한다.
2) 1 : 정확히 1개
3) 2..4 : 2~4개
4) 3..* : 3개 이상
2)이름
객체들의 관계이름
3)방향성
질의의 방향이나 객체 사이의 실선으로 표시하며 양쪽 방향인 경우는 화살표시를 하지 않는다.
[코드]
위의 그림에 따라 코드로 표현한 것이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | public class School { public String name; School(String name){ this .name =name; } } public class Student { School school_name; //학교 private int Id; private int age; Student( int id, int age, School school_name){ this .Id =id; this .age =age; this .school_name = school_name; } } |
[연관관계의 세부종류]
1.집합연관(Aggregation Relationship)
두 클래스가 전체-부분관계(Whole-part)에 있는 것을 말한다. 각 클래스는 독립적인 생명주기를 가지고 있다고 할 때 예를 들어서 학교를 들어보면 학교에는 학생과 선생님 등이 있다. 학교가 사라진다고 할 때 학생이 사라지는 것은 아니며 역으로 학생들이 사라지는 것은 학교가 사라지는 것이 아니다. 집합연관이 있는 클래스는 화살표 대신 색이 칠해지지 않은 다이아몬드로 표현한다.
[소스 코드]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | public class School { public Student stu; public Teacher tea; School(Student stu, Teacher tea){ this .stu =stu; this .tea =tea; } } public class Student{ Student(){ } } public class Teacher{ Teacher() { } } |
2.복합연관(Composition Relationship)
[소스 코드]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | public class School { public ClassRoom room; School(Student stu, Teacher tea){ room = new ClassRoom(); } } public class ClassRoom{ ClassRoom(){ } } |
2. Generalization Relationships(일반화 관계)
[개념]
대표적으로 객체지향에서 상속관계를 말한다. 예를 들어 과일에는 사과, 바나나, 딸기 등이 있는 것을 상속관계에 있다고 말한다. 과일이라는 부모 클래스와 각각의 과일 종류의 자식 클래스가 있을 때 부모 클래스가 자식클래스를 가리키면 일반화(Generalization)관계에 있다고하고, 반대의 경우를 특수화(Specialization) 관계라고 한다.
[소스코드]
위의 그림에 따라 코드로 표현한 것이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | public class Fruit { public String name; public String season; public grow() { } } public class Apple extends Fruit{ public Apple() { } } public class StrawBerry extends Fruit{ public Banana() { } } public class Banana extends Fruit{ public Banana() { } } |
4. Realization Relationships(실제화 관계)
[개념]
인터페이스와 실제 구현된 일반 클래스간의 관계를 말한다. 일반화 관계는 존재하는 객체에 대한 오버라이딩(재구현)을 말하지만 실제화 관계에서는 존재하는 행동에 대한 구현을 말한다. 예를 들어서 공격하다라는 행동이 있을 때 '말한다' 행동을 가지는 동물, 사람, 식물이 될 수 있다. 이처럼 행동만 정의된 객체를 인터페이스라하고, 이를 구체적으로 구현한 것과의 관계를 실제화 관계에 있다고 말한다.
[표기법]
일반화 관계와 비슷하나 점선을 통해 나타낸다.
[소스코드]
위의 그림에 따라 코드로 표현한 것이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | public interface Speak{ public void Howspeak(); } public class Human implements Speak{ public void Howspeak() { } } public class Animal implements Speak{ public void Howspeak() { } } public class Plant implements Speak{ public void Howspeak() { } }
|
'Technology > 객체 지향 디자인 패턴' 카테고리의 다른 글
객체 지향 프로그래밍(Object-Oriented Programs) (0) | 2018.04.18 |
---|---|
객체지향의 원칙-SOLID (0) | 2018.04.17 |
UML-Diagram(다이어그램) (0) | 2018.04.17 |
UML-Things(사물) (0) | 2018.04.17 |
UML(Unified Modeling Language) (0) | 2018.04.17 |