์คํ๋ง ๋น์ ๋ผ์ดํ ์ฌ์ดํด ์คํ๋ง ๋น์ ๊ฐ๋จํ๊ฒ ๋ค์๊ณผ ๊ฐ์ ๋ผ์ดํ์ฌ์ดํด์ ๊ฐ์ง๋ค. โก๏ธ ๊ฐ์ฒด ์์ฑ -> ์์กด๊ด๊ณ ์ฃผ์
์คํ๋ง ๋น์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ์์กด๊ด๊ณ ์ฃผ์
์ด ๋ค ๋๋ ๋ค์์์ผ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ์ ์๋ ์ค๋น๊ฐ ์๋ฃ๋๋ค. ๋ฐ๋ผ์ ์ด๊ธฐํ ์์
์ ์์กด๊ด๊ณ ์ฃผ์
์ด ๋ชจ๋ ์๋ฃ๋๊ณ ๋ ๋ค์์ ํธ์ถํด์ผ ํ๋ค. ๊ทธ๋ฐ๋ฐ ๊ฐ๋ฐ์๊ฐ ์์กด๊ด๊ณ ์ฃผ์
์ด ๋ชจ๋ ์๋ฃ๋ ์์ ์ ์ด๋ป๊ฒ ์ ์ ์์๊น? ์คํ๋ง์ ์์กด๊ด๊ณ ์ฃผ์
์ด ์๋ฃ๋๋ฉด ์คํ๋ง ๋น์๊ฒ ์ฝ๋ฐฑ ๋ฉ์๋๋ฅผ ํตํด์ ์ด๊ธฐํ ์์ ์ ์๋ ค์ฃผ๋ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ์คํ๋ง์ ์คํ๋ง ์ปจํ
์ด๋๊ฐ ์ข
๋ฃ๋๊ธฐ ์ง์ ์ ์๋ฉธ ์ฝ๋ฐฑ์ ์ค๋ค. ๋ฐ๋ผ์ ์์ ํ๊ฒ ์ข
๋ฃ ์์
์ ์งํํ ์ ์๋ค. ์คํ๋ง ๋น์ ์ ์ฒด ์ด๋ฒคํธ ๋ผ์ดํ์ฌ์ดํด โก๏ธ ์คํ๋ง์ปจํ
์ด๋์์ฑ -> ์คํ๋ง๋น์์ฑ -> ์์กด๊ด๊ณ์ฃผ์
..
Study
์๋ ๋น ๋ฑ๋ก (์ปดํฌ๋ํธ ์ ๋
ธํ
์ด์
์ด ๋ถ์ ๊ฒ๋ค์ ์ ์ธํ๊ณ ) @Bean์ ํตํด ๋ฑ๋ก๋๋ ๊ฒ. AppConfig์ ๊ฐ์ด ์๋ฐ ์ค์ ํ์ผ์ ์ถ๊ฐํ์ฌ ์๋ ๋น ๋ฑ๋กํ๋ฉด ๋๋ค. ์๋ ๋น ๋ฑ๋ก์ ์ธ์ ์ฌ์ฉํ๋ฉด ์ข์๊น? 1. ๊ธฐ์ ์ง์ ๋น ์ ํ๋ฆฌ์ผ์ด์
์ ํฌ๊ฒ ์
๋ฌด ๋ก์ง๊ณผ ๊ธฐ์ ์ง์ ๋ก์ง์ผ๋ก ๋๋ ์ ์๋ค. ์
๋ฌด ๋ก์ง ๋น: ์น์ ์ง์ํ๋ ์ปจํธ๋กค๋ฌ, ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง์ด ์๋ ์๋น์ค, ๋ฐ์ดํฐ ๊ณ์ธต์ ๋ก์ง์ ์ฒ๋ฆฌํ๋ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฑ์ด ๋ชจ๋ ์
๋ฌด ๋ก์ง์ด๋ค. ๋ณดํต ๋น์ฆ๋์ค ์๊ตฌ์ฌํญ์ ๊ฐ๋ฐํ ๋ ์ถ๊ฐ๋๊ฑฐ๋ ๋ณ๊ฒฝ๋๋ค. ์
๋ฌด ๋ก์ง์ ์ซ์๋ ๋งค์ฐ ๋ง๊ณ ์ ์ฌํ ํจํด์ ๊ฐ์ง๊ณ ์๋ค. ๋ณดํต ๋ฌธ์ ๊ฐ ๋ฐ์ํด๋ ์ด๋ค ๊ณณ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋์ง ๋ช
ํํ๊ฒ ํ์
ํ๊ธฐ ์ฝ๋ค. ๊ธฐ์ ์ง์ ๋น: ๊ธฐ์ ์ ์ธ ๋ฌธ์ ๋ ๊ณตํต ๊ด์ฌ์ฌ(AOP)๋ฅผ ์ฒ๋ฆฌํ ๋ ์ฃผ๋ก ์ฌ์ฉ๋๋ค...
์์กด๊ด๊ณ ์๋ ์ฃผ์
์์ฑ์ ์ฃผ์
์์ฑ์๋ฅผ ํตํด์ ์์กด๊ด๊ณ๋ฅผ ์ฃผ์
๋ฐ๋ ๋ฐฉ์ ๋ถ๋ณ, ํ์ ์์กด๊ด๊ณ์ ์ฌ์ฉ ์์ฑ์๊ฐ ๋ฑ 1๊ฐ๋ง ์์ผ๋ฉด @Autowired๋ฅผ ์๋ตํด๋ ์๋ ์ฃผ์
๋๋ค. ์์ ์ ์ฃผ์
์ ํ, ๋ณ๊ฒฝ ๊ฐ๋ฅ์ฑ์ด ์๋ ์์กด๊ด๊ณ์ ์ฌ์ฉ ํ๋ ์ฃผ์
ํ๋์ ๋ฐ๋ก ์ฃผ์
ํ๋ ๋ฐฉ๋ฒ ์ฝ๋๊ฐ ๊ฐ๊ฒฐํ์ง๋ง ์ถํ ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํด ํ
์คํธ ํ๊ธฐ ์ด๋ ต๋ค๋ ๋จ์ ์ด ์๋ค. ๋๋๋ก์ด๋ฉด ์ฌ์ฉํ์ง ๋ง๊ณ ํ
์คํธ ์ฝ๋์์๋ง ์ฌ์ฉํ๋๋ก ํ์ ์ผ๋ฐ ๋ฉ์๋ ์ฃผ์
์ผ๋ฐ ๋ฉ์๋๋ฅผ ํตํด ์ฃผ์
๋ฐ์ ์ ์์ง๋ง ์ผ๋ฐ์ ์ผ๋ก ์ ์ฌ์ฉํ์ง ์๋๋ค ์ต์
์ฒ๋ฆฌ ์ฃผ์
ํ ์คํ๋ง ๋น์ด ์์ด๋ ๋์ํด์ผ ํ ๋๊ฐ ์๋ค. ์ด๋ด๋ ์ต์
๊ฐ์ ์ด์ฉํด ์ฒ๋ฆฌํ๋ฉด ๋๋ค. @Autowired(required=false) : ์๋ ์ฃผ์
ํ ๋์์ด ์์ผ๋ฉด ์์ ์ ๋ฉ์๋ ์์ฒด๊ฐ ํธ์ถ ์๋จ org...
์ปดํฌ๋ํธ ์ค์บ ์คํ๋ง์ ์ค์ ์ ๋ณด๊ฐ ์์ด๋ ์๋์ผ๋ก ์คํ๋ง ๋น์ ๋ฑ๋กํ๋ ์ปดํฌ๋ํธ ์ค์บ์ด๋ผ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. @Configuration @ComponentScan( excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = Configuration.class)) public class AutoAppConfig { } ์ปดํฌ๋ํธ ์ค์บ์ ์ด๋ฆ ๊ทธ๋๋ก @Component ์ ๋
ธํ
์ด์
์ด ๋ถ์ ํด๋์ค๋ฅผ ์ค์บํด์ ์คํ๋ง ๋น์ผ๋ก ๋ฑ๋กํ๋ค. ์ด๋ ์คํ๋ง ๋น์ ๊ธฐ๋ณธ ์ด๋ฆ์ ํด๋์ค๋ช
์ ์ฌ์ฉํ๋ ๋งจ ์๊ธ์๋ง ์๋ฌธ์๋ฅผ ์ฌ์ฉํ๋ค. ๋น ์ด๋ฆ ๊ธฐ๋ณธ ์ ๋ต: MemberServiceImpl ํด๋์ค -> memberServiceImpl ๋น ์ด๋ฆ ์ง์ ์ง์ : ๋ง์ฝ ์คํ๋ง ๋น์ ์ด๋ฆ์..
์ฑ๊ธํค ํจํด ํด๋์ค์ ์ธ์คํด์ค๊ฐ ๋ฑ 1๊ฐ๋ง ์์ฑ๋๋ ๊ฒ์ ๋ณด์ฅํ๋ ๋์์ธ ํจํด private ์์ฑ์๋ฅผ ์ฌ์ฉํด์ ์ธ๋ถ์์ ์์๋ก new ํค์๋๋ฅผ ์ฌ์ฉํ์ง ๋ชปํ๋๋ก ๋ง๊ณ getInstance ๋ฉ์๋๋ฅผ ์ ๊ณตํด์ ๊ฐ์ฒด ์ธ์คํด์ค๋ฅผ return ํ๋ค. ์ฃผ์์ : ์ฌ๋ฌ ํด๋ผ์ด์ธํธ๊ฐ ํ๋์ ๊ฐ์ ๊ฐ์ฒด ์ธ์คํด์ค๋ฅผ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ ์ฑ๊ธํค ๊ฐ์ฒด๋ statefulํ๊ฒ ์ค๊ณํ๋ฉด ์๋๋ค. ๋ฌธ์ ์ ์ฑ๊ธํค ํจํด์ ๊ตฌํํ๋ ์ฝ๋ ์์ฒด๊ฐ ๋ง์ด ๋ค์ด๊ฐ๋ค ์์ ํด๋์ค๋ฅผ ๋ง๋ค๊ธฐ ์ด๋ ต๋ค ์ ์ฐ์ฑ์ด ๋จ์ด์ง๋ค ์์กด๊ด๊ณ์ ํด๋ผ์ด์ธํธ๊ฐ ๊ตฌ์ฒด ํด๋์ค์ ์์กด - DIP ์๋ฐ ๋๋ณด๊ธฐ ์์กด๊ด๊ณ ์ญ์ ์์น : DIP, Dependency inversion principle ํ๋ก๊ทธ๋๋จธ๋ ์ถ์ํ์ ์์กดํด์ผ์ง, ๊ตฌ์ฒดํ์ ์์กดํ๋ฉด ์๋๋ค. ๊ตฌํ ํด๋์ค์ ์์กดํ์ง ๋ง๊ณ ..