๐ Chapter 7: ํจ๊ป ๋ชจ์ผ๊ธฐ
- ๋งํด ํ์ธ๋ฌ๋ ๊ฐ์ฒด์งํฅ ์ค๊ณ ์์ ์กด์ฌํ๋ ์ธ ๊ฐ์ง ์ํธ ์ฐ๊ด๋ ๊ด์ ์ ๊ดํด ์ค๋ช ํ๋ค.
- ๊ฐ๋ ๊ด์ (Conceptual Perspective)์์ ์ค๊ณ๋ ๋๋ฉ์ธ ์์ ์กด์ฌํ๋ ๊ฐ๋ ๊ณผ ๊ฐ๋ ๋ค ์ฌ์ด์ ๊ด๊ณ๋ฅผ ํํํ๋ค. ์ด ๊ด์ ์ ์ฌ์ฉ์๊ฐ ๋๋ฉ์ธ์ ๋ฐ๋ผ๋ณด๋ ๊ด์ ์ ๋ฐ์ํ๋ค. ๋ฐ๋ผ์ ์ค์ ๋๋ฉ์ธ์ ๊ท์น๊ณผ ์ ์ฝ์ ์ต๋ํ ์ ์ฌํ๊ฒ ๋ฐ์ํ๋ ๊ฒ์ด ํต์ฌ์ด๋ค.
- ๋ช ์ธ ๊ด์ (Specification Perspective)์ ์ด๋ฅด๋ฉด ์ฌ์ฉ์์ ์์ญ์ธ ๋๋ฉ์ธ์ ๋ฒ์ด๋ ๊ฐ๋ฐ์์ ์์ญ์ธ ์ํํธ์จ์ด๋ก ์ด์ ์ด ์ฎ๊ฒจ์ง๋ค. ๋ช ์ธ ๊ด์ ์ ๋๋ฉ์ธ์ ๊ฐ๋ ์ด ์๋๋ผ ์ค์ ๋ก ์ํํธ์จ์ด ์์์ ์ด์ ์จ์ฌ๋ ๊ฐ์ฒด๋ค์ ์ฑ ์์ ์ด์ ์ ๋ง์ถ๋ค. ์ฆ, ๊ฐ์ฒด์ ์ธํฐ์ํผ์ค๋ฅผ ๋ฐ๋ผ๋ณด๊ฒ ๋๋ค.
- ๊ตฌํ ๊ด์ (Implementation Perspective)์ ์ค์ ์์ ์ ์ํํ๋ ์ฝ๋์ ์ฐ๊ด๋ผ ์๋ค. ๊ตฌํ ๊ด์ ์ ์ด์ ์ ๊ฐ์ฒด๋ค์ด ์ฑ ์์ ์ํํ๋ ๋ฐ ํ์ํ ๋์ํ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ด๋ค.
- ์ด ์ธ ๊ฐ์ง ๊ด์ ์ ์์๋๋ก ์ํํธ์จ์ด๋ฅผ ๊ฐ๋ฐํ๋ ๊ฒ์ด ์๋๋ผ, ๊ฐ๋ ๊ด์ , ๋ช ์ธ ๊ด์ , ๊ตฌํ ๊ด์ ์ ๋์ผํ ํด๋์ค๋ฅผ ์ธ ๊ฐ์ง ๋ค๋ฅธ ๋ฐฉํฅ์์ ๋ฐ๋ก๋ณด๋ ๊ฒ์ ์๋ฏธํ๋ค.
- ํด๋์ค๊ฐ ์์ ํ๋ ๊ฐ๋ ์ ๋๋ฉ์ธ ๊ด์ ์ ๋ฐ์ํ๋ค. ํด๋์ค์ ๊ณต์ฉ ์ธํฐํ์ด์ค๋ ๋ช ์ธ ๊ด์ ์ ๋ฐ์ํ๋ค. ํด๋์ค์ ์์ฑ๊ณผ ๋ฉ ์๋๋ ๊ตฌํ ๊ด์ ์ ๋ฐ์ํ๋ค.
- ๊ฐ์ฒด๊ฐ์ ๊ด๊ณ์์ ํฌํจ๋๋ค๋ ์ฌ์ค์ ๋ํ๋ด๋ ๊ฒ์ ํฌํจ ๊ด๊ณ ๋๋ ํฉ์ฑ ๊ด๊ณ๋ผ๊ณ ํ๋ค.
- ํ ํ์ ์ ์ธ์คํด์ค๊ฐ ๋ค๋ฅธ ํ์ ์ ์ธ์คํด์ค๋ฅผ ํฌํจํ์ง๋ ์์ง๋ง ์๋ก ์๊ณ ์์ด์ผ ํ ๊ฒฝ์ฐ ์ด๋ฅผ ์ฐ๊ด(association) ๊ด๊ณ๋ผ๊ณ ํ๋ค.
- ์ํํธ์จ์ด๊ฐ ๋์์ผ๋ก ํ๋ ์์ญ์ธ ๋๋ฉ์ธ์ ๋จ์ํํด์ ํํํ ๋ชจ๋ธ์ ๋๋ฉ์ธ ๋ชจ๋ธ์ด๋ผ ํ๋ค.
- ์ด ๋ค์ ๋จ๊ณ๋ ์ง๊ธ๊น์ง ๋ฐฐ์ด ์ง์์ ์ด๋์ํด์ ํ๋ ฅ์ ์ค๊ณํ๋ ๊ฒ์ผ๋ก ์ ์ ํ ๊ฐ์ฒด์๊ฒ ์ ์ ํ ์ฑ ์์ ํ ๋นํ๋ ๊ฒ์ด๋ค.
โ๏ธ ์ค๊ณํ๊ณ ๊ตฌํํ๊ธฐโ
- ํ๋ ฅ์ ์ค๊ณํ ๋๋ ๊ฐ์ฒด๊ฐ ๋ฉ์์ง๋ฅผ ์ ํํ๋ ๊ฒ์ด ์๋๋ผ ๋ฉ์์ง๊ฐ ๊ฐ์ฒด๋ฅผ ์ ํํ๊ฒ ํด์ผ ํ๋ค.
- ์ด์ ๋ฉ์์ง๋ฅผ ์์ ํ ๊ฐ์ฒด๋ ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํ ์ฑ ์์ ๋งก๊ฒ ๋๊ณ ๊ฐ์ฒด๊ฐ ์์ ํ๋ ๋ฉ์์ง๋ ๊ฐ์ฒด๊ฐ ์ธ๋ถ์ ์ ๊ณตํ๋ ๊ณต์ฉ ์ธํฐํ์ด์ค์ ํฌํจ๋๋ค.
- ์ด๋ ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํ ๊ฐ์ฒด๋ฅผ ์ฐพ๊ณ ์๋ค๋ฉด ๋จผ์ ๋๋ฉ์ธ ๋ชจ๋ธ ์์ ์ฑ ์์ ์ํํ๊ธฐ์ ์ ์ ํ ํ์ ์ด ์กด์ฌํ๋์ง ์ดํ๋ค. ์ ์ ํ ํ์ ๋ฅผ ๋ฐ๊ฒฌํ๋ค๋ฉด ์ฑ ์์ ์ํํ ๊ฐ์ฒด๋ฅผ ๊ทธ ํ์ ์ ์ธ์คํด์ค๋ก ๋ง๋ ๋ค.
- ๊ทธ ํ ๋ฉ์์ง๋ฅผ ์์ ํ ๊ฐ์ฒด ์ฆ, ์ฑ ์์ ๋๊ฐ ์ ธ์ผ ํ๋์ง๋ฅผ ๊ฒฐ์ ํ๋ค. ๋ง์ฝ ์ค์ค๋ก ํ ์ ์๋ ์ผ์ด ์๋ค๋ฉด ๋ค๋ฅธ ๊ฐ์ฒด์๊ฒ ์ด๋ฅผ ์์ฒญํ๋ค. ์ด ์์ฒญ์ด ๊ฐ์ฒด์์ ์ธ๋ถ๋ก ์ ์ก๋๋ ๋ฉ์์ง๋ฅผ ์ ์ํ๋ค. ๋ฐํ๊ฐ์ด ํ์ํ ๋ ์ ๋ฌ๋ฐ์ ๋ฐํ๊ฐ์ ์ป์ ์ ์๋ค.
- ์ด์ ๋จ์ ์ผ์ ๋ฉ์์ง๋ฅผ ์ ์ ํจ์ผ๋ก์จ ๊ฐ ๊ฐ์ฒด์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํ ๊ฐ๋ฅํ ์ ๋๋ก ์์ธํ๊ฒ ์ ์ ํ๋ ๊ฒ์ด๋ค.
๐ ์ธํฐํ์ด์ค ์ ๋ฆฌํ๊ธฐโ
- ๊ฐ์ฒด๊ฐ ์์ ํ ๋ฉ์์ง๊ฐ ๊ฐ์ฒด์ ์ธํฐํ์ด์ค๋ฅผ ๊ฒฐ์ ํ๋ค. ๋ฉ์์ง๊ฐ ๊ฐ์ฒด๋ฅผ ์ ํํ๊ณ , ์ ํ๋ ๊ฐ์ฒด๋ ๋ฉ์์ง๋ฅผ ์์ ์ ์ธํฐํ์ด์ค๋ก ๋ฐ์๋ค์ธ๋ค.
- ๊ฐ์ฒด๊ฐ ์ด๋ค ๋ฉ์์ง๋ฅผ ์์ ํ ์ ์๋ค๋ ๊ฒ์ ๊ทธ ๊ฐ์ฒด์ ์ธํฐํ์ด์ค ์์ ๋ฉ์์ง์ ํด๋นํ๋ ์คํผ๋ ์ด์ ์ด ์กด์ฌํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
- ๊ฐ์ฒด์ ํ์ ์ ๊ตฌํํ๋ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ ํด๋์ค๋ฅผ ์ด์ฉํ๋ ๊ฒ์ผ๋ก ํ๋ ฅ์ ํตํด ์๋ณ๋ ํ์ ์ ์คํผ๋ ์ด์ ์ ์ธ๋ถ์์ ์ ๊ทผ ๊ฐ๋ฅํ ๊ณต์ฉ ์ธํฐํ์ด์ค์ ์ผ๋ถ๋ผ๋ ์ฌ์ค์ด๋ค. ๋ฐ๋ผ์ ์ธํฐํ์ด์ค์ ํฌํจ๋ ์คํผ๋ ์ด์ ์ญ์ ์ธ๋ถ์์ ์ ๊ทผ ๊ฐ๋ฅํ๋๋ก ๊ณต์ฉ(public)์ผ๋ก ์ ์ธ๋ผ ์์ด์ผ ํ๋ค.
class Customer {
public void order(String menuName) {}
}
๐ ๊ตฌํํ๊ธฐโ
- ์คํผ๋ ์ด์ ์ ์ํํ๋ ๋ฐฉ๋ฒ์ ๋ฉ์๋๋ก ๊ตฌํํ๋ค.
- ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด์๊ฒ ๋ฉ์์ง๋ฅผ ์ ์กํ๊ธฐ ์ํด์๋ ๋จผ์ ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ๋ฅผ ์ป์ด์ผ ํ๋ค.
class Customer {
// Menu์ Barista์ ๊ฐ์ฒด๋ฅผ ์ ๋ฌ๋ฐ์ ์ฐธ์กฐ ๋ฌธ์ ํด๊ฒฐ
public void order(String menuName, Menu menu, Barista barista) {
// ๋ฉ์๋์ ๊ตฌํ์ ์ฑ์ด๋ค.
MenuItem menuItem = menu.choose(menuName);
Coffee coffee = barista.makeCoffee(menuItem);
// ...
}
}
Menu
๋menuName
์ ํด๋นํ๋MenuItem
์ ์ฐพ์์ผ ํ๋ ์ฑ ์์ด ์๋ค. ์ด ์ฑ ์์ ์ํํ๊ธฐ ์ํด์๋Menu
๊ฐ ๋ด๋ถ์ ์ผ๋กMenuItem
์ ๊ด๋ฆฌํ๊ณ ์์ด์ผ ํ๋ค.
class Menu {
private List<MenuItem> items;
public Menu (List<MenuItem> items) {
this.items = items;
}
public MenuItem choose (String name) {
for (MenuItem each: items) {
if (each.getName().equals(name)) {
return each;
}
}
return null;
}
}
Barista
๋MenuItem
์ ์ด์ฉํด์ ์ปคํผ๋ฅผ ์ ์กฐํ๋ค.
class Barista {
public Coffee makeCoffee (MenuItem menuItem) {
Coffee coffee = new Coffee(menuItem);
return coffee;
}
}
Coffee
๋ ์๊ธฐ ์์ ์ ์์ฑํ๊ธฐ ์ํ ์์ฑ์๋ฅผ ์ ๊ณตํ๋ค.
class Coffee {
private String name; // ์ปคํผ ์ด๋ฆ
private int price; // ๊ฐ๊ฒฉ
public Coffee (MenuItem menuItem) {
this.name = menuItem.getName();
this.price = menItem.cost();
}
}
MenuItem
์getName()
๊ณผcost()
๋ฉ์์ง์ ์๋ตํ ์ ์๋๋ก ๋ฉ์๋๋ฅผ ๊ตฌํํด์ผ ํ๋ค.
public class MenuItem {
private String name;
private int price;
public MenuItem (String name, int price) {
this.name = name;
this.price = price;
}
public int cost() {
return price;
}
public String getName() {
return name;
}
}
โ๏ธ ์ฝ๋์ ์ธ ๊ฐ์ง ๊ด์ โ
๐ ์ฝ๋๋ ์ธ ๊ฐ์ง ๊ด์ ์ ๋ชจ๋ ์ ๊ณตํด์ผ ํ๋ค.โ
- ๊ฐ๋
๊ด์ ์์ ์ฝ๋๋ฅผ ๋ฐ๋ผ๋ณด๋ฉด
Customer
,Menu
,MenuItem
,Barista
,Coffee
ํด๋์ค๊ฐ ๋ณด์ธ๋ค. ์ด ํด๋์ค๋ค์ ์ปคํผ ์ ๋ฌธ์ ๋๋ฉ์ธ์ ๊ตฌ์ฑํ๋ ์ค์ํ ๊ฐ๋ ๊ณผ ๊ด๊ณ๋ฅผ ๋ฐ์ํ๋ค. - ๋ช
์ธ ๊ด์ ์ ํด๋์ค์ ์ธํฐํ์ด์ค๋ฅผ ๋ฐ๋ผ๋ณธ๋ค. ํด๋์ค์
public
๋ฉ์๋๋ ๋ค๋ฅธ ํด๋์ค๊ฐ ํ๋ ฅํ ์ ์๋ ๊ณต์ฉ ์ธํฐํ์ด์ค๋ฅผ ๋๋ฌ๋ธ๋ค. ๊ฐ์ฒด์ ์ธํฐํ์ด์ค๋ ์์ ํ๊ธฐ ์ด๋ ต๋ค. ์ต๋ํ ๋ณํ์ ์์ ์ ์ธ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค๊ธฐ ์ํด์๋ ์ธํฐํ์ด์ค๋ฅผ ํตํด ๊ตฌํ๊ณผ ๊ด๋ จ๋ ์ธ๋ถ ์ฌํญ์ด ๋๋ฌ๋์ง ์๊ฒ ํด์ผ ํ๋ค. - ๊ตฌํ ๊ด์ ์ ํด๋์ค์ ๋ด๋ถ ๊ตฌํ์ ๋ฐ๋ผ๋ณธ๋ค. ํด๋์ค์ ๋ฉ์๋์ ์์ฑ์ ๊ตฌํ์ ์ํ๋ฉฐ ๊ณต์ฉ ์ธํฐํ์ด์ค์ ์ผ๋ถ๊ฐ ์๋๋ค. ๋ฐ๋ผ์ ๋ฉ์๋์ ๊ตฌํ๊ณผ ์์ฑ์ ๋ณ๊ฒฝ์ ์์น์ ์ผ๋ก ์ธ๋ถ์ ๊ฐ์ฒด์๊ฒ ์ํฅ์ ๋ฏธ์ณ์๋ ์ ๋๋ค. ์ด๊ฒ์ ๋ฉ์๋์ ์์ฑ์ด ์ฒ ์ ํ๊ฒ ํด๋์ค ๋ด๋ถ๋ก ์บก์ํ๋ผ์ผ ํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
๐ ๋๋ฉ์ธ ๊ฐ๋ ์ ์ฐธ์กฐํ๋ ์ด์ โ
- ๋ฉ์์ง๊ฐ ์์ ๋ ๊ทธ ๋ฉ์์ง๋ฅผ ์์ ํ ๊ฐ์ฒด๋ฅผ ์ ํํ๋ ๋ฐฉ๋ฒ ์ค ์ฒซ ๋ฒ์งธ ์ ๋ต์ ๋๋ฉ์ธ ๊ฐ๋ ์ค์์ ๊ฐ์ฅ ์ ์ ํ ๊ฒ์ ์ ํํ๋ ๊ฒ์ด๋ค.
- ๋๋ฉ์ธ ๊ฐ๋ ์์์ ์ ์ ํ ๊ฐ์ฒด๋ฅผ ์ ํํ๋ ๊ฒ์ ๋๋ฉ์ธ์ ๋ํ ์ง์์ ๊ธฐ๋ฐ์ผ๋ก ์ฝ๋์ ๊ตฌ์กฐ์ ์๋ฏธ๋ฅผ ์ฝ๊ฒ ์ ์ถํ ์ ์๊ฒ ํ๋ค.
๐ ์ธํฐํ์ด์ค์ ๊ตฌํ์ ๋ถ๋ฆฌํ๋ผโ
- ๋ช ์ธ ๊ด์ ์ ํด๋์ค์ ์์ ์ ์ธ ์ธก๋ฉด์ ๋๋ฌ๋ด์ผ ํ๋ค.
- ๊ตฌํ ๊ฐ์ ์ ํด๋์ค์ ๋ถ์์ ํ ์ธก๋ฉด์ ๋๋ฌ๋ด์ผ ํ๋ค.
- ๋ช ์ธ ๊ด์ ์ด ์ค๊ณ๋ฅผ ์ฃผ๋ํ๊ฒ ํ๋ฉด ์ค๊ณ์ ํ์ง์ด ํฅ์๋ ์ ์๋ค.