๊ฐ์ฒด์งํฅ์ ์ฌ์ค๊ณผ ์คํด - 2-2. ๊ธฐ๊ณ์ ๋น์ ํ ๊ฐ์ฒด
by rlaehddnd0422๊ฐ์ฒด์งํฅ์ ์ธ๊ณ๋ฅผ ์ฐฝ์กฐํ๋ ๊ฐ๋ฐ์๋ค์ ์ฃผ๋ ์ ๋ฌด๋ ๊ฐ์ฒด์ ์ํ๋ฅผ ์กฐํํ๊ณ ๊ฐ์ฒด์ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ์ผ
- ์ํ๋ฅผ ์กฐํํ๋ ์์ ์ ์ฟผ๋ฆฌ, ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ์์ ์ ๋ช ๋ น์ด๋ผ๊ณ ํฉ๋๋ค.
- ๊ฐ์ฒด๊ฐ ์ธ๋ถ์ ์ ๊ณตํ๋ ํด๋์ ๋๋ถ๋ถ์ ์ฟผ๋ฆฌ, ๋ช ๋ น์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
์์ดํ (Eiffel)์ด๋ผ๋ ์ธ์ด๋ฅผ ๋ง๋ ๋ฒํธ๋๋ ๋ง์ด์ด๋ ๊ฐ์ฒด๋ฅผ ์ฐ๋ฆฌ๊ฐ ์น์ํ๊ฒ ์ฌ์ฉํ๋ ๊ธฐ๊ณ์ ๋น๋์ด ๋น์ ํ์ฌ ์ค๋ช ํ๊ณ ์์ต๋๋ค.
์ด๋ค ์ธก๋ฉด์์ ๊ฐ์ฒด๋ฅผ ๊ธฐ๊ณ์ ๋น๋์ด ๋น์ ํ์๋์ง ์๋ฆฌ์ค ๊ฐ์ฒด๋ฅผ ํตํด ํ ๋ฒ ์์๋ณด๊ฒ ์ต๋๋ค.
๊ธฐ๊ณ์ ํ๋จ๋ถ์๋ '์๋ฃ๋ฅผ ๋ง์๋ค', '์ผ์ดํฌ๋ฅผ ๋จน๋ค', '๋ถ์ฑ์งํ๋ค', '๋ฒ์ฏ์ ๋จน๋ค', '๋ฌธ์ ํต๊ณผํ๋ค'์ ๊ฐ์ 4๊ฐ์ง์ ๋ฒํผ๊ณผ, 'ํค', '์์น'๋ผ๋ ๋ฒํผ์ด ์์ต๋๋ค.
- 'ํค','์์น'์ ๋ํ ๋ฒํผ ํด๋ฆญ : ํ์ฌ ์ํ์ ๋ํ ์ ๋ณด๋ฅผ ์๋จ์ ๋์คํ๋ ์ด์ ์ถ๋ ฅ
- ๋์์ ๋ํ 4๊ฐ์ง ๋ฒํผ ํด๋ฆญ : ๊ฐ ํ์์ ๋ํ ๋ด๋ถ ๋์์ผ๋ก ์ํ(ํค, ์์น)๋ฅผ ๋ณ๊ฒฝ
1. ์ฌ์ฉ์๊ฐ ๊ฐ์ฒด ๊ธฐ๊ณ์ ๋ฒํผ์ ๋๋ฌ ์ํ๋ฅผ ๋ณ๊ฒฝ, ์กฐํ๋ฅผ ์์ฒญํ๋ ๊ฒ์ ๊ฐ์ฒด์ ํ๋์ ์ ๋ฐํ๊ธฐ ์ํด ๋ฉ์์ง๋ฅผ ์ ์กํ๋ ๊ฒ๊ณผ ์ ์ฌํ๋ค๊ณ ๋ณผ ์ ์์ต๋๋ค.
๋ฒํผ์ ๋๋ฅด๋ ๊ฒ์ ๊ธฐ๊ณ์ ์ฌ์ฉ์์ง๋ง, ๋ฒํผ์ ๋ฐ๋ผ ์ด๋ค ๋ฐฉ์์ผ๋ก ๋์ํ๋ ์ง๋ ๊ธฐ๊ณ๊ฐ ์ค์ค๋ก ๊ฒฐ์ ํ๋ค๋ ์ธก๋ฉด์์ ์ ๋ฌ๋ ๋ฉ์์ง์ ๋ฐ๋ผ ์ค์ค๋ก ํ๋จํ๊ณ ๊ฒฐ์ ํ๋ ์์จ์ ์ธ ๊ฐ์ฒด์ ํน์ฑ์ ์ ํํ๊ฒ ๋ฌ์ฌํ๊ณ ์์ต๋๋ค.
๋ช ๋ น๊ณผ ์ฟผ๋ฆฌ๋ ๊ฐ์ฒด๊ฐ ์ธ๋ถ์ ์ ๊ณตํ๋ ํ๋์ด๋ผ๋ ์ ์ ์ฃผ๋ชฉํด์ผ ํฉ๋๋ค.
๋ค์ ๋งํด, ์ฌ์ฉ์๋ ์๋ฆฌ์ค ๊ฐ์ฒด์ ์ธํฐํ์ด์ค๋ฅผ ํตํด์๋ง ๊ฐ์ฒด์ ์ ๊ทผํ ์ ์๋ค๋ ๊ฒ.
์ฌ๊ธฐ์ ์ค์ํ ์ ์ ๋ช ๋ น ๋ฒํผ๊ณผ ์ฟผ๋ฆฌ ๋ฒํผ ์ด์ธ์ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ํตํด์๋ ์๋ฆฌ์ค ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ผ๋ก ์บก์ํ๋ฅผ ๊ฐ์กฐํฉ๋๋ค. ( ๋ฒํผ์ ํตํด ์ํ์ ํ์๊ฐ ํ๋์ ๋จ์๋ก ์บก์ํ ๋๋ค๋ ์ ์์ ๊ฐ์ฒด์ ์ ์๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํํ )
2. ๊ธฐ๊ณ ์์ ๋ฅผ ์ด์ฉํ๋ฉด ๊ฐ์ฒด์ ์๋ณ์ ์ญ์ ํจ๊ณผ์ ์ธ ์ค๋ช ์ด ๊ฐ๋ฅํฉ๋๋ค.
๋ง์ฝ ์๋ฆฌ์ค ๊ธฐ๊ณ๊ฐ ๋ ๊ฐ ์กด์ฌํ๊ณ ๋ ๊ธฐ๊ณ์ ์ด๊ธฐ ํค์ ๊ฐ์ 130, ์์น์ ๊ฐ์ 0์ด๋ผ๊ณ ๊ฐ์ ํด๋ด ์๋ค.
๋ ๊ธฐ๊ณ์ ํค์ ์์น ๋ฒํผ์ ํด๋ฆญํ๋ค๋ฉด ์ด๊ธฐ๊ฐ์ ์๊ฑฐํ์ฌ ๋ ๊ธฐ๊ณ ๋ชจ๋ 130, 0์ด๋ผ๋ ๊ฐ์ด ๋์คํ๋ ์ด์ ์ถ๋ ฅ๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด ๋ ๊ธฐ๊ณ๋ ๋์ผํ ํ๋์ ๊ธฐ๊ณ์ผ๊น์? ๊ฒฐ์ฝ ๊ทธ๋ ์ง ์์ต๋๋ค. ์ํ๋ ๋์ผํ ์ง๋ผ๋ ๋ ๊ธฐ๊ณ๋ ์๋ก ๊ตฌ๋ถ์ด ๊ฐ๋ฅํ ๋ ๋ฆฝ์ ์ธ ๊ธฐ๊ณ์ด๊ธฐ ๋๋ฌธ์ ์ด ๋ ๊ธฐ๊ณ๊ฐ ๋์ผํ๋ค๊ณ ๋ณผ ์๋ ์๋ค๋ ๊ฒ์ ๋๋ค.
3. ๊ธฐ๊ณ ์์ ๋ฅผ ํตํด ๊ฐ์ฒด ๊ฐ์ ๋ฉ์์ง๋ฅผ ํตํ ํ๋ ฅ ์ญ์ ์ค๋ช ์ด ๊ฐ๋ฅํฉ๋๋ค.
์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์๋ฆฌ์ค์ ์๋ฃ๋ฅผ ๊ธฐ๊ณ์ ์์ ํด๋ณด์์ต๋๋ค.
- ์๋ฃ ๊ด์ ์์๋ '๋ง์ ์ง๋ค'๋ผ๋ ๋ช ๋ น ๋ฒํผ์ ํตํด ์์ ์ ์ํ์ธ '์'์ ์กฐ์ ํ ์ ์๊ณ , ์์ ์ '์'์ ์ถ๋ ฅํ ์ ์๋ ๋ฒํผ์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
๋ง์ฝ ์๋ฆฌ์ค ๊ธฐ๊ณ์ '์๋ฃ ๋ง์๊ธฐ' ๋ฒํผ์ ํด๋ฆญํ๋ฉด, ๊ฐ ๊ธฐ๊ณ๋ค์ ์๋์ ๊ฐ์ ๋ด๋ถ ๋งค์ปค๋์ฆ์ผ๋ก ๋์ํ๊ฒ ๋ฉ๋๋ค.
1) ์๋ฆฌ์ค ๊ธฐ๊ณ๋ ๋งํฌ๋ ์๋ฃ์ ์์ ํ์ธํ๊ณ ์์ด ์ถฉ๋ถํ๋ฉด ์์ ์ ํค๋ฅผ ์ค์ ๋๋ค.
2) ๋งํฌ๋ ์๋ฃ์ '๋ง์ ์ง๋ค' ๋ฒํผ์ด ๋๋ ค์ง๋๋ก ์์ฒญ์ ์ ์กํ๊ฒ ๋ฉ๋๋ค.
3) ์๋ฃ ๊ธฐ๊ณ๋ '๋ง์ ์ง๋ค' ๋ฒํผ์ด ๋๋ ค์ง๋๋ก ์์ฒญ์ ๋ฐ์ ์์ ์ ์์ ์ค์ ๋๋ค.
๊ฐ์ฒด์งํฅ ํจ๋ฌ๋ค์ ๊ด์ ์์ ์ด๊ฒ์ '์๋ฃ ๋ง์๊ธฐ'๋ผ๋ ๋ฉ์์ง๋ฅผ ์์ ํ ์จ๋ฆฌ์ค ๊ฐ์ฒด๊ฐ ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํ๋ ๋์ค ์๋ฃ ๊ฐ์ฒด์๊ฒ '๋ง์ ์ง๋ค' ๋ผ๋ ๋ฉ์์ง๋ฅผ ์ ์กํ ๊ฒ๊ณผ ๋์ผํฉ๋๋ค.
์ฆ, ๋งํฌ๋ฅผ ํตํด ์ฐ๊ฒฐ๋ ๋ ๊ฐ์ฒด๊ฐ ๋ฉ์์ง ์ ์ก์ ํตํด ํ๋ ฅํ๊ณ ์๋ ๊ฒ์ ๋๋ค.
์ด์ฒ๋ผ ๊ฐ์ฒด๋ฅผ ๊ธฐ๊ณ๋ก์ ๋ฐ๋ผ๋ณด๋ ๊ด์ ์ ์ํ, ํ๋, ์๋ณ์์ ๋ํ ์๊ฐ์ ์ธ ์ด๋ฏธ์ง๋ฅผ ์ ๊ณตํ๊ณ ์บก์ํ์ ๋ฉ์์ง๋ฅผ ํตํ ํ๋ ฅ๊ด๊ณ๋ฅผ ๋งค์ฐ ํจ๊ณผ์ ์ผ๋ก ์ค๋ช ํ๊ณ ์์ต๋๋ค.
์ด์ ์ด ์๋ฆฌ์ค ๊ฐ์ฒด์ ๋ํ ๊ธฐ๊ณ๋ฅผ ์ค๊ณํด๋ณด๋ฉฐ ์ค๋ช ์ ๋ง์น๊ฒ ์ต๋๋ค.
package chapter2.machine;
public interface Alice {
void drink();
void eatCake();
void fan();
void eatMushroom(String part);
void passDoor();
void showHeight();
void showPosition();
}
- ๋จผ์ ๋ฒํผ์ ๋๋ค. ์ธํฐํ์ด์ค๋ ๊ธฐ๊ณ์ ๋ฒํผ์ด๋ผ๊ณ ์๊ฐํ์๋ฉด ๋๋๋ฐ์. ์ด ๋ฒํผ์ ๋ํ ๋์์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ตฌํ์ฒด์ ์์ฑํ์ฌ, ๊ธฐ๊ณ์ ๋ด๋ถ ๋์ ๋งค์ปค๋์ฆ์ ๊ตฌํํ ์ ์์ต๋๋ค.
- ์ด์ฒ๋ผ ์ธํฐํ์ด์ค๋ ๊ธฐ๊ณ์ ์ธ์ ์ธ ๋ถ๋ถ๋ค์ ์ค๊ณํ ์ค๊ณ๋๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค.
public class AliceImpl implements Alice {
private Integer height;
private Integer position;
private Drink drink;
public AliceImpl() {
this.height = 130;
this.position = 0;
this.drink = new Drink(100);
}
@Override
public void drink() {
if (drink.isRemainAmount()) {
drink.decrease(10);
this.height -= 100;
}
}
@Override
public void eatCake() {
this.height += 150;
}
@Override
public void fan() {
this.height -= 20;
}
@Override
public void eatMushroom(String part) {
if (part.equals("left")) {
this.height += 10;
}
this.height -= 10;
}
@Override
public void passDoor() {
if (this.height < 40) {
this.position = 1;
}
}
@Override
public void showHeight() {
System.out.println(this.height);
}
@Override
public void showPosition() {
System.out.println(this.position);
}
}
- ๋ค์์ ์๋ฆฌ์ค ๊ธฐ๊ณ์ ๋ด๋ถ์ ๋ํ ์ค๊ณ ํด๋์ค์ ๋๋ค.
- ์ด์ฒ๋ผ ์ธํฐํ์ด์ค์ ์์ฑํ ์ค๊ณ๋๋ก ๋ด๋ถ์ ๋์์ ๊ตฌํํ๋ค๊ณ ๋ณผ ์ ์์ต๋๋ค.
public class Drink {
private Integer amount;
public Drink(Integer amount) {
this.amount = amount;
}
public void decrease(Integer amount) {
this.amount -= amount;
}
public boolean isRemainAmount() {
if (amount >= 10) {
return true;
}
return false;
}
}
- ๋ง์ง๋ง์ผ๋ก ์๋ฃ ๊ฐ์ฒด์ ๋ํ ์ค๊ณ๋์ ๋๋ค.
- ์๋ฆฌ์ค ๊ฐ์ฒด์ ํ๋ ฅ์ ํ๋ ๊ฐ์ฒด์
๋๋ค.
- '๋ง์ ์ง๋ค'๋ผ๋ ๋ฒํผ ํด๋ฆญ์ ์์ฒญ์ ์ ์ก๋ฐ์ ์์ ์ ์์ ์ค์ด๋๋ก ๋์(ํ์)ํ๋ ๊ธฐ๋ฅ์ด decrease() ๋ก์ ๊ตฌํ๋์ด ์์ต๋๋ค.
- ์๋ฆฌ์ค ๊ฐ์ฒด๊ฐ '์๋ฃ๋ฅผ ๋ง์๋ค'๋ผ๋ ๋์์ ์ํํ ์ ์๋ ์ง ์์ ์ ์ํ๋ฅผ ๊ฒ์ฆํ๋ ๊ธฐ๋ฅ์ด isRemainAmount() ๋ก์ ๊ตฌํ๋์ด ์๋๋ฐ ์ด์ฒ๋ผ ์ธ๋ถ ๊ฐ์ฒด์์ ์์ ์ ์ํ๋ฅผ ๊บผ๋ด์ด ๊ฒ์ฆํ์ง ์๊ณ ์ค์ค๋ก์ ์ํ์ ๋ํ ๊ฒ์ฆ์ ์ค์ค๋ก ์ํํ ์ ์๋๋ก ์์ฑํจ์ผ๋ก์จ ์บก์ํ ์์น์ ์งํฌ ์ ์๊ฒ ์ต๋๋ค.
<์ฐธ๊ณ ์๋ฃ>
'๐ Backend > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ธ๋ก๊ทธ์ ์ ๋ณด
Study Repository
rlaehddnd0422