κ°μ²΄μ§ν₯μ μ¬μ€κ³Ό μ€ν΄ - 2-2. κΈ°κ³μ λΉμ ν κ°μ²΄
κ°μ²΄μ§ν₯μ μΈκ³λ₯Ό μ°½μ‘°νλ κ°λ°μλ€μ μ£Όλ μ 무λ κ°μ²΄μ μνλ₯Ό μ‘°ννκ³ κ°μ²΄μ μνλ₯Ό λ³κ²½νλ μΌ
- μνλ₯Ό μ‘°ννλ μμ μ 쿼리, μνλ₯Ό λ³κ²½νλ μμ μ λͺ λ Ήμ΄λΌκ³ ν©λλ€.
- κ°μ²΄κ° μΈλΆμ μ 곡νλ ν΄λμ λλΆλΆμ 쿼리, λͺ λ ΉμΌλ‘ ꡬμ±λμ΄ μμ΅λλ€.
μμ΄ν (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() λ‘μ ꡬνλμ΄ μλλ° μ΄μ²λΌ μΈλΆ κ°μ²΄μμ μμ μ μνλ₯Ό κΊΌλ΄μ΄ κ²μ¦νμ§ μκ³ μ€μ€λ‘μ μνμ λν κ²μ¦μ μ€μ€λ‘ μνν μ μλλ‘ μμ±ν¨μΌλ‘μ¨ μΊ‘μν μμΉμ μ§ν¬ μ μκ² μ΅λλ€.
<μ°Έκ³ μλ£>
κ°μ²΄μ§ν₯μ μ¬μ€κ³Ό μ€ν΄
μν€λΆμ€ IT Leaders μλ¦¬μ¦ 23κΆ. κ°μ²΄μ§ν₯μ΄λ 무μμΈκ°? μ΄ μ± μ μ΄ μ§λ¬Έμ λν λ΅μ μ°ΎκΈ° μν΄ λ Έλ ₯νκ³ μλ λͺ¨λ κ°λ°μλ₯Ό μν μ± μ΄λ€.
www.aladin.co.kr