๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Spring/Spring Quick Start

IoC, ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ดํ•ดํ•˜๊ธฐ

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 ๊ฐ์ฒด๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ์ƒ์„ฑํ•˜์—ฌ ๋„˜๊ฒจ์ค€ ๊ฒƒ์ด๋‹ค.