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

spring43

Spring - BeanFactory์™€ ApplicationContext beanFactory์™€ ApplicationContext์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž. BeanFactory ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์˜ ์ตœ์ƒ์œ„ ์ธํ„ฐํŽ˜์ด์Šค๋‹ค. ์Šคํ”„๋ง ๋นˆ์„ ๊ด€๋ฆฌํ•˜๊ณ  ์กฐํšŒํ•˜๋Š” ์—ญํ• ์„ ๋‹ด๋‹นํ•œ๋‹ค. getBean() ์„ ์ œ๊ณตํ•œ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ–ˆ๋˜ ๋Œ€๋ถ€๋ถ„์˜ ๊ธฐ๋Šฅ์€ BeanFactory๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค. ApplicationContext BeanFactory ๊ธฐ๋Šฅ์„ ๋ชจ๋‘ ์ƒ์†๋ฐ›์•„์„œ ์ œ๊ณตํ•œ๋‹ค. ๋นˆ์„ ๊ด€๋ฆฌํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ธฐ๋Šฅ์„ BeanFactory๊ฐ€ ์ œ๊ณตํ•ด์ฃผ๋Š”๋ฐ, ๊ทธ๋Ÿฌ๋ฉด ๋‘˜์˜ ์ฐจ์ด๊ฐ€ ๋ญ˜๊นŒ? ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ๋•Œ๋Š” ๋นˆ์„ ๊ด€๋ฆฌํ•˜๊ณ  ์กฐํšŒํ•˜๋Š” ๊ธฐ๋Šฅ์€ ๋ฌผ๋ก ์ด๊ณ , ์ˆ˜ ๋งŽ์€ ๋ถ€๊ฐ€๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜๋‹ค. ๋ฉ”์‹œ์ง€์†Œ์Šค๋ฅผ ํ™œ์šฉํ•œ ๊ตญ์ œํ™” ๊ธฐ๋Šฅ ์˜ˆ๋ฅผ ๋“ค์–ด์„œ ํ•œ๊ตญ์—์„œ ๋“ค์–ด์˜ค๋ฉด ํ•œ๊ตญ์–ด๋กœ, ์˜์–ด๊ถŒ์—์„œ ๋“ค์–ด์˜ค๋ฉด ์˜์–ด๋กœ ์ถœ๋ ฅ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๋กœ์ปฌ, ๊ฐœ๋ฐœ,.. 2023. 7. 9.
Spring - ์Šคํ”„๋ง ๋นˆ ์กฐํšŒ -๊ธฐ๋ณธ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์—์„œ ์Šคํ”„๋ง ๋นˆ์„ ์ฐพ๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์กฐํšŒ ๋ฐฉ๋ฒ• ac.getBean(๋นˆ์ด๋ฆ„, ํƒ€์ž…) ac.getBean(ํƒ€์ž…) ์กฐํšŒ ๋Œ€์ƒ ์Šคํ”„๋ง ๋นˆ์ด ์—†์œผ๋ฉด ์˜ˆ์™ธ ๋ฐœ์ƒ NoSuchBeanDefinitionException: No bean named 'xxxxx' available public class ApplicationContextBasicFindTest { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); @Test @DisplayName("๋นˆ ์ด๋ฆ„์œผ๋กœ ์กฐํšŒ") void findBeanByName(){ MemberService memberService = ac.getBea.. 2023. 7. 9.
Spring - ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ๋“ฑ๋ก๋œ ๋ชจ๋“  ๋นˆ ์กฐํšŒ //ApplicationContextInfoTest.java package hello.core.beanfind; import hello.core.AppConfig; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.AnnotationConfigApplicationContext; class ApplicationContextInfoTest { AnnotationConfigApplicationContext ac = new Anno.. 2023. 7. 9.
Spring - ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ //์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); ApplicationContext๋Š” ์Šคํ”„๋ง ์ปจํ„ฐ์ด๋„ˆ์ด์ž, ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค. ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” XML์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ณ , ์• ๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜์˜ ์ž๋ฐ” ์„ค์ • ํด๋ž˜์Šค๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ์ฐธ๊ณ : ๋” ์ •ํ™•ํžˆ๋Š” ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ถ€๋ฅผ ๋•Œ BeanFactory , ApplicationContext ๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ์ด์•ผ๊ธฐํ•œ๋‹ค. BeanFactory ๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๊ฑฐ์˜ ์—†์œผ๋ฏ€๋กœ ์ผ๋ฐ˜์ ์œผ๋กœ ApplicationContext ๋ฅผ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ผ ํ•œ๋‹ค. 1. ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ new AnnotationConfigAppl.. 2023. 7. 9.
Spring - ์ง€๊ธˆ๊นŒ์ง€์˜ ์ „์ฒด ํ๋ฆ„ ์ •๋ฆฌ ์ง€๊ธˆ๊นŒ์ง€์˜ ์ฝ”๋“œ ์ƒˆ๋กœ์šด ํ• ์ธ ์ •์ฑ… ๊ฐœ๋ฐœ ์ƒˆ๋กœ์šด ํ• ์ธ ์ •์ฑ… ์ ์šฉ๊ณผ ๋ฌธ์ œ์  (dip, ocp ์œ„๋ฐ˜) ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ (์ถ”์ƒํ™”์—๋งŒ ์˜์กด, ๊ตฌ์ฒดํ™”์—๋Š” ์˜์กด๋„ ์—†๋„๋ก) AppConfig ๋ฆฌํŒฉํ„ฐ๋ง (์ „์ฒด ์•ฑ์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋”ฐ๋กœ appconfig๋กœ ๋นผ๋‘ ) ์ƒˆ๋กœ์šด ๊ตฌ์กฐ์™€ ํ• ์ธ ์ •์ฑ… ์ ์šฉ ์ƒˆ๋กœ์šด ํ• ์ธ ์ •์ฑ… ๊ฐœ๋ฐœ ๋‹คํ˜•์„ฑ ๋•๋ถ„์— ์ƒˆ๋กœ์šด ์ •๋ฅ  ํ• ์ธ ์ •์ฑ… ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€๋กœ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ ์ž์ฒด๋Š” ์•„๋ฌด ๋ฌธ์ œ๊ฐ€ ์—†์Œ ์ƒˆ๋กœ์šด ํ• ์ธ ์ •์ฑ… ์ ์šฉ๊ณผ ๋ฌธ์ œ์  ์ƒˆ๋กœ ๊ฐœ๋ฐœํ•œ ์ •๋ฅ  ํ• ์ธ ์ •์ฑ…์„ ์ ์šฉํ•˜๋ ค๊ณ  ํ•˜๋‹ˆ ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ์ธ ์ฃผ๋ฌธ ์„œ๋น„์Šค ๊ตฌํ˜„์ฒด๋„ ํ•จ๊ป˜ ๋ณ€๊ฒฝํ•ด์•ผํ•จ ์ฃผ๋ฌธ ์„œ๋น„์Šค ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ธํ„ฐํŽ˜์ด์Šค์ธ DiscountPolicy ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ๊ตฌ์ฒด ํด๋ž˜์Šค์ธ FixDiscountPolicy ๋„ ํ•จ๊ป˜ ์˜์กด -> DIP ์œ„๋ฐ˜ AppConfig ๋ฆฌํŒฉํ„ฐ๋ง ๊ตฌ์„ฑ .. 2023. 7. 7.
Spring - DIP, OCP๋ฅผ ์ง€ํ‚ค๋Š” ๋„๋ฉ”์ธ ์„œ๋น„์Šค ๊ธฐ์กด ์ฝ”๋“œ๋Š” ์ด๋ ‡๊ฒŒ ์ถ”์ƒํ™”์™€ ๊ตฌํ˜„์ฒด์— ๋ชจ๋‘ ์˜์กดํ•˜๊ณ  ์žˆ์ง€๋งŒ ์ด๋ฅผ ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด์„œ ๋ถ„๋ฆฌํ•ด์ฃผ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ๋˜๋ฉด์„œ MemberServiceImpl์—์„œ๋Š” MemoryMemberRepository()์ธ ๊ตฌํ˜„์ฒด์— ๋Œ€ํ•ด์„œ๋Š” ์˜์กดํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, DIP๋ฅผ ์œ„๋ฐ˜ํ•˜์ง€ ์•Š๊ฒŒ๋œ๋‹ค. ๋Œ€์‹  AppConfig์—์„œ MemberService์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ทธ์˜ ๊ตฌํ˜„์ฒด์ธ MemberServiceImpl์„ ๋ถ€๋ฅด๊ณ , ๊ตฌํ˜„์ฒด๋ฅผ ๋ถ€๋ฅผ๋•Œ ์ธ์ˆ˜๋ฅผ ํ†ตํ•ด MemoryMemberRepository๋ฅผ ์ƒ์„ฑํ•ด์„œ ๋„ฃ์–ด์ฃผ๊ฒŒ ๋œ๋‹ค. (์ƒ์„ฑ์ž ์ฃผ์ž…) ์„ค๊ณ„ ๋ณ€๊ฒฝ์œผ๋กœ MemberServiceImpl ์€ MemoryMemberRepository ๋ฅผ ์˜์กดํ•˜์ง€ ์•Š๋Š”๋‹ค! ๋‹จ์ง€ MemberRepository ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ์˜์กดํ•œ๋‹ค. MemberServiceImpl ์ž…์žฅ.. 2023. 7. 7.