๋คํ์ฑ, DI ์ฐ์ต
๊ณผ์ ๊ฐ์ โ๏ธ
- ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ(OOP)์ ์ธํฐํ์ด์ค๋ฅผ ํ์ฉํ์ฌ ํน์ ์ข ๋ฅ์ ๋๋ฌผ๋ง ๊ด๋ฆฌํ ์ ์๋ MyHouse ํด๋์ค๋ฅผ ๊ตฌํํฉ๋๋ค.
- ๊ฐ์ฒด ๊ฐ์ ๊ด๊ณ๋ฅผ ์ค๊ณํ๊ณ , ํ์ ์์ ์ฑ์ ํ๋ณดํ๋ ๋ฐฉ๋ฒ์ ํ์ตํฉ๋๋ค.
โญ์๊ตฌ์ฌํญโญ
1. Animal ์ธํฐํ์ด์ค ๊ตฌํ
- ๋ชจ๋ ๋๋ฌผ์ด ๊ตฌํํด์ผ ํ๋ ๊ณตํต ๊ธฐ๋ฅ์ ์ ์ํฉ๋๋ค.
- ๋ค์ ๋ฉ์๋๋ฅผ ํฌํจํด์ผ ํฉ๋๋ค.
void makeSound(); // ๋๋ฌผ์ด ๋ด๋ ์๋ฆฌ๋ฅผ ์ถ๋ ฅ
void eat(String food); // ํน์ ์์์ ๋จน๋ ๋์์ ์ถ๋ ฅ
boolean isHungry(); // ๋๋ฌผ์ด ๋ฐฐ๊ณ ํ ์ํ์ธ์ง ๋ฐํ
2. Dog์ Cat ํด๋์ค ๊ตฌํ
- Animal ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค์ ๋๋ค.
- ๊ฐ ํด๋์ค๋ ๋ค์ ๋์์ ์ํํฉ๋๋ค.
- makeSound : ๋๋ฌผ์ด ๋ด๋ ์๋ฆฌ๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
- Dog : "Bark!"
- Cat : "Meow!"
- eat : ๋๋ฌผ์ด ์์์ ๋จน๋ ์ํ๋ฅผ ์ถ๋ ฅํ๋ฉฐ, ๋ฐฐ๊ณ ํ ์ํ๋ฅผ ์
๋ฐ์ดํธํฉ๋๋ค.
- ๋ฐฐ๊ณ ํ๋ฉด ์์์ ๋จน๊ณ ๋ฐฐ๊ณ ํ ์ํ๊ฐ false๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค.
- ๋ฐฐ๊ณ ํ์ง ์์ผ๋ฉด ์์์ ๊ฑฐ๋ถํ๋ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
- isHungry : ๋๋ฌผ์ด ๋ฐฐ๊ณ ํ์ง ์ฌ๋ถ๋ฅผ ๋ฐํํฉ๋๋ค.
- makeSound : ๋๋ฌผ์ด ๋ด๋ ์๋ฆฌ๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
3. MyHouse ํด๋์ค ๊ตฌํ
- ํน์ ๋๋ฌผ ํ ์ข ๋ฅ๋ง ๊ด๋ฆฌํ๋ ํด๋์ค์ ๋๋ค.
- ๋ค์ ๊ธฐ๋ฅ์ ํฌํจํด์ผ ํฉ๋๋ค.
- ์์ฑ์ : ํน์ ๋๋ฌผ ๊ฐ์ฒด๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ ๊ด๋ฆฌํฉ๋๋ค.
- makeAnimalSound : ๊ด๋ฆฌํ๋ ๋๋ฌผ์ ์๋ฆฌ๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
- feedAnimal : ๊ด๋ฆฌํ๋ ๋๋ฌผ์๊ฒ ์์์ ์ ๊ณตํฉ๋๋ค. ๋๋ฌผ์ ๋ฐฐ๊ณ ํ ์ํ๋ฅผ ์ ๋ฐ์ดํธํด์ผ ํฉ๋๋ค.
- isHungry : ๊ด๋ฆฌํ๋ ๋๋ฌผ์ด ๋ฐฐ๊ณ ํ ์ํ ์ฌ๋ถ๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
4. Main ํด๋์ค ๊ตฌํ
- Main ํด๋์ค์์ ๋ค์ ์์ ์ ์ํํฉ๋๋ค.
- Dog์ Cat ๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค.
- MyHouse ๊ฐ์ฒด๋ฅผ ๊ฐ๊ฐ Dog์ Cat์ผ๋ก ์์ฑํฉ๋๋ค.
- ์๋ ์๋๋ฆฌ์ค๋ฅผ ์์ฑํฉ๋๋ค.
- ๊ฐ ๋๋ฌผ์ ์๋ฆฌ ๋ด๊ธฐ
- ๊ฐ ๋๋ฌผ์ ๋ฐฐ๊ณ ํ์ง ์ฌ๋ถ ํ์ธ
- ๊ฐ ๋๋ฌผ์๊ฒ ์์์ ๋จน์ธ๋ค.
- ๊ฐ ๋๋ฌผ์๊ฒ ์์์ ๋จน์ธ๋ค. (๋ฐ๋ณต)
- ๊ฐ ๋๋ฌผ์ ๋ฐฐ๊ณ ํ์ง ์ฌ๋ถ ํ์ธ
๊ตฌํ ๊ฒฐ๊ณผ ์์ โ๏ธ
Dog house:
Dog says: Bark! // ์๋ฆฌ ๋ด๊ธฐ
Dog is hungry. // ๋ฐฐ๊ณ ํ์ง ํ์ธ
Dog eats Bone. // Bone ๋จน์ด๊ธฐ
Dog is not hungry. // Bone ๋จน์ด๊ธฐ
Dog is not hungry. // ๋ฐฐ๊ณ ํ์ง ํ์ธ
Cat house:
Cat says: Meow! // ์๋ฆฌ ๋ด๊ธฐ
Cat is hungry. // ๋ฐฐ๊ณ ํ์ง ํ์ธ
Cat eats Fish. // Fish ๋จน์ด๊ธฐ
Cat is not hungry. // Fish ๋จน์ด๊ธฐ
Cat is not hungry. // ๋ฐฐ๊ณ ํ์ง ํ์ธ
๋ด๊ฐ ์์ฑํ ์ฝ๋ โ๏ธ
Animal ์ธํฐํ์ด์ค
package Di_IoC;
public interface Animal {
/**
* ๋๋ฌผ์ด ๋ด๋ ์๋ฆฌ ์ถ๋ ฅ
*/
void makeSound();
/**
* ํน์ ์์์ ๋จน๋ ๋์์ ์ถ๋ ฅ
* @param food - ๋๋ฌผ์ด ๋จน๋ ํน์ ์์
*/
void eat(String food);
/**
* ๋๋ฌผ์ด ๋ฐฐ๊ณ ํ ์ํ์ธ์ง ๋ฐํ
* @return true/false
*/
void isHungry();
}
Dog ํด๋์ค
package Di_IoC;
public class Dog implements Animal{
private boolean dogIsHungry = true;
@Override
public void makeSound() {
System.out.println("Dog says : Bark!");
}
@Override
public void eat(String food) {
if (dogIsHungry) {
System.out.println("Dog eats " + food + ".");
this.dogIsHungry = false;
} else {
System.out.println("Dog is not hungry.");
}
}
@Override
public void isHungry() {
if (dogIsHungry) {
System.out.println("Dog is Hungry.");
} else {
System.out.println("Dog is not hungry.");
}
}
}
Cat ํด๋์ค
package Di_IoC;
public class Cat implements Animal{
private boolean catIsHungry = true;
@Override
public void makeSound() {
System.out.println("Cat says : Meow!");
}
@Override
public void eat(String food) {
if (catIsHungry) {
System.out.println("Cat eats " + food + ".");
this.catIsHungry = false;
} else {
System.out.println("Cat is not hungry.");
}
}
@Override
public void isHungry() {
if (catIsHungry) {
System.out.println("Dog is Hungry.");
} else {
System.out.println("Dog is not hungry.");
}
}
}
MyHouse ํด๋์ค
package Di_IoC;
public class MyHouse {
private Animal animal;
public MyHouse(Animal animal) {
this.animal = animal;
}
public void makeAnimalSound() {
this.animal.makeSound();
}
public void feedAnimal(String food) {
this.animal.eat(food);
}
public void isHungry() {
this.animal.isHungry();
}
}
Main ํด๋์ค
package Di_IoC;
public class Main {
public static void main(String[] args) {
Dog dog = new Dog();
Cat cat = new Cat();
MyHouse houseDog = new MyHouse(dog);
MyHouse houseCat = new MyHouse(cat);
System.out.println("Dog house:");
houseDog.makeAnimalSound();
houseDog.isHungry();
houseDog.feedAnimal("Bone");
houseDog.feedAnimal("Bone");
houseDog.isHungry();
System.out.println();
System.out.println("Cat house:");
houseCat.makeAnimalSound();
houseCat.isHungry();
houseCat.feedAnimal("Fish");
houseCat.feedAnimal("Fish");
houseCat.isHungry();
}
}
๊ณ ๋ฏผํ๋ ๋ถ๋ถ ๐ค
isHungry( ) ๋ฉ์๋๋ฅผ ์์ฑํ๊ณ Myhouse ํด๋์ค์์ this.animal.isHungry( )๋ฅผ ๋ฐํํ๋๋ก ํ๋๋ฐ ์๊ตฌ์ฌํญ์์๋ ๋ฐฐ๊ณ ํ ์ํ ์ฌ๋ถ๋ฅผ ์ถ๋ ฅํ๋ผ๊ณ ๋์์์๋ค.
isHungry( ) ๋ฉ์๋๋ฅผ boolean ํ์
์ผ๋ก ์์ฑํ๊ณ ๊ณ์ ๊ณ ๋ฏผํ๊ณ ์๋ค๊ฐ ํ์๋ถ๊ป ๋์์ ์์ฒญํ๊ณ , ์๊ตฌ์ฌํญ์ ๋ ์ ๋๋ก ์ ์ฝ๊ณ ์ค๊ฐ์ ์ฝ๋๋ฅผ ๋นผ๋จน์ ๋ด ์๋ชป์ด๋ผ๋ ๊ฒ์ ์ฝ๊ฒ ์ ์ ์์๋ค.. ์ญ์ ๋งํ ๋๋ ์ฃผ๋ณ์ ๋์์ ์์ฒญํด์ผ ํ๋ค.....
void ํ์
์ผ๋ก ๋ฐ๊พธ๊ณ ๋ฐฐ๊ณ ํ ์ํ ์ฌ๋ถ๋ฅผ ์ถ๋ ฅํ๋๋ก ์์ฑํ ๋ค ์๋ชป ์์ฑํ๋ eat( ) ๋ฉ์๋๋ ์์ ํ๊ณ ๋๋๊น ๊ตฌํ ๊ฒฐ๊ณผ ์์์ ๊ฐ์ด ์ถ๋ ฅ์ด ๋์ค๋ ๊ฒ์ ํ์ธํ ์ ์์๋ค!
์ญ์.... ์๊ตฌ์ฌํญ์ ์ง์ง ์ ๋๋ก ์ฝ์ด์ผ๊ฒ ๋ค..
'Today I Learned(TIL) > ์ธ์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Java ์ธ์ _๊ฐ์ฒด ๊ฐ์ ๊ฒฐํฉ๋์ ๋คํ์ฑ (1) | 2024.11.30 |
---|---|
Java ์ธ์ _๋น๊ต๋ ๋ฌด์์ผ๊น? (๋๋ฑ์ฑ๊ณผ ๋์ผ์ฑ) (0) | 2024.11.22 |
Java ์ธ์ _๊ฐ์ฒด ํ์ฉ (1) | 2024.11.19 |
Java ํด๋์ค_์ดํดํ์ง ๋ชปํ๋ฉด ๋๊ฐ ์ ์๋ ๋ฐฉ.. (0) | 2024.11.19 |
๊น์ง QnA ์ธ์ (7) | 2024.11.16 |