|
| 1 | +--- |
| 2 | +title: "[디자인 패턴] Chapter 0. UML 과 Design Pattern" |
| 3 | +excerpt: "Hiroshi Yuki, Java 언어로 배우는 디자인 패턴 입문" |
| 4 | + |
| 5 | +toc: true |
| 6 | +toc_sticky: true |
| 7 | +toc_label: "Ch0. UML과 Design Pattern" |
| 8 | +header: |
| 9 | + teaser: /assets/images/system-analysis/system-analysis-logo.jpeg |
| 10 | + |
| 11 | +categories: |
| 12 | + - 컴퓨터공학 |
| 13 | +tags: |
| 14 | + - 디자인-패턴 |
| 15 | + - java |
| 16 | + |
| 17 | +last_modified_at: 2020-03-17T19:00:00+09:00 |
| 18 | +--- |
| 19 | + |
| 20 | +## 01. UML에 대해서 |
| 21 | +### UML(Unified Modeling Language) |
| 22 | + - 시스템을 시각화하거나 사양이나 설계를 문서화 하기 위한 표현 방법 |
| 23 | + - 본 교재에서는, 클래스나 인터페이스의 관계를 표현하기 위해 사용 |
| 24 | + - Resource |
| 25 | + <https://www.omg.org/uml> |
| 26 | + <https://www.rational.com/uml> |
| 27 | + |
| 28 | +### 클래스 다이어그램 |
| 29 | + - 클래스나 인스턴스(객체), 인터페이스 등 간의 정적인 관계를 표현한 그림 |
| 30 | + |
| 31 | +{: align-center} |
| 32 | + |
| 33 | +클래스 다이어그램 예제 설명 |
| 34 | + - ParentClass : 상위 클래스, 부모 클래스 |
| 35 | + - ChildClass : 하위 클래스, 파생 클래스, 자식 클래스. |
| 36 | + |
| 37 | +부가적인 정보 |
| 38 | + - 추상 클래스(abstract class) |
| 39 | + - 추상 메소드를 하나 이상 가지고 있는 클래스 |
| 40 | + - 이탤릭체로 이름을 표현. |
| 41 | + - 정적 필드(static field) |
| 42 | + - 객체가 아니라 클래스에 포함된 변수(객체마다 하나씩 생기지 않는다) |
| 43 | + - 밑줄을 그어 이름을 표현. |
| 44 | + - 추상 메소드(abstract method) |
| 45 | + - 구현 부분이 없는 메소드 --> 자식 클래스가 구현해야 한다. |
| 46 | + - 이탤릭체로 이름을 표현. |
| 47 | + - 정적 메소드(static method) |
| 48 | + - 객체가 아니라 클래스에 포함된 메소드(정적 메소드나 정적 필드만을 접근할 수 있다) |
| 49 | + - 밑줄을 그어 이름을 표현한다. |
| 50 | + |
| 51 | +### 인터페이스와 구현 |
| 52 | + - 인터페이스란, 구현 부분이 생략되어 있는 메소드들의 이름만 선언되어 있다. |
| 53 | + - 설명 : PrintClass 클래스가 Printable 인터페이스를 구현한다. |
| 54 | + |
| 55 | +{: align-center} |
| 56 | + |
| 57 | +### 집합(Aggregation) |
| 58 | + - '갖고 있는 관계'는 aggregation으로 표현한다. |
| 59 | + - 설명: |
| 60 | + - Basket 클래스는 Fruit 클래스의 인스턴스를 가지고 있다. 즉, Basket 클래스에는, Fruit 클래스로 선언된 필드(변수)가 있다. |
| 61 | + - Fruit 클래스도 Color 클래스의 인스턴스를 가진다. |
| 62 | +{: align-center} |
| 63 | + |
| 64 | +### 액세스 제어 |
| 65 | + - public 메소드나 필드 : + |
| 66 | + - private 메소드나 필드 : - |
| 67 | + - protected 메소드나 필드 : # |
| 68 | + |
| 69 | +{: align-center} |
| 70 | + |
| 71 | +### 클래스간의 관게 |
| 72 | + - 클래스간의 관계를 나타내기 위해서 클래스를 연결하고, 그 위에 관계를 나타내는 이름을 붙인다. |
| 73 | + - 삼각형 방향으로 해석한다. |
| 74 | + |
| 75 | +{: align-center} |
| 76 | + |
| 77 | +### 시퀀스(sequence) 다이어그램 |
| 78 | + |
| 79 | +{: align-center} |
| 80 | + - 프로그램이 동작할 때, 객체들 사이의 메소드들이 어떤 순서로 실행되는지를 보여준다. |
| 81 | + - 객체들간의 협동 과정을 보여줌 |
| 82 | + - `:Client` : Client 클래스의 익명의 객체를 의미한다. |
| 83 | + - `clientA:Client` : Client 클래스의 clientA라는 이름의 객체를 의미한다. |
| 84 | + - 사각형 아래의 점선은 생명선(life line)을 나타낸다. |
| 85 | + - 인스턴스(객체)가 존재하는 기간을 의미함 |
| 86 | + - 생명선 중간의 가늘고 긴 사각형: 객체가 활동 중임을 나타낸다. |
| 87 | + - 즉, CPU를 얻어서 실행이 되는 상태 |
| 88 | + |
| 89 | +## 02. 디자인 패턴을 배우기 전에 |
| 90 | + |
| 91 | +디자인 패턴은 클래스 라이브러리가 아니다 |
| 92 | + - 클래스 라이브러리 : 많이 사용되는 클래스들을 미리 만들어서 모아둔 것 |
| 93 | + `예: 통신 관련 클래스 라이브러리, 수학 관련 클래스 라이브러리` |
| 94 | + |
| 95 | +클래스 라이브러리 구현 시, 디자인 패턴이 적용된다. |
| 96 | + - `예: Java.util.Calender 클래스에의 getInstance() 메소드에서 Factory Method 패턴이 사용된다.` |
| 97 | + |
| 98 | +다이어그램을 단순히 보지 말고, 그 의미를 읽어내야 한다. |
| 99 | + |
| 100 | +스스로 예제를 생각해야 한다. |
| 101 | + |
| 102 | + |
0 commit comments