์ ์ฒด ๊ธ (135) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ @Service, @Repository, @Controller์ ๊ฐ๋ตํ ์ค๋ช @Service, @Repository, @Controller๋ @Component๋ฅผ ์์๋ฐ๋ ์ด๋ ธํ ์ด์ ์ด๋ค. ๊ณตํต์ ์ธ ๊ธฐ๋ฅ์ ์คํ๋ง ์ปจํ ์ด๋๊ฐ ํด๋น ํด๋์ค ๊ฐ์ฒด๋ฅผ ์์ฑํ๋๋ก ์ค์ ํ๋ ๊ฒ์ด๋ค. ๋ถํ๋ ์ด์ ๋ ํด๋์ค๋ฅผ ๋ถ๋ฅํด์ ์ธ์ํ๊ธฐ ์ํจ์ด๋ค. ๊ฐ๊ฐ์ ์ด๋ ธํ ์ด์ ์ ํด๋น ํด๋์ค์ ๋ง๋ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์ด ์๋ค. @Service๋ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๋ ํด๋์ค์, @Repository๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๋์ ์ฒ๋ฆฌํ๋ ํด๋์ค์, @Controller๋ ์ฌ์ฉ์ ์์ฒญ์ ์ ์ดํ๋ ํด๋์ค์ ๋ถ์ธ๋ค. DI ์ด๋ ธํ ์ด์ ; @Autowired, @Inject, @Qualifier, @Resource ์คํ๋ง์์ ์์กด์ฑ ์ฃผ์ ์ ์ง์ํ๋ ์ด๋ ธํ ์ด์ ์ผ๋ก๋ @Autowired, @Inject, @Qualifier, @Resource๊ฐ ์๋ค. ์ด๋ ธํ ์ด์ ์ค๋ช @Autowired ์ฃผ๋ก ๋ณ์ ์์ ์ค์ ํ์ฌ ํด๋น ํ์ ์ ๊ฐ์ฒด๋ฅผ ์ฐพ์์ ์๋์ผ๋ก ํ ๋นํ๋ค. @Qualifier ํน์ ๊ฐ์ฒด์ ์ด๋ฆ์ ์ด์ฉํ์ฌ ์์กด์ฑ ์ฃผ์ ํ ๋ ์ฌ์ฉํ๋ค. @Inject @Autowired์ ๋์ผํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. @Resource @Autowired์ @Qualifier์ ๊ธฐ๋ฅ์ ๊ฒฐํฉํ ์ด๋ ธํ ์ด์ ์ด๋ค. 1. @Autowired ์์ฑ์๋ ๋ฉ์๋, ๋ฉค๋ฒ๋ณ์ ์์ ๋ชจ๋ ์ฌ์ฉ๊ฐ๋ฅ ์ด๋์ ์ฌ์ฉํ๋ ๊ฒฐ๊ณผ๋ ๊ฐ์ง๋ง ๋๋ถ๋ถ์ ๋ฉค๋ฒ๋ณ์ ์์ ์ ์ธํ์ฌ ์ฌ์ฉ ์คํ๋ง ์ปจํ ์ด๋๋ ๋ฉค๋ฒ๋ณ์ ์์ ๋ถ์ @Autowired๋ฅผ ํ์ธํ๋ ์๊ฐ ํด๋น ๋ณ์์ ํ์ ์ ์ฒดํฌํ๊ณ .. @Component ์ฌ์ฉ๋ฒ ์คํ๋ง ์ปจํ ์ด๋๋ ํด๋์ค ํจ์ค์ ์๋ ํด๋์ค๋ค์ ์ค์บํ์ฌ @Component๊ฐ ์ค์ ๋ ํด๋์ค๋ค์ ์๋์ผ๋ก ๊ฐ์ฒด ์์ฑํ๋ค. ์ด๋ ธํ ์ด์ ์ค์ ํ๋ ๋ฐฉ๋ฒ 1. Context ๋ค์์คํ์ด์ค ์ถ๊ฐ ์๋ฆฌ๋จผํธ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์์ด๋ค. 2. ์ปดํฌ๋ํธ ์ค์บ(component-scan) ์ค์ ์๋ฆฌ๋จผํธ์ base-package๋ก ์ง์ ํ ํจํค์ง๋ก ์์ํ๋ ๋ชจ๋ ํจํค์ง๊ฐ ์ค์บ ๋์์ ํฌํจ๋๋ค. 3. ๊ฐ์ฒด ์์ฑ์ ์ํ๋ ํด๋์ค์ @Component์ผ๋ก ์ง์ ๊ธฐ๋ณธ ์์ฑ์๊ฐ ์์ด์ผ๋ง ์ปจํ ์ด๋๊ฐ ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์๋ค. package polymorphism; import org.springframework.stereotype.Component; @Component public class LgTV implements TV { public L.. ์ปฌ๋ ์ ๊ฐ์ฒด ์ค์ ์ข ๋ฅ java.util.List ๋ฆฌ์คํธ1 ๋ฆฌ์คํธ2 java.util.Set: ์ค๋ณต๊ฐ์ ํ์ฉํ์ง ์๋ ์งํฉ ๊ฐ์ฒด Lovegame 0415 I'm in love java.util.Map: ํน์ key๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฑ๋กํ๊ณ ์ฌ์ฉ ์์ด์ ๋ถํ์ ์์ํฐ BOSS java.util.Properties: key-value ํํ์ ๋ฐ์ดํฐ 2020.12.30 2020๋ ๋๋ ค๋ด Setter ์ธ์ ์ ์ด์ฉํ๊ธฐ (p ๋ค์์คํ์ด์ค) ๋จผ์ ์์ฑ์ ๋์ setter ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๋ค. public class SamsungTV { private Speaker speaker; private int price; public void SamsungTV(){ } // ์์ฑ์ ๋์ setter ๋ฉ์๋ public setSpeaker (Speaker speaker){ this.speaker = speaker; } public void setPrice(int price){ this.price = price; } } Setter ์ธ์ ์ ์ ์ด์ฉํ๋ ค๋ฉด ๋์ ๋ฅผ ์ฌ์ฉํ๋ค. ์ name ์์ฑ๊ฐ์ด ํธ์ถํ๊ณ ์ ํ๋ ๋ฉ์๋ ์ด๋ฆ์ด๋ค. name="speaker"์ด๋ฉด setSpeaker()๊ฐ ํธ์ถ๋๊ณ name="addressList"์ด๋ฉด setAddressList().. ์์ฑ์ ์ธ์ ์ (Constructor Injection) ์ด์ฉํ๊ธฐ 1. ๊ธฐ๋ณธ ์คํ๋ง ์ปจํ ์ด๋๋ XML ์ค์ ํ์ผ์ ๋ฑ๋ก๋ ํด๋์ค๋ฅผ ์ฐพ์์ ๊ฐ์ฒด ์์ฑํ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋งค๊ฐ๋ณ์๊ฐ ์๋ ๊ธฐ๋ณธ ์์ฑ์๋ฅผ ํธ์ถํ๋ค. ๋งค๊ฐ๋ณ์๋ฅผ ๊ฐ์ง๋ ์์ฑ์๋ ๋ฐ๋ก ์์ฑ์ ์ธ์ ์ (Constructor Injection)์ ์ฌ์ฉํ์ฌ ์ฒ๋ฆฌํ๋ค. public class SamsungTV { private SonySpeaker speaker; private int price; public SamsungTV(){ } public SamsungTV(SonySpeaker speaker){ this.speaker = speaker; } public SamsungTV(SonySpeaker speaker, int price){ this.speaker = speaker; this.price = price; } } ์ค.. ์คํ๋ง ์์กด์ฑ ๊ด๋ฆฌ ๋ฐฉ๋ฒ Dependency Lookup: ํด๋ผ์ด์ธํธ๊ฐ ์ปจํ ์ด๋๊ฐ ์์ฑํ ๊ฐ์ฒด๋ฅผ ๊ฒ์(Lookup)ํ์ฌ ์ฌ์ฉํ๋ ๋ฐฉ์ Dependency Injection: ๊ฐ์ฒด ์ฌ์ด์ ์์กด ๊ด๊ณ๋ฅผ ์คํ๋ง ์ค์ ํ์ผ์ ๋ฑ๋ก๋ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ์ปจํ ์ด๋๊ฐ ์๋์ผ๋ก ์ฒ๋ฆฌํด์ฃผ๋ ๋ฐฉ์. ๋๋ถ๋ถ ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค. Constructor Injection: ์์ฑ์ ๊ธฐ๋ฐ Setter Injection: Setter ๋ฉ์๋ ๊ธฐ๋ฐ ์ฐธ๊ณ ๋ก, ์์กด์ฑ ๊ด๊ณ๋ ๊ฐ์ฒด์ ๊ฐ์ฒด์ ๊ฒฐํฉ ๊ด๊ณ๋ฅผ ๋งํ๋ค. ํด๋์ค ๋ค์ด์ด๊ทธ๋จ์ผ๋ก ์ด ๊ด๊ณ๋ฅผ ์ฝ๊ฒ ์ ์ ์๋ค. ๋ค์ ํฌ์คํ ์์ ๊ฐ ์์กด์ฑ ๋ฐฉ๋ฒ์ ๋ํด ์์ธํ ๋ค๋ค๋ณผ ๊ฒ์ด๋ค. ์คํ๋ง XML ์ค์ ํ์ผ์ <import>, <bean> ์๋ฆฌ๋จผํธ ๋ฃจํธ ์๋ฆฌ๋จผํธ ์๋ฆฌ๋จผํธ ์์ ํ๊ทธ์ ๋ค์์คํ์ด์ค๋ฅผ ๋น๋กฏํ XML ์คํค๋ง ๊ด๋ จ ์ ๋ณด๊ฐ ์ค์ ๋๋ค. ํ์ผ์ด ์๋์ ์์ฑ๋ ๋, beans ๊ธฐ๋ณธ ๋ค์์คํ์ด์ค๊ฐ ์ ์ธ๋์ด ์์ผ๋ฉฐ, spring-beans.xsd ์คํค๋ง ๋ฌธ์๊ฐ ๋ฑ๋ก๋์ด ์๋ค. , , , ๋ฑ ๋ค ๊ฐ์ ์๋ฆฌ๋จผํธ๋ฅผ ์์ ์๋ฆฌ๋จผํธ๋ก ์ฌ์ฉํ ์ ์๋ค. ์๋ฆฌ๋จผํธ ํ๊ทธ๋ฅผ ์ด์ฉํ์ฌ ์ฌ๋ฌ ์คํ๋ง ์ค์ ํ์ผ์ ํฌํจํจ์ผ๋ก์จ ํ ํ์ผ์ ์์ฑํ๋ ๊ฒ๊ณผ ๊ฐ์ ํจ๊ณผ๋ฅผ ๋ผ ์ ์๋ค. ๋ถ๋ฆฌํ์ฌ ์์ฑํ ์ค์ ํ์ผ์ ํ๋๋ก ํตํฉํ ๋ ์ฌ์ฉํ๋ค. ์๋ฆฌ๋จผํธ ์คํ๋ง ์ค์ ํ์ผ์ ํด๋์ค๋ฅผ ๋ฑ๋กํ ๋ ์ฌ์ฉํ๋ค. class ์์ฑ์ ํ์์ด๋ค. ํจํค์ง ๊ฒฝ๋ก๊ฐ ํฌํจ๋ ์ ์ฒด ํด๋์ค ๊ฒฝ๋ก๋ฅผ ์ ํํ๊ฒ ์ง์ ํด์ผ ํ๋ค. id ์์ฑ์ ๊ฐ์ฒด๋ฅผ ์ํ ์ด๋ฆ์ ์ง์ ํ ๋ ์ฌ์ฉํ๋ค. ์์ฑ๊ฐ์๋ CamelCase๋ฅผ ์ฌ์ฉ.. ์คํ๋ง ์ปจํ ์ด๋์ ์ข ๋ฅ BeanFactory ์คํ๋ง ์ค์ ํ์ผ์ ๋ฑ๋ก๋ Bean ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ฅ๋ง ์ ๊ณตํ๋ค. ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ํด์ Bean ๊ฐ์ฒด๊ฐ ์ฌ์ฉ๋๋ ์์ (Lazy Loading) ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค. ์ผ๋ฐ์ ์ผ๋ก ์คํ๋ง ํ๋ก์ ํธ์์๋ ์ฌ์ฉ๋ ์ผ์ด ์๋ค! BeanFactory๋ฅผ ์์ํ ApplicationContext Bean ๊ฐ์ฒด ์์ฑ ๋ฐ ๊ด๋ฆฌ, ํธ๋์ญ์ ๊ด๋ฆฌ, ๋ฉ์์ง ๊ธฐ๋ฐ์ ๋ค๊ตญ์ด ์ฒ๋ฆฌ, AOP ์ฒ๋ฆฌ, ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ ์ง์ ๋ฑ ๋ง์ ๋ถ๋ถ์ ์ง์ํ๊ณ ์๋ค. ์ปจํ ์ด๋๊ฐ ๊ตฌ๋๋๋ ์์ ์ ๊ฐ์ฒด๋ค์ ์์ฑํ๋ Pre-Loading ๋ฐฉ์์ผ๋ก ๋์ํ๋ค. ApplicationContext์ ๊ตฌํ ํด๋์ค๋ ๋งค์ฐ ๋ค์ํ๋ฐ ๋ฐ์ ๋ ํด๋์ค๋ฅผ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ค. GenericXmlApplicationnCont.. 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 voi.. ์ด์ 1 ยทยทยท 8 9 10 11 12 13 14 ๋ค์