ν΄λμ€ λ€μ΄μ΄κ·Έλ¨μ΄λ?
μΉ μ ν리μΌμ΄μ μ μ€κ³νλλ° ν΄λμ€ λ€μ΄μ΄κ·Έλ¨μ νμμ μΌλ‘ λ±μ₯νλ UMLμ΄λ€.
μννΈμ¨μ΄ 곡νμμ μ΄μΌκΈ°νλ― UML μλ ν¬κ² 2κ°μ§μ μ’ λ₯λ‘ λλκ² λλλ°
- Behavior Diagram
- Structure Diagram
ν΄λμ€ λ€μ΄μ΄κ·Έλ¨μ κ° μ»΄ν¬λνΈλ€μ μ μ μΈ λ©΄μ 보기 μν Structure Diagram μ μνλ λνμ μΈ λͺ¨λΈλ§ κΈ°λ²μ μλ―Ένλ€.
λ€μ ν λ§λλ‘ ν΄λμ€ λ€μ΄μ΄κ·Έλ¨μ μ μνμλ©΄ λ€μκ³Ό κ°λ€.
ν΄λμ€ λ€μ΄μ΄κ·Έλ¨μ μμ€ν μ μ μ μΈ λ©΄μ 보μ¬μ£Όλ λνμ μΈ UMLλ‘ κ° μ»΄ν¬λνΈλ€ μ¬μ΄μ κ΄κ³λ₯Ό νννλ€.
μ°λ¦¬λ μ΄λ¬ν ν΄λμ€ λ€μ΄μ΄κ·Έλ¨μ μ΄μ©ν΄μ μμ€ν μ μ€κ³νκ³ νμ μ μμ΄ μμ¬μν΅ λκ΅¬λ‘ μ¬μ©νκ² λλ€.
μ΄λ° ν΄λμ€ λ€μ΄μ΄κ·Έλ¨μ μ΄μ©νκ² λλ€λ©΄ κ° ν΄λμ€κ°μ μμ‘΄ κ΄κ³λ₯Ό λͺ νν νννκΈ° λλ¬Έμ μνμ μμ‘΄μ΄ λ°μνλ μ§μ μ μ½κ² μ°Ύμ μ μκ² λλ€.
ν΄λμ€ λ€μ΄μ΄κ·Έλ¨μ μμ
ν΄λμ€ λ€μ΄μ΄κ·Έλ¨μλ ν¬κ² 3κ°μ§μ μμκ° μ‘΄μ¬νλ€.
- Class
- Stereo Type
- Abstract Class/Method
ν΄λμ€ λ€μ΄μ΄κ·Έλ¨μ μμ 1. Class
ν΄λμ€λ λ€μκ³Ό κ°μ΄ 3κ°μ ννΈλ‘ ꡬμ±μ΄ λλ€.
- ν΄λμ€ μ΄λ¦
- μμ±
- κΈ°λ₯
μλ₯Ό λ€μ΄ λ€μκ³Ό κ°μ ν΄λμ€κ° μ‘΄μ¬νλ€κ³ ν΄λ³΄μ.
public class User {
private int age;
private String address = "μμΈνΉλ³μ";
private String name;
public void setInformation(int age, String address, String name) {
// do something
}
public String introduceMessage() {
return "some string";
}
private void delete() {
// do something
}
}
μμ ν΄λμ€μλ 3κ°μ μμ±κ³Ό 3κ°μ λ©μλ κΈ°λ₯μ΄ μ‘΄μ¬νκ³ κ·Έλ€μ κ°κ° public / private μ κ·Ό μ νμκ° κ±Έλ €μλ€λ©΄ λ€μκ³Ό κ°μ ν΄λμ€ λ€μ΄μ΄κ·Έλ¨μ΄ λμ€κ² λ κ²μ΄λ€.
ν΄λμ€ λ€μ΄μ΄κ·Έλ¨μμλ μμ κ°μ ννλ‘ Access Modifier, Fields, Data Type, Parameters, Return Type μ ννν μ μλ€.
ν΄λμ€μμλ μμ±κ³Ό κΈ°λ₯μ νμμ λ°λΌ μλ΅λ μ μμ§λ§ ν΄λμ€λͺ μ λΉμ°νλ μλ΅μ΄ λΆκ°λ₯νλ€.
ν΄λμ€ λ€μ΄μ΄κ·Έλ¨μ μμ 2. Stereo Type
μ€ν
λ μ€ νμ
μ΄λ UML μμ μ 곡νλ κΈ°λ³Έ μμ μΈμ μΆκ°μ μΈ νμ μμλ₯Ό λνλ΄λ κ²μΌλ‘ μ κΊΎμ Guillemet <<>>
μ¬μ΄μ λͺ
μνλ€.
public interface Notificator {
void execute();
}
μμ κ°μ interface λν νμ₯ μμμΈ μ€ν λ μ€ νμ μ μνλλ°, μ΄λ₯Ό ν΄λμ€ λ€μ΄μ΄κ·Έλ¨μμλ λ€μκ³Ό κ°μ΄ νννλ€.
μ΄λ¬ν μ€ν λ μ€ νμ μ μΈν°νμ΄μ€ λΏλ§ μλλΌ Enum, μΈλΆ λͺ¨λμ μ νΈλ¦¬ν° λν ννμ΄ κ°λ₯νλ€.
ν΄λμ€ λ€μ΄μ΄κ·Έλ¨μ μμ 3. Abstract Class/Method
μΆμ ν΄λμ€ λν ν΄λμ€ λ€μ΄μ΄κ·Έλ¨μμ ννν μ μλ€.
μΆμ ν΄λμ€λ₯Ό νννλ λ°©λ²μ ν¬κ² 2κ°μ§κ° μλ€.
- Italic Font
{abstract}
νλ‘νΌν°
UML ν΄μ μ΄μ©νκ±°λ GoF μ λμμΈ ν¨ν΄ μ±
μμλ μΆμ ν΄λμ€λ₯Ό μ΄ν€λ¦μΌλ‘ νννμ§λ§ νΌλμ΄ μμ μ μκΈ° λλ¬Έμ {abstract}
νλ‘νΌν°λ₯Ό μ¬μ©νκΈ°λ νλ€.
ν΄λμ€ λ€μ΄μ΄κ·Έλ¨μ κ΄κ³ νν
ν΄λμ€ λ€μ΄μ΄κ·Έλ¨ μμλ κ° ν΄λμ€ μ»΄ν¬λνΈκ°μ κ΄κ³λ₯Ό νννλ κ²μ΄ κ°μ₯ μ€μνλ€.
μ΄λ° κ΄κ³μ ννμ μν΄λ λ€μν κ΄κ³κ° μ‘΄μ¬νλλ°,
- μΌλ°ν κ΄κ³
- μ€μ²΄ν κ΄κ³
- μμ‘΄ κ΄κ³
- μ°κ΄ κ΄κ³
- μ§ν© κ΄κ³
- ν©μ± κ΄κ³
νλμ© μμ보λλ‘ νμ
ν΄λμ€μ κ΄κ³ νν - Generalization, μΌλ°ν κ΄κ³
is a kind of κ΄κ³
μΌλ°ν κ΄κ³λ λΆλͺ¨ ν΄λμ€μ μμ ν΄λμ€ κ°μ μμ κ΄κ³λ₯Ό λνλΈλ€.
public class User {
private int age;
private String address = "μμΈνΉλ³μ";
private String name;
public void setInformation(int age, String address, String name) {
// do something
}
public String introduceMessage() {
return "some string";
}
}
public class Member extends User {
@Override
public void setInformation(int age, String address, String name) {
// do something
}
@Override
public String introduceMessage() {
return "return something";
}
}
public class Admin extends User {
@Override
public void setInformation(int age, String address, String name) {
// do something
}
@Override
public String introduceMessage() {
return "return something";
}
}
μμ ν΄λμ€μμ μνΌ ν΄λμ€λ‘ μ€μ κ³Ό λΉμ΄μλ μΌκ°νμ μ΄μ©νμ¬ νννλ€.
ν΄λμ€μ κ΄κ³ νν - Realization, μ€μ²΄ν κ΄κ³
μ€μ²΄ν κ΄κ³λ μΈν°νμ΄μ€μ λͺ μΈλ§ μ‘΄μ¬νλ λ©μλλ₯Ό μ€λ²λΌμ΄λ©νμ¬ μ€μ κΈ°λ₯μ΄ λμνλλ‘ κ΅¬ννλ κ²μ λ§νλ€.
μ€μ²΄ν κ΄κ³κ° λ°λ‘ λ€νμ±μ μ€νν μ μλ κ΄κ³μ΄λ€.
public interface Notificator {
void execute();
}
public class ToastNotificator implements Notificator {
@Override
public void execute() {
// do something
}
}
ꡬννλ ν΄λμ€μμ μΈν°νμ΄μ€λ‘ μ μ κ³Ό λΉμ΄μλ μΌκ°νμ μ΄μ©νμ¬ νννλ€
ν΄λμ€μ κ΄κ³ νν - Dependency, μμ‘΄ κ΄κ³
μμ‘΄ κ΄κ³λ ν΄λμ€ λ€μ΄μ΄κ·Έλ¨μμ μΌλ°μ μΌλ‘ κ°μ₯ λ§μ΄ μ¬μ©λλ κ΄κ³λ‘ λ€λ₯Έ ν΄λμ€λ₯Ό μ°Έμ‘°ν λ μμ‘΄ κ΄κ³λΌκ³ νλ€.
μΆκ°λ‘ μ΄λ€ λͺ©μ μ Dependency μΈμ§ λͺ νν λͺ μν μ μλλ°, μμ‘΄μ λͺ©μ μ λ°λΌ νννλ κ²μ΄ λͺ νν μ μλ€.
μμ‘΄μ λͺ©μ μλ λ€μκ³Ό κ°μ νλͺ©λ€μ΄ μ‘΄μ¬νλ€.
- create : λ€λ₯Έ ν΄λμ€λ‘ λ©μμ§κ° μ λ¬λ λ
- local : λ€λ₯Έ ν΄λμ€μ λ°μ΄ν°μ μΌλΆκ° λ λ
- parameter : λ€λ₯Έ ν΄λμ€μ μ€νΌλ μ΄μ μ 맀κ°λ³μ
public interface Notificator {
void execute();
}
public class ToastNotificator implements Notificator {
@Override
public void execute() {
System.out.println("Toast λ₯Ό μ΄μ©νμ¬ notify");
}
}
public class Notifier {
void notifyBy(Notificator notificator) {
if (notificator.getClass().equals(ToastNotificator.class)) {
notificator.execute();
}
}
}
Dependency κ΄κ³μμλ Instance μ reference κ° μ μ§λμ§ μλλ€.
μμ κ²½μ°μμλ Notificator
μ reference λ₯Ό κ°μ§κ³ λ©μλλ₯Ό νΈμΆν λ€ μ°κ΄μ λκ³ μκΈ°μ Dependency κ΄κ³κ° λ§μ‘±λλ κ²μ΄λ€.
μ°Έμ‘°νλ ν΄λμ€μμ λμ ν΄λμ€λ‘ μ μ κ³Ό νμ΄νλ₯Ό μ΄μ©νμ¬ νννλ€.
μ°Έκ³ λ‘ μ°Έμ‘°μ ννλ λ©μλ λ΄λΆμμ λμ ν΄λμ€μ κ°μ²΄μ μμ±, λ©μλ νΈμΆ, κ°μ²΄ λ¦¬ν΄ λ±μ μλ―Ένλ©° κ³μν΄μ κ°μ²΄μ μ°Έμ‘°λ₯Ό μ μ§νμ§λ μλλ€.
ν΄λμ€μ κ΄κ³ νν - Association, μ°κ΄ κ΄κ³
μ°κ΄ κ΄κ³λ λ€λ₯Έ κ°μ²΄μ μ°Έμ‘°λ₯Ό κ°μ§λ νλλ₯Ό μλ―Ένλ€.
μ°κ΄ κ΄κ³λ μμ‘΄ κ΄κ³μ λ€λ₯΄κ² μ°Έμ‘°λ₯Ό κ³μν΄μ μ μ§νλ€
public class UserService {
void add() {
// do something
}
}
public class UserController {
private UserService userService;
void create() {
userService.add();
}
}
ν΄λμ€μ κ΄κ³ νν - Aggregation, μ§ν© κ΄κ³
has a κ΄κ³ (μ½ν μ§ν©)
μ§ν©μ Aggregration, Shared Aggregation μΌλ‘ 2κ°μ§ λ°©λ²μΌλ‘ ννλλ€.
μ£Όλ‘ Whole - Part, μ 체 - λΆλΆ μ κ΄κ³λ₯Ό νννλ€.
Aggregation μ Association μ μ§ν© κ΄κ³λ₯Ό λνλ΄λ κ²μΌλ‘ Collections
λ Array
λ₯Ό μ΄μ©νμ¬ μ§ν©μ λ€λ£¨λ κ΄κ³μ΄λ€.
λν λ¨μ μ§ν©μ μλ―ΈνκΈ° λλ¬Έμ μ μ²΄κ° μλ©ΈλλλΌλ λΆλΆ μμλ μλ©Έλμ§ μκ³ , μ 체 μμκ° μλ©Έλ λ λΆλΆ μμκ° μλ©Έλμ§ μμ μ μλ€. μ΄λ₯Ό λμ¨ν μ§ν© (μ°κ²°) κ΄κ³λΌκ³ λ νλ€
public class House {
private AirConditioner airConditioner;
private TV tv;
public House(AirConditioner airConditioner, TV tv) {
this.airConditioner = airConditioner;
this.tv = tv;
}
}
public class AirConditioner {
void turnOn() {
// do Something
}
}
public class TV {
void turnOn() {
// do Something
}
}
μ§ν© λμ ν΄λμ€μμ μ°Έμ‘°νλ ν΄λμ€λ‘ μμ΄ λΉμ΄μλ λ§λ¦λͺ¨λ‘ νννλ€.
ν΄λμ€μ κ΄κ³ νν - Composition, ν©μ± κ΄κ³
has a κ΄κ³ (κ°ν μ§ν©)
ν©μ±μ Composition, Composite Aggregation μ΄λΌκ³ λΆνλ€.
Aggregation κ³Ό λΉμ·νκ² Whole - Part, μ 체 - λΆλΆ μ κ΄κ³λ₯Ό νννμ§λ§ Aggregation λ³΄λ€ λ κ°ν μ§ν© κ΄κ³μ΄λ€.
κ°ν μ§ν©μ΄λ part κ° whole μ μ’ μμ μ΄μ΄μ partκ° whole μ μμ λλλ° μ΄μ λ°ν΄ Aggregation μ Part κ° Whole μ λ 립μ μ΄μ΄μ Whole μ΄ Part λ₯Ό λΉλ € μ°λ κ²κ³Ό λΉμ·νλ€.
μ΄λ° κ°ν μ§ν©μμλ μ 체 μμκ° μλ©Έλ λ λͺ¨λ λΆλΆ μμλ ν¨κ» μλ©Έλκ² λλ€λ νΉμ§μ΄ μ‘΄μ¬νλ€.
μ¦, Composition κ΄κ³λ μ 체 μμμ λΆλΆ μμκ° κ°μ Life-Cycleμ κ°λ κ²μ΄λΌκ³ ν μ μλ€.
public class Car {
private Engine engine;
private Wheel wheel;
public Car() {
this.engine = new Engine();
this.wheel = new Wheel();
}
}
public class Engine {
void start() {
// do something
}
}
public class Wheel {
private int inch = 33;
public int getInch() {
return inch;
}
}
μ§ν© λμ ν΄λμ€μμ μ°Έμ‘°νλ ν΄λμ€λ‘ μμ΄ μ°¬ λ§λ¦λͺ¨λ‘ νννλ€.
μ 체 μ 리
μμ λ΄μ©λ€μ μ 리νλ€λ©΄ λ€μκ³Ό κ°λ€.
public class A {
B b;
C c;
D d;
public A() {
b = new B(); // ν©μ± κ΄κ³
}
public A(C c) {
this.c = c; // μ§ν© κ΄κ³
}
public void doSomething(D d) { // μ°κ΄ κ΄κ³
this.d = d;
}
public void doSomething(E e) { // μμ‘΄ κ΄κ³
e.trigger();
}
}
- A μ B λ ν©μ± κ΄κ³
- A μ C λ μ§ν© κ΄κ³
- A μ D λ μ°κ΄ κ΄κ³
- A μ E λ μμ‘΄ κ΄κ³
μΆκ°λ‘ μ΄λ ν μ¬μ€ κ΄κ³λ‘ λ°μ§λ€λ©΄ μλμ κ·Έλ¦Όκ³Ό κ°μ΄ λλλ κ²λ κ°λ₯νλ€
λκΈ