1.1 ๋ชจ๋ธ๋ง
์ํํธ์จ์ด ๊ฐ๋ฐ์์ ๋ชจ๋ธ์ ์ญํ
- ์๋ก์ ํด์์ ๊ณต์ ํด ํฉ์๋ฅผ ์ด๋ฃจ๊ฑฐ๋ ํด์์ ํ๋น์ฑ์ ๊ฒํ
- ํ์ฌ์ ์์คํ ๋๋ ์์ผ๋ก ๊ฐ๋ฐํ ์์คํ ์ ์ํ๋ ๋ชจ์ต์ ๊ฐ์ํ
- ์์คํ ์ ๊ตฌ์กฐ์ ํ์๋ฅผ ๋ช ์ธํ ์ ์์ผ๋ฉฐ ์์คํ ์ ๊ตฌ์ถํ๋ ํ์ ์ ๊ณต
๋ชจ๋ธ์ ์ถ์ํ์ ๊ธฐ๋ฐ์ ๋๋ค.
ํน์ ๊ด์ ์์ ๊ด๋ จ์ด ์๋ ์ ์ ๋ถ๊ฐ์ํค๊ณ ๊ด๋ จ ์๋ ๋ฉด์ ๋ฌด์ํ๋ค.
ex) ๋ํ๊ต ํ์ฌ ์ง์ ์ ๋ฌด
-> ํ์์ ๋จธ๋ฆฌ์นด๋ฝ ์, ๋จธ๋ฆฌ ์๊น์ ํ์ฌ ์ง์๊ณผ ์ ํ ๋ฌด๊ดํ๊ธฐ ๋๋ฌธ์ ๊ด์ฌ์๋ ์์ญ์์ ์ ์ธ (์ถ์ํ์์ ์ ์ธ)
-> ํ์์ "ํ๋ฒ, ์ด๋ฆ, ์๊ฐ๊ณผ๋ชฉ"์ ํ์ฌ ์ง์ ํ์์ ์ด๋ฏ๋ก ๊ด์ฌ์์ญ์ ํฌํจ์ํจ๋ค.
์ฌ๋์ ๋ชจ๋ ์์ฑ์ ๊ฐ์ ธ๊ฐ๋ ๊ฒ์ด ์๋ ๊ด์ฌ์๋ ์์ญ์ ํ์ํ ์์ฑ๋ง ๊ฐ์ง๊ณ ๊ฐ๋ ๊ฒ (์ถ์ํ)
1.2 UML
๋ชจ๋ธ๋ง ์ธ์ด : ์ํ๋ ์์คํ
์ ๋ชจ๋ธ๋ก ํํํด์ฃผ๋ ์ธ์ด ex) UML
- UML์ ์๊ตฌ๋ถ์, ์์คํ ์ค๊ณ, ๊ตฌํ ๋ฑ์ ์์คํ ๊ฐ๋ฐ ๊ณผ์ ์์ ๊ฐ๋ฐ์ ์ฌ์ด์ ์์ฌ์ํต์ด ์ํํ๊ฒ ์ด๋ฃจ์ด์ง๋๋ก ํ์คํํ๋ ํตํฉ ๋ชจ๋ธ๋ง ์ธ์ด์ด๋ค.
UML์ ์์คํ ์ "๊ตฌ์กฐ"์ "๋์"์ ํํํ๋ 13๊ฐ ๋ค์ด์ด๊ทธ๋จ์ ์ ๊ณตํ๋ค.
์ด๋ฅผ ํตํด ๋ค์ํ ๊ด์ ์์ ์์คํ ์ ๋ชจ๋ธ๋ง ํ ์ ์๋ค.
1.3 ํด๋์ค ๋ค์ด์ด๊ทธ๋จ
์๊ฐ์ ๋ฐ๋ผ ๋ณํ์ง ์๋ ์์คํ ์ "์ ์ "์ธ ๋ฉด์ ๋ณด์ฌ์ฃผ๋ UML ๊ตฌ์กฐ ๋ค์ด์ด๊ทธ๋จ
ํด๋์ค ๋ค์ด์ด๊ทธ๋จ์ "์์คํ ์ ๊ตฌ์ฑํ๋ ํด๋์ค์ ๊ทธ๋ค ์ฌ์ด์ ๊ด๊ณ๋ฅผ ๋ณด์ฌ์ค๋ค"
์ฃผ์ ๊ตฌ์ฑ ์์ : ํด๋์ค ์ ๊ด๊ณ
ํด๋์ค
- ๋์ผํ ์์ฑ๊ณผ ํ์๋ฅผ ์ํํ๋ ๊ฐ์ฒด์ ์งํฉ
์ฒ ์์ ๋ฏธ๋ฏธ๋ ๊ฐ์์ ๋์ด๋ฅผ ๋ฌผ์ด๋ณผ ์ ์์ผ๋ฏ๋ก ์ค์ฒด๊ฐ ์๋ ๊ฐ์ฒด์ด๋ค. ํด๋์ค๋ ์ด๋ฌํ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ธฐ ์ํ ์ค๊ณ๋์ด๋ค.
=> ํด๋์ค๋ ๊ณตํต์ `์์ฑ`๊ณผ `์ฑ ์`์ ๊ฐ๋ ๊ฐ์ฒด๋ค์ ์งํฉ์ด์ ์ค์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ์ค๊ณ๋์ด๋ค.
UML๋ก ํํํ ํด๋์ค
๊ฐ์ฅ ์๋ ํด๋์ค ์ด๋ฆ์ ์ค๊ฐ ๋ถ๋ถ์๋ ํด๋์ค์ ํน์ง์ ๋ํ๋ด๋ ์์ฑ์ ๋ง์ง๋ง ๋ถ๋ถ์๋ ํด๋์ค๊ฐ ์ํํ๋ ์ฑ ์, ์ฆ ์ฐ์ฐ์ ๊ธฐ์ ํ๋ค.
---
+ : public
- : private
# : protected
~ : package
---
๊ธฐํธ๋ก ์ ๊ทผ ์ ์ด์๋ฅผ ๋ํ๋ธ๋ค.
1.3.2 ๊ด๊ณ
ํด๋์ค ํ๋๋ก๋ง ์์คํ ์ ๊ตฌ์ฑํ ์ ์๋ค.
๊ฐ์ฒด์งํฅ ์์คํ ์์๋ ์ฌ๋ฌ ๊ฐ์ ํด๋์ค๊ฐ ์๋ก ๊ด๊ณ๋ฅผ ๋งบ์ด ๊ธฐ๋ฅ์ ์ํํ๋ค.
์ด๋ฌํ ํด๋์ค ๊ฐ "๊ด๊ณ"๋ฅผ ํํํ ์ ์๋ค.
๊ด๊ณ | ์ค๋ช |
์ฐ๊ด ๊ด๊ณ (association) |
ํด๋์ค๋ค์ด ๊ฐ๋ ์ ์๋ก ์ฐ๊ฒฐ๋์์์ ๋ํ๋. ์ค์ ์ด๋ ํ์ดํ๋ก ํ์ํ๋ฉฐ ๋ณดํต ํ ํด๋์ค๊ฐ ๋ค๋ฅธ ํด๋์ค์ ๊ธฐ๋ฅ์ ์ ๊ณตํ ๋ ์ฌ์ฉ. |
์ผ๋ฐํ ๊ด๊ณ (generalization) |
๊ฐ์ฒด ์งํฅ์ ์์ ๊ด๊ณ๋ฅผ ๋ํ๋. ํ ํด๋์ค๊ฐ ๋ค๋ฅธ ํด๋์ค๋ฅผ ํฌํจํ๋ IS-A๊ด๊ณ ์ ์ฌ์ฉ. |
์งํฉ ๊ด๊ณ (composition, aggregation) |
ํด๋์ค๋ค ์์ ์ ์ฒด ๋๋ ๋ถ๋ถ ๊ฐ์ ๊ด๊ณ๋ฅผ ๋ํ๋ |
์์กด ๊ด๊ณ (dependency) |
์ฐ๊ด ๊ด๊ณ์ ๊ฐ์ด ํ ํด๋์ค๊ฐ ๋ค๋ฅธ ํด๋์ค์์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ๋๋ฅผ ๋ํ๋. ๋์ ์ฐจ์ด์ ์ ๋ ํด๋์ค์ ๊ด๊ณ๊ฐ ํ ๋ฉ์๋๋ฅผ ์คํํ๋ ๋์๊ณผ ๊ฐ์, ๋งค์ฐ ์งง์ ์๊ฐ๋ง ์ ์ง๋๋ค๋ ์ ์ด๋ค. |
์ค์ฒดํ ๊ด๊ณ (realization) |
์ฑ ์๋ค์ ์งํฉ์ธ ์ธํฐํ์ด์ค์ ์ด ์ฑ ์์ ๊ตฌํํ ๊ตฌํ ํด๋์ค ์ฌ์ด์ ๊ด๊ณ๋ฅผ ๋ํ๋ธ๋ค. |
๋ค์ค์ฑ ํ๊ธฐ
์ ์ ์๋ฌด๋ฐ ์ซ์๊ฐ ์์ผ๋ฉด ์ฐ๊ด๊ด๊ณ๊ฐ 1๋1 ๊ด๊ณ์ธ ๊ฒ์ด๋ค.
๊ต์์ ํ์์ ๋ณดํต ํ๋ช ์ ๊ต์์ ์ฌ๋ฌ๋ช ์ ํ์์ด ์ฐ๊ด๋๋ฏ๋ก 1๋๋ค ๊ด๊ณ์ด๋ค. ์ด๋ฅผ ๋ค์ค์ฑ ํ๊ธฐํ ์ ์๋ค.
์ ๋ค์ด์ด๊ทธ๋จ์ Studentํด๋์ค์ Course ํด๋์ค๊ฐ "์๊ฐํ๋ค"๋ผ๋ ์ฐ๊ด๊ด๊ณ๋ก ์ด์ด์ ธ์๋ค.
์ฌ๊ธฐ์ ํ์์ ๊ณผ๋ชฉ์ ์ฌ์ฉํ์ง๋ง ๊ณผ๋ชฉ์ ํ์์ ์ฌ์ฉํ์ง ์๋๋ค. (ํ์์ ๊ณผ๋ชฉ์ ์์ง๋ง ๊ณผ๋ชฉ์ ํ์์ ๋ชฐ๋ผ๋ ๋๋ค)
--> ๋จ๋ฐฉํฅ ์ฐ๊ด๊ด๊ณ
ํ์์ด ์์ ์ด ์๊ฐํ๋ ๊ณผ๋ชฉ์ ์๊ณ ๊ณผ๋ชฉ๋ ์์ ์ ์๊ฐํ๋ ํ์์ ์๋ค๋ฉด -> ์๋ฐฉํฅ ์ฐ๊ด๊ด๊ณ
1..* ์ด๋ฏ๋ก ํ์์ ๋ฐ๋์ 1๊ฐ ์ด์์ ๊ณผ๋ชฉ์ ์๊ฐํด์ผ ํ๋ค.
์ ๊ทธ๋ฆผ์ ๋ฌธ์ ๋ ํ ๊ณผ๋ชฉ์ด ํ๋์ ํ์๋ง ์๊ฐํ ์ ์๋ค๋ ์ ์ด๋ค. ์ด๋ฅผ ์ผ๋ฐ์ ์ธ ์๊ฐ ๊ด๊ณ๋ก ๊ฐ์ ํ๋ ค๋ฉด ๋ค์ค์ฑ์ ์์ ํด์ผ๋ง ํ๋ค.
[Student]1..*-------------------1..*[Course]
-> ์๋ฐฉํฅ ์ฐ๊ด๊ด๊ณ
๋ค ๋ ๋ค ์ฐ๊ด ๊ด๊ณ๋ ์์ฐ์ค๋ ์๋ฐฉํฅ ์ฐ๊ด๊ด๊ณ๊ฐ ๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด "์ฐ๊ด ํด๋์ค"๋ฅผ ์์์ผ ํ๋ค.
๋ ๊ฐ์ ๊ฐ์ฒด๊ฐ ์๋ก ์ฐ๊ด๋์ด ๋ํ๋์ผ ํ๋ ์ ๋ณด๊ฐ ์๋ค. ์๋ฅผ ๋ค์ด ์ฑ์ ์ ๋ณด์ด๋ค.
์ด๋ "ํ์"์ด๋ "๊ณผ๋ชฉ"์๋ง ์ํ๋ ๊ฒ์ด ์๋๋ผ์ ๋ ์ค ์ด๋์๋ ๋ ์ ์๋ค. (๋ ํด๋์ค ๊ฐ์ฒด๊ฐ ์กด์ฌํด์ผ๋ง ์๋ฏธ ์๋ ์ ๋ณด์)
์ฆ, ์ฑ์ ์ ๋ณด๋ ํด๋์ค์ ์์ฑ์ด ์๋ '์๊ฐํ๋ค'๋ผ๋ ์ฐ๊ด๊ด๊ณ์ ์์ฑ์ผ๋ก ๋ค๋ค์ ธ์ผํ๋ค!!
์ฐ๊ด ๊ด๊ณ๊ฐ ์๋ ๋ ํด๋์ค ์ฌ์ด์ ์์นํ๋ค.
์ฐ๊ด ํด๋์ค๋ ์ฐ๊ด ๊ด๊ณ์ ์ถ๊ฐํ ์์ฑ์ด๋ ํ์๊ฐ ์์ ๋ ์ฌ์ฉํ๋ค.
์ฐ๋ฆฌ๋ ์ฑ์ ํด๋์ค์ ์ถ๊ฐ์ ์ผ๋ก ํ์ํ "๊ณผ๋ชฉ ๊ฐ์ค๋ ๋, ์ฑ์ ์ ๋ณด"๋ฅผ ํฌํจ์ํฌ ์ ์๋ค.
์ด๋ ํ์์ ์ฌ๋ฌ ๊ณผ๋ชฉ์ ๋ํ ์ฑ์ ์ ๋ฐ์ ์ ์๊ณ ๊ณผ๋ชฉ ๋ํ ์ฌ๋ฌ ๊ฐ์ ์ฑ์ ์ ๋ง๋ค์ด ๋ด์ผ ํ๋ฏ๋ก
์ผ ๋ ๋ค (์ฑ์ ) ๋ค ๋ ์ผ ๊ด๊ณ๊ฐ ์ฑ๋ฆฝ๋๋ค.
์ผ๋ฐํ ๊ด๊ณ
์ผ๋ฐํ ๊ด๊ณ๋ ์์๊ณผ ๊ฐ๋ค. ์ด ๊ด๊ณ๋ 'is a kind of' ๊ด๊ณ๋ก ๋ํ๋ผ ์ ์๋ค.
๊ฐ์ ์ ํ์ ์ธํ๊ธฐ, TV, ์๊ธฐ์ธ์ฒ๊ธฐ์ "๊ณตํต์์ฑ, ์ฐ์ฐ"์ ์ ๊ณตํ๋ ํ์ด๋ค.
์ถ์ ๋ฉ์๋๋ ํด๋์ค ๋ค์ด์ด๊ทธ๋จ์์ ๊ธฐ์ธ์์ฒด๋ก ํํํ๋ค.
์งํฉ ๊ด๊ณ
์งํฉ ๊ด๊ณ๋ UML ์ฐ๊ด ๊ด๊ณ์ ํน๋ณ ๊ฒฝ์ฐ๋ก ์ ์ฒด์ ๋ถ๋ถ์ ๊ด๊ณ๋ฅผ ๋ช ํํ๊ฒ ๋ช ์ํ ๋ ์ฌ์ฉํ๋ค.
"์ง์ฝ(aggreagation)๊ณผ ํฉ์ฑ(composition)์ ๋ ์ข ๋ฅ๊ฐ ์กด์ฌํ๋ค"
์ง์ฝ ๊ด๊ณ๋ ํ ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ํฌํจํ๋ ๊ฒ์ ๋ํ๋ด๋ ๊ฒ -> ๋น ๋ง๋ฆ๋ชจ๋ก ํ์
๋ถ๋ถ์ ๋ํ๋ด๋ ๊ฐ์ฒด๋ฅผ ๋ค๋ฅธ ๊ฐ์ฒด์ ๊ณต์ ํ ์ ์๋ ๊ฒฝ์ฐ์ ์ง์ฝ ๊ด๊ณ๋ก ๋ํ๋. (๋ถ๋ถ ๊ฐ์ฒด๋ฅผ ๊ฐ์ฒด ์์ฑ ์ ์ฃผ์
ํ ๋)
// ์ง์ฝ ๊ด๊ณ ์ฝ๋
public class Computer{
private MainBoard mb;
private CPU c;
private Memory m;
public Computer(MainBoard mb, CPU c, Memory m){
this.mb = mb;
this.c = c;
this.m = m;
}
}
ํฉ์ฑ ๊ด๊ณ๋ ๋ถ๋ถ ๊ฐ์ฒด๊ฐ ์ ์ฒด ๊ฐ์ฒด์ ์ํ ๋ ๋ํ๋ด๋ ๊ฒ์ผ๋ก -> ์ฑ์์ง ๋ง๋ฆ๋ชจ
์ ์ฒด ๊ฐ์ฒด๊ฐ ์ฌ๋ผ์ง๋ฉด ๋ถ๋ถ ๊ฐ์ฒด๋ ์ฌ๋ผ์ง๋ ๊ฒ์ ๋ปํจ. (๋ถ๋ถ ๊ฐ์ฒด๋ฅผ ๊ฐ์ฒด ์์์ ์์ฑํ ๋)
//ํฉ์ฑ ๊ด๊ณ ์ฝ๋
public class Computer{
private MainBoard mb;
private CPU c;
private Memory m;
public Computer(){
this.mb = new MainBoard();
this.c = new CPU();
this.m = new Memory();
}
}
์ง์ฝ ๊ด๊ณ์ ํฉ์ฑ ๊ด๊ณ๋ฅผ ๊ตฌ๋ถํ๋ ค๋ฉด ์ ์ฒด ๊ฐ์ฒด์ ๋ถ๋ถ ๊ฐ์ฒด์ ๋ผ์ดํํ์ ์์กด์ฑ์ ์ดํด๋ด์ผํ๋ค.
์์กด ๊ด๊ณ
ํ ํด๋์ค๊ฐ ๋ค๋ฅธ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
- ํด๋์ค์ ์์ฑ์์ ์ฐธ์กฐํ ๋
- ์ฐ์ฐ์ ์ธ์๋ก ์ฌ์ฉ๋ ๋
- ๋ฉ์๋ ๋ด๋ถ์ ์ง์ญ ๊ฐ์ฒด๋ก ์ฐธ์กฐ๋ ๋
์์์ ์์กด ๊ด๊ณ์ ๋ํด "์งง์ ์๊ฐ ๋งบ์ด์ง๋ ๊ด๊ณ"๋ผ๊ณ ์ ์ํ์๋ค.
์ ๊ทธ๋ฆผ์์ ์ฌ๋๊ณผ ์๋์ฐจ๋ ์ค๋ ๊ธฐ๊ฐ ํ๋ ฅ ๊ด๊ณ๋ฅผ ํตํด ๊ธฐ๋ฅ์ ์ํํ๋ค. ๋ฐ๋ผ์ 'owns'๋ผ๋ ์ฐ๊ด ๊ด๊ณ๊ฐ ์ฑ๋ฆฝํ๊ฒ ๋๋ค.
public class Car{
...
public void fillGas(GasPump p){
p.getGas(amount);
}
}
ํ์ง๋ง, GasPump(์ฃผ์ ๊ธฐ)๋ ์๋์ฐจ๊ฐ ํน์ ์ฃผ์ ์๋ง ๊ฐ๋ ๊ฒ์ด ์๋๋ผ ์ฌ๋ฌ ์ฃผ์ ์๋ฅผ ์ด์ฉํ๋ฏ๋ก ๋งค๋ฒ ๋ฌ๋ผ์ง ์ ์๋ค.
๋ฐ๋ผ์ ๊ฐ์ฒด์งํฅ์์๋ ์ด๋ฌํ "์ฃผ์ ๊ธฐ"๋ฅผ ์ธ์ ๋๋ ์ง์ญ ๊ฐ์ฒด๋ก ์์ฑํด ๊ตฌํํ๋ค.
์ธํฐํ์ด์ค์ ์ค์ฒดํ ๊ด๊ณ
์ธํฐํ์ด์ค๋ "์ฑ ์"์ด๋ค.
-> ์ด๋ค ๊ฐ์ฒด์ "์ฑ ์"์ด๋ [๊ฐ์ฒด๊ฐ ํด์ผํ๋ ์ผ]๋ก์ ํด์ํ ์ ์์ผ๋ฉฐ ์ด๋ค ๊ฒฝ์ฐ์ [๊ฐ์ฒด๊ฐ ํ ์ ์๋ ์ผ]๋ก๋ ํด์ํ ์ ์๋ค.
์ฆ, ๊ฐ์ฒด๊ฐ ์ธ๋ถ์ ์ ๊ณตํ๋ ์๋น์ค๋ ๊ธฐ๋ฅ์ ๊ฐ์ฒด๊ฐ ์ํํ๋ ์ฑ ์์ด๋ค.
๋ณผ๋ฅจ์ ๋๊ฑฐ๋ ๋์ด๊ฑฐ๋ ์ค์ด๊ฑฐ๋ ๊ฐ์ ์ฑ ์์ ์ํํ๋ ๊ฒ(๊ธฐ๋ฅ)์ TV ๋ฟ๋ง ์๋๋ผ ํธ๋ํฐ, ์ปดํจํฐ ๋ฑ๋ ๊ฐ๋ฅํ๋ค.
๊ณตํต๋ ์ฑ ์์ ์ธํฐํ์ด์ค๋ฅผ ํตํด ์ ์ํ ์ ์๋ค.
์ธํฐํ์ด์ค๋ ์ค์ ์ฑ ์์ ์ํํ๋ ๊ฐ์ฒด๊ฐ ์๋๊ณ ์ค์ ์ํ ๊ฐ์ฒด๋ ๋ฐ๋ก ์กด์ฌํ๋ค.
UML์์๋ ์ด ๊ด๊ณ ํํ์ '์ ์ '์ผ๋ก ํํํ๋ค.
์ผ๋ฐํ ๊ด๊ณ๋ 'is a kind of' ๊ด๊ณ' ์ง๋ง ์ค์ฒดํ ๊ด๊ณ๋ 'can do this ๊ด๊ณ'์ด๋ค.