IoC(Inversion of Control): ์ ์ด์ ์ญํ
๊ฐ๋ฐ์๊ฐ ์ง์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ฑฐ๋ ๊ฐ์ฒด ๊ฐ์ ์์กด๊ด๊ณ๋ฅผ ์์ค์ฝ๋๋ก ์ฒ๋ฆฌํ์ง ์๊ณ ์ปจํ ์ด๋๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
IoC๋ฅผ ์ด์ฉํ๋ฉด ๋ฎ์ ๊ฒฐํฉ๋์ ์ปดํฌ๋ํธ๋ฅผ ๊ตฌํํ ์ ์๋ค.
๊ฒฐํฉ๋๊ฐ ๋์ ํ๋ก๊ทธ๋จ์ ์ ์ง๋ณด์๊ฐ ์ด๋ ต๋ค. ๋ฐ์ ๊ฒฐํฉ๋๊ฐ ๋์ ํ๋ก๊ทธ๋จ์ ์์ด๋ค.
public class LgTV {
public void turnOn() {
System.out.println("LgTV---์ ์ ์ผ ๋ค.");
}
public void turnOff() {
System.out.println("LgTV---์ ์ ๋๋ค.");
}
public void soundUp() {
System.out.println("LgTV---์๋ฆฌ ์ฌ๋ฆฐ๋ค.");
}
public void soundDown() {
System.out.println("LgTV---์๋ฆฌ ๋ด๋ฆฐ๋ค.");
}
}
public class SamsungTV {
public void powerOn() {
System.out.println("SamsungTV---์ ์ ์ผ ๋ค.");
}
public void powerOff() {
System.out.println("SamsungTV---์ ์ ๋๋ค.");
}
public void volumeUp() {
System.out.println("SamsungTV---์๋ฆฌ ์ฌ๋ฆฐ๋ค.");
}
public void volumeDown() {
System.out.println("SamsungTV---์๋ฆฌ ๋ด๋ฆฐ๋ค.");
}
}
public class TVUser {
public static void main(String[] args) {
SamsungTV tv = new SamsungTV();
tv.powerOn();
tv.volumeUp();
tv.volumeDown();
tv.powerOff();
LgTV lgtv = new LgTV();
lgtv.turnOn();
lgtv.soundUp();
lgtv.soundDown();
lgtv.turnOff();
}
}
1. ๋คํ์ฑ ์ด์ฉ
๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ธฐ ์ํด ๋จผ์ ๋คํ์ฑ ์ด์ฉํ ์๋ฅผ ๋ด๋ณด์.
public interface TV { // ์ธํฐํ์ด์ค ๋์
public void powerOn();
public void powerOff();
public void volumeUp();
public void volumeDown();
}
public class LgTV implements TV {
public void turnOn() {
System.out.println("LgTV---์ ์ ์ผ ๋ค.");
}
public void turnOff() {
System.out.println("LgTV---์ ์ ๋๋ค.");
}
public void soundUp() {
System.out.println("LgTV---์๋ฆฌ ์ฌ๋ฆฐ๋ค.");
}
public void soundDown() {
System.out.println("LgTV---์๋ฆฌ ๋ด๋ฆฐ๋ค.");
}
}
public class SamsungTV implements TV {
public void powerOn() {
System.out.println("SamsungTV---์ ์ ์ผ ๋ค.");
}
public void powerOff() {
System.out.println("SamsungTV---์ ์ ๋๋ค.");
}
public void volumeUp() {
System.out.println("SamsungTV---์๋ฆฌ ์ฌ๋ฆฐ๋ค.");
}
public void volumeDown() {
System.out.println("SamsungTV---์๋ฆฌ ๋ด๋ฆฐ๋ค.");
}
}
2. ๋์์ธ ํจํด ์ด์ฉ
๊ฒฐํฉ๋๋ฅผ ๋์ฑ ๋ฎ์ถ๊ธฐ ์ํด ๋๋ฒ์งธ๋ก ๋์์ธ ํจํด์ ์ด์ฉํ ์๋ฅผ ๋ด๋ณด์.
์ฒซ๋ฒ์งธ ๋ฐฉ๋ฒ์ ์ธํฐํ์ด์ค ๋ฐฉ๋ฒ์์ BeanFactory ํด๋์ค๋ฅผ ์์ฑ, TVUser ํด๋์ค๋ฅผ ์์ ํ๋ค.
public class BeanFactory {
public Object getBean(String beanName) {
if (beanName.equals("samsung")) {
return new SamsungTV();
} else if (beanName.equals("lg")) {
return new LgTV();
}
return null;
}
}
public class TVUser {
public static void main(String[] args) {
BeanFactory factory = new BeanFactory();
TV tv = (TV) factory.getBean(args[0]);
tv.powerOn();
tv.volumeUp();
tv.volumeDown();
tv.powerOff();
}
}
์์ค๋ฅผ ์์ ํ๋ ๊ฒ์ด ์๋, ์คํํ ๋ ๋ช ๋ น์ธ์๋ฅผ ๋ฐ๊พธ๋ ๊ฒ๋ง์ผ๋ก samsung ํน์ lg๋ก tv์ ์ข ๋ฅ๋ฅผ ๋ฐ๊ฟ ์ ์๋ค.
TVUser ํด๋์ค๋ ๋จ์ง ๊ฐ์ฒด๊ฐ ํ์ํ๋ค๋ ๊ฒ์ BeanFactory์ ์์ฒญํ๊ณ , BeanFactory๊ฐ ํด๋ผ์ด์ธํธ๊ฐ ์ฌ์ฉํ TV ๊ฐ์ฒด๋ฅผ ์ ์ ํ๊ฒ ์์ฑํ์ฌ ๋๊ฒจ์ค ๊ฒ์ด๋ค.
'Spring > Spring Quick Start' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์คํ๋ง ์์กด์ฑ ๊ด๋ฆฌ ๋ฐฉ๋ฒ (0) | 2020.12.29 |
---|---|
์คํ๋ง XML ์ค์ ํ์ผ์ <import>, <bean> ์๋ฆฌ๋จผํธ (0) | 2020.12.29 |
์คํ๋ง ์ปจํ ์ด๋์ ์ข ๋ฅ (0) | 2020.12.29 |
ํ๋ ์์ํฌ๋? ์คํ๋ง ํ๋ ์์ํฌ๋? (0) | 2020.12.29 |
InTelliJ๋ก ์คํ๋ง ํ๋ก์ ํธ ์์ํ๊ธฐ (0) | 2020.12.29 |
๐ซ Spring Quick Start ๐ซ (0) | 2020.12.29 |