2021.09
디자인 패턴 강의 정리
UML
A standard language for writing software blueprints
어휘 (Vocabularies)
세 종류의 Building block 으로 구성된다.
- Things , Relationships, Diagrams
Things |
Structural things 모델의 정적 부분 (개념적 요소)을 나타냄 |
interface, class, |
Behavioral things 모델의 동적 부분 (행동)을 나타냄 |
interaction (객체간 messaging), | |
Grouping things organizational part |
package and its variations | |
Annotational things explanatory part |
note | |
Relation-ships |
Tie things together. Things 간의 관계 |
* 관계를 나타내는 방법 Dependency Association Generalization Realization |
Diagrams | Group interesting collections of things. |
class diagram, interaction diagram, state diagram, package diagram, ... |
* 객체지향소프트웨어 : 실제 세계의 개념(사물을) 객체화하여 소프트웨어를 개발하는 방법
객체 : 상태와 행동으로 나타낸다.
객체 지향 설계
- 기본요소 - class, interface 등
- 객체들은 interaction (객체간 messaging)
- 객체간의 관계 - Dependency, Association, Generalization, Realization
- 객체간 관심 그룹 확인 - class diagram, interaction daiagram
Common mechanisms
Basic symbol : 이름, 속성, 연산, 책임
Common divisions
Extensibility mechanisms
- Stereotype (새로운 종류의 building blocks)
<< ... >> -> Stereotype
예외 확장, Tagged:(Version, author) , 제약 조건 constraint / {ordered} : 속성
Stereotype : 새로운 타입을 만들 수 있게 한다.
Class
name : 이름, attributes : 속성, operations : 연산 , responsibilities : 책임(s)
- Responsibilities(기능) , 한 클래스에 대한 계약 , 서비스 제공
- 설계원칙중 하나
Single Responsibility Principle(SRP) : 한 가지 클래스는 한가지 사항만 책임
파악 되는 대로 작성!
Adornments
Visibility / Owner Scope / Multiplicity
Abstract , Root/Leaf, Polymorphic
Class : 구상 (concrete)
추상 (abstract)
Template Class
Parameterized Class
implicit binding : 묵시적 표현
explicit binding : 명시적으로 표현 할 수 있다.
Full Syntax
Attribute | 가시성 이름:타입[multiplicity]=초기값 {속성}, {속성}, ... - origin:Point=(0,0) {changeable} |
속성: readonly, changeable, ordered, set, bag, ordered set, list. |
|
Operation | 가시성 이름(가인수리스트):반환타입 {속성}, {속성}, ... + setOrigin( p:Point) :void {guarded} |
속성: query 상태 변경하지 않음. sequential 객체 외부에서 동기화 보장해야 함. guarded 객체 자신이 동기화 보장함. concurrent 객체 자신이 atomicity 보장함. |
|
Parameter | 방향 이름:타입=초기값 |
* direction: in, out, inout / 파라미터로 받아올때 in(call by value), 넘기기 out(call by result), 레퍼런스(객체) inout(call by value-result) |
m(out in area) -> caller
Interface
• interface Is a collection of operations specifying a service(externally visible behavior) of a class
- contract -> 상호간 “신뢰”
객체지향 클래스간 커플링이 낮을 수록 좋다. -> 인터페이스와 의존
* 클래스간 커플링 : tight , concrete class 커플링
* 클래스 – 인터페이스 : loose, abstract 커플링 / Resilient(회복성있는, 탄력있는) 설계
dependency: requires dependency (usage)
realization: provides dependency
Tracker 는 Observer를 파라미터로 사용, 의존
Relationship
Class(Things)는 협력한다.
협력 방법은 relationship 을 사용하여 모델링
- Dependency, Association, Generlization, Realization
Relationship |
클래스 間 ... 관계를 나타냄 |
Dependency | 사용 관계: Uses |
Association | 결합 방법(구조적 관계): Knows |
2 special kinds ∙ Aggregation ∙ Composition |
Whole/Part 관계: ∙ HAS-A (many owners) 약한 관계 ∙ Exclusive HAS-A (a single owner) 강한 관계 |
Generalization | 일반화/특수화 관계: IS-A |
Realization | 계약/구현 관계: Realizes |
• dependency Window uses Event.
• association DialogBox knows Control.
• generalization ConsoleWindow is a (special kind) of Window.
• realization
Association (대등한 관계)
class Student
{
// knows(학생이 알아야한다.)
Course[] cs;
add(Course c) {...}
} // high 커플링 발생
[학생] -> 수강함 -> [과목]
Dependency
class Calendar {
void setTime(Date d) { ... } // uses
}
[달력] -> <<use>> -> [Date]
켈렌더가 Date를 사용함.
multiplicity
a link == an instance of an association
Person | Company | |
employers : Company[0..*] | employees : Person[1..*] | |
Aggregation(집합체) / Composition(구성)
Aggregation
public class Switch
{
private List<Command> history = new ArrayList<>(); //optional
public void storeAndFire(Command cmd) { //requested command
history.add(cmd); //실행한 명령을 저장해 둠, optional
cmd.execute(); //명령객체에게 실행을 요청함(forwarding)
}
}
Polymorphic Composition
public abstract class Duck
{ // Context
FlyBehavior flyBehavior; // Polymorphic Composition
abstract void display();
public void swim() { System.out.println("All ducks float, even decoys!"); }
public void fly() { flyBehavior.fly(); } // Delegation
// 실행 중 행동 변경도 가능
public void setFlyBehavior(FlyBehavior fb) { flyBehavior = fb; }
}
Dependency
클래스간 사용 관계
name 대신 dependeny 유형을 나타내는
<<stereotype>>을 사용함.
Class Diagram
시스템의 정적 구조를 모델링
• (용도 2) collaborations 모델링
Collaboration) A society of classes/interfaces/other elements that work together
to provide some cooperative behavior
서로 메시지 전송 수신, 서로 협력
Interaction Diagram
Interaction (객체 간 메시지 전송하는 행위)
Interaction Diagram
- 시스템의 동적 행위를 모델링함:
- Sequence diagram) 메시지의 시간적 순서를 강조함.
- Communication diagram) 상호작용하는 객체들의 구조적 구성을 강조함.
Sequence diagram
-- Sequencing
-- Structured control
Communication diagram
Collaborations
∙ Structural (or Static) aspects of a collaboration: classifiers + relationships.
- Class diagram, etc.
∙ Behavioral (or Dynamic) aspects of a collaboration: objects + messagings
- Sequence diagram, etc.
'소프트웨어공학 > 디자인 패턴' 카테고리의 다른 글
Facade 패턴 (퍼사드 패턴) - 구조, 통합 인터페이스 제공 | Design Pattern 디자인 패턴 / (0) | 2021.10.12 |
---|---|
Adapter 어댑터 패턴 - 구조, client 가 요구하는 인터페이스와 제공된 클래스의 인터페이스가 일치하지 않을 때 | Design Pattern 디자인 패턴 (0) | 2021.10.10 |
싱글톤 패턴 코드 (Singleton pattern java code) | Design Pattern 디자인 패턴 / (0) | 2021.10.08 |
Singleton 패턴 클래스의 인스턴스가 하나만 있는 것 | Design Pattern 디자인 패턴 (0) | 2021.10.05 |
[Design Pattern] 디자인 패턴 / 설계 원칙 .java (0) | 2021.10.02 |
댓글