Spring-study๐ฑ/Spring-Basic60 Section 7-6. @Autowired ํ๋ ๋ช , @Qualifier, @Primary ์์ ์กฐํ ๋น์ด 2๊ฐ ์ด์์ผ ๋ ๋ฐ์ํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด์ ์กฐํ ๋์ ๋น์ด 2๊ฐ ์ด์์ผ ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ @Autowired ํ๋ ๋ช ๋งค์นญ @Qualifier -> @Qualifier๋ผ๋ฆฌ ๋งค์นญ -> ๋น ์ด๋ฆ ๋งค์นญ @Primary ์ฌ์ฉ @Autowired ํ๋ ๋ช ๋งค์นญ @Autowired๋ ํ์ ๋งค์นญ์ ์๋ํ๊ณ , ์ด๋ ์ฌ๋ฌ ๋น์ด ์์ผ๋ฉด ํ๋ ์ด๋ฆ / ํ๋ผ๋ฏธํฐ ์ด๋ฆ์ผ๋ก ๋น ์ด๋ฆ์ ์ถ๊ฐ ๋งค์นญํ๋ค. ์์ ๊ฐ์ด ํ๋ผ๋ฏธํฐ์ด๋ฆ์ ๋ณด๊ณ ๊ฐ์ ํ์ ์ ๋น๋ค ์ค์์ ๋งค์นญ์ ์์ผ์ค๋ค. ์์ฝํ์๋ฉด DiscountPolicyํ์ ์ผ๋ก ๋งค์นญ์ ์๋ํ๋ ค๊ณ ํ๋๋ฐ fixDiscountPolicy์ rateDiscountPolicy๋๊ฐ๊ฐ ์์ด์ ํ๋ ์ด๋ฆ ๋๋ ํ๋ผ๋ฏธํฐ ์ด๋ฆ์ ๊ฐ์ง๊ณ ๋น ์ด๋ฆ์ ์ถ๊ฐ ๋งค์นญํ๋ ๊ฒ์ด๋ค. ์ฌ๊ธฐ.. 2022. 4. 27. Section 7-5. ์กฐํ ๋น์ด 2๊ฐ ์ด์ - ๋ฌธ์ @Autowired๋ ํ์ (Type)์ผ๋ก ์กฐํํ๋ค. ํ์ ์ผ๋ก ์กฐํ์ ์ ํ๋ ๋น์ด 2๊ฐ ์ด์์ผ ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ ์คํ๋ง ๋น ์กฐํ์์ ํ์ตํ์๋ค. DiscountPolicy์ ๊ตฌ์ฒด์ธ FixDiscountPolicy์ RateDiscountPolicy ๋ ๋ค ์คํ๋ง ๋น์ผ๋ก ๋ฑ๋ก์ํค๊ณ DiscountPolicyํ์ ์ผ๋ก ์กฐํ๋ฅผ ํ๋ฉด NoUniqueBeanDefinitionException ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ์ด๋ ํ์ ํ์ ์ผ๋ก ์ง์ ํ ์ ๋ ์์ง๋ง, ํ์ ํ์ ์ผ๋ก ์ง์ ํ๋ ๊ฒ์ DIP๋ฅผ ์๋ฐฐํ๊ณ ์ ์ฐ์ฑ์ด ๋จ์ด์ง๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฆ๋ง ๋ค๋ฅด๊ณ , ์์ ํ ๋๊ฐ์ ํ์ ์ ์คํ๋ง ๋น์ด 2๊ฐ ์์ ๋ ํด๊ฒฐ์ด ์๋๋ค. ์คํ๋ง ๋น์ ์๋ ๋ฑ๋กํด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด๋ ๋์ง๋ง, ์์กด ๊ด๊ณ ์๋ ์ฃผ์ ์์ ํด๊ฒฐํ๋ .. 2022. 4. 27. Section 7-4. ๋กฌ๋ณต๊ณผ ์ต์ ํธ๋๋ ์์ฑ์ ์ฃผ์ ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค๋ ๊ฒ์ ์๊ฒ ๋๋ฐ ๋ง์ ๊ฐ๋ฐ์ ํด๋ณด๋ฉด, ๋๋ถ๋ถ์ด ๋ค ๋ถ๋ณ์ด๊ณ , ๊ทธ๋์ ๋ค์๊ณผ ๊ฐ์ด ์์ฑ์์ final ํค์๋๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค. ๊ทธ๋ฐ๋ฐ ์์ฑ์๋ ๋ง๋ค์ด์ผ ํ๊ณ , ์ฃผ์ ๋ฐ์ ๊ฐ์ ๋์ ํ๋ ์ฝ๋๋ ๋ง๋ค์ด์ผ ํ๊ณ … ์์ฑ์ ์ฃผ์ ์ ํ๋ ์ฃผ์ ์ฒ๋ผ ์ข ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์์๊น? ๋กฌ๋ณต ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ์ฉํ๊ธฐ build.gradle์ ์ค์ ์ ์ถ๊ฐํด์ค๋ค. ์ฐธ๊ณ ๋ก ์ฒ์์ springํ๋ก์ ํธ๋ฅผ ๋ง๋ค๋ thymleaf์ฒ๋ผ Dependencies์์ Lombok์ ์ ํํ์ฌ ์ธํ ํ ์๋ ์๋ค. ์ฒ์ ๋ง๋ค๋ ์ถ๊ฐํ์ง ์์๊ธฐ ๋๋ฌธ์ ์ง์ ์ถ๊ฐ์์ผ์ฃผ๋ ๊ฒ์ด๋ค. Lombokํ๋ฌ๊ทธ์ธ์ ์ค์นํ๊ณ Enable annotation processing ์ฒดํฌํด์ฃผ์ด์ผ ์ฌ์ฉ๊ฐ๋ฅํ๋ค. Lombok์ ๊ธฐ๋ฅ ์ฐ๋ฆฌ๊ฐ ์๋๋.. 2022. 4. 27. Section 7-3. ์์ฑ์ ์ฃผ์ ์ ์ ํํด๋ผ! ๊ณผ๊ฑฐ์๋ ์์ ์ ์ฃผ์ ๊ณผ ํ๋ ์ฃผ์ ์ ๋ง์ด ์ฌ์ฉํ์ง๋ง, ์ต๊ทผ์๋ ์คํ๋ง์ ํฌํจํ DI ํ๋ ์์ํฌ ๋๋ถ๋ถ์ด ์์ฑ์ ์ฃผ์ ์ ๊ถ์ฅํ๋ค. ์์ฑ์ ์ฃผ์ ๊ณผ ์์ ์ ์ฃผ์ ์ ๋น๊ต ๋ถ๋ณ ๋๋ถ๋ถ์ ์์กด๊ด๊ณ ์ฃผ์ ์ ํ๋ฒ ์ผ์ด๋๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ข ๋ฃ์์ ๊น์ง ์์กด๊ด๊ณ๋ฅผ ๋ณ๊ฒฝํ ์ผ์ด ์๋ค. ์คํ๋ ค ๋๋ถ๋ถ์ ์์กด๊ด๊ณ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ข ๋ฃ ์ ๊น์ง ๋ณํ๋ฉด ์๋๋ค.(๋ถ๋ณํด์ผ ํ๋ค.) ์์ ์ ์ฃผ์ ์ ์ฌ์ฉํ๋ฉด, setXxx ๋ฉ์๋๋ฅผ public์ผ๋ก ์ด์ด๋์ด์ผ ํ๋ค. ๋๊ตฐ๊ฐ ์ค์๋ก ๋ณ๊ฒฝํ ์ ๋ ์๊ณ , ๋ณ๊ฒฝํ๋ฉด ์๋๋ ๋ฉ์๋๋ฅผ ์ด์ด๋๋ ๊ฒ์ ์ข์ ์ค๊ณ ๋ฐฉ๋ฒ์ด ์๋๋ค. ์์ฑ์ ์ฃผ์ ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ ๋ฑ 1๋ฒ๋ง ํธ์ถ๋๋ฏ๋ก ์ดํ์ ํธ์ถ๋๋ ์ผ์ด ์๋ค. ๋ฐ๋ผ์ ๋ถ๋ณํ๊ฒ ์ค๊ณํ ์ ์๋ค. ๋๋ฝ ํ๋ ์์ํฌ ์์ด ์์ํ ์๋ฐ ์ฝ๋๋ฅผ ๋จ์ ํ ์คํธ ํ๋ ๊ฒฝ์ฐ(์.. 2022. 4. 27. Section 7-2. ์ต์ ์ฒ๋ฆฌ Member๋ ์คํ๋ง ๋น์ด ์๋๋ค. ๋ฐ๋ผ์ @Autowired๋ง ์ฌ์ฉํ๋ฉด required ์ต์ ์ default๊ฐ true์ด๊ธฐ ๋๋ฌธ์ ์๋ ์ฃผ์ ๋์์ด ์์ผ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. ์ฃผ์ ํ ์คํ๋ง ๋น์ด ์์ด๋ ๋์ํ๊ณ ์ถ์๋ ์ด๋ป๊ฒ ํด์ผ๋ ๊น? ์๋ ์ฃผ์ ๋์์ ์ต์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค. @Autowired(required=false) : ์๋ ์ฃผ์ ํ ๋์์ด ์์ผ๋ฉด ์์ ์ ๋ฉ์๋ ์์ฒด๊ฐ ํธ์ถ ๋์ง ์๋๋ค. org.springframework.lang.@Nullable : ์๋ ์ฃผ์ ํ ๋์์ด ์์ผ๋ฉด null์ด ์ ๋ ฅ๋๋ค. Optional : ์๋ ์ฃผ์ ํ ๋์์ด ์์ผ๋ฉด Optional.empty๊ฐ ์ ๋ ฅ๋๋ค. @Autowired(required=false)์ ํตํด noBean1 ์์ฒด๊ฐ ํธ์ถ๋์ง ์์ ๊ฒ์ ํ.. 2022. 4. 27. ์ด์ 1 2 3 4 5 6 7 ยทยทยท 12 ๋ค์