-ํด๋น ์ธ์ ์ฃผ์ฐจ์ ๋ชฉ์์ผ๊น์ง
ํด๋์ค
โข ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ธฐ ์ํ ์ค๊ณ๋
โข field(์ํ)์ method(๋์)๋ก ๋๋จ
โข ex. ๊ณ ์์ด๋ฅผ field์ method๋ก ๋๋๊ธฐ
โข field: ์ด๋ฆ, ๋์ด, ์ฒด์ค
โข method: ํ ํด๊ธฐ, ์ผ์น
๊ฐ์ฒด (==์ธ์คํด์ค)
โข ๋ฌผ๋ฆฌ์ ์ผ๋ก ์กด์ฌํ๊ฑฐ๋ ์ถ์์ ์ผ๋ก ์๊ฐํ ์ ์๋ ๊ฒ ์ค์์ ์์ ๊ณผ ๋ค๋ฅธ ๊ฒ์ ์๋ณ ๊ฐ๋ฅํ ๊ฒ
โข ํด๋์ค๋ฅผ ํตํด ๋ง๋ค์ด์ง ๊ฒ
#๋คํ์ฑ
ํ๋์ ๊ฐ์ฒด๋ ๋ฉ์๋๊ฐ ์ฌ๋ฌ๊ฐ์ง ๋ค๋ฅธ ํํ๋ฅผ ๊ฐ์ง ์ ์๋ ๊ฒ
โข Java์์ ์ค๋ฒ๋ผ์ด๋ฉ, ์ค๋ฒ๋ก๋ฉ, ํ๋ณํ ๋ฑ์ผ๋ก ๋ํ๋ผ ์ ์์
โข ์ค๋ฒ๋ผ์ด๋ฉ: ๋ถ๋ชจ ํด๋์ค์ ์๋ ๋ฉ์๋๋ฅผ ์์ ํด๋์ค์์ ์ฌ์ ์ํ์ฌ ์ฌ์ฉํ๋ ๊ฒ
โข ์ค๋ฒ๋ก๋ฉ: ๊ฐ์ ์ด๋ฆ์ ๋ฉ์๋๋ฅผ ๋งค๊ฐ๋ณ์์ ํ์
์ด๋ ๊ฐ์์ ๋ฐ๋ผ ์ค๋ณต ์ ์ํจ์ผ๋ก์จ ๋งค๊ฐ๋ณ์์
๋ฐ๋ผ ํน์ ๋ฉ์๋๋ฅผ ํธ์ถ
#์์ฑ์
๊ฐ์ฒด๊ฐ ์์ฑ๋ ๋ ์๋์ผ๋ก ํธ์ถ๋๋ ๋ฉ์๋
โข ๊ฐ์ฒด์ ์ด๊ธฐํ๋ฅผ ์ํด ์ฌ์ฉ๋จ
โข ์์ฑ์์ ์ด๋ฆ์ ํด๋น ํด๋์ค์ ์ด๋ฆ๊ณผ ๊ฐ์์ผ ํจ
โข return ํ์
์ด ์์
โข ๋งค๊ฐ๋ณ์ ์กฐ๊ฑด์ ๋ฐ๋ผ ์ค๋ฒ๋ก๋ฉ ๊ฐ๋ฅ
โข ํด๋์ค์ ์ต์ 1๊ฐ๋ ์์ด์ผ ํจ
##Spring
#container
์ธ์คํด์ค์ ์๋ช
์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌ
โข ์์ฑ๋ ์ธ์คํด์ค๋ค์๊ฒ ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ ์ ๊ณต
Spring Container
Spring์์ ์๋ฐ ๊ฐ์ฒด(Bean)๋ค์ ๊ด๋ฆฌํ๋ ๊ณต๊ฐ
โข ๊ฐ์ฒด์ ์์ฑ๋ถํฐ ์๋ฉธ๊น์ง ๊ฐ๋ฐ์ ๋์ ๊ด๋ฆฌ
โข ๊ฐ ๊ฐ์ฒด ๊ฐ์ ์์กด ๊ด๊ณ๋ฅผ ์ฐ๊ฒฐ
Singleton ํจํด
ํด๋์ค์ ์ธ์คํด์ค๊ฐ ๋ฑ 1๊ฐ๋ง ์์ฑ๋๋ ๊ฒ์ ๋ณด์ฅํ๋ ๋์์ธ ํจํด
โข ๊ฐ์ฒด์ ๊ณต์ ๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๋ฅผ ์ค์ด๊ธฐ ์ํด ์ฌ์ฉ
ํน์ง
โข static ์์ญ์ ๊ฐ์ฒด ์ธ์คํด์ค๋ฅผ ์์ฑ
โข private์ผ๋ก new ํค์๋๋ฅผ ๋ง์
โข getInstance() ํค์๋๋ฅผ ํตํด์๋ง ์กฐํ ๊ฐ๋ฅ
- ๋ฌธ์ ์ : ๋ณต์กํ ์ฝ๋
โข ๊ตฌ์ฒด ํด๋์ค.getInstance()๋ก ๊ฐ์ฒด ์กฐํ
ไกธ ํด๋ผ์ด์ธํธ๊ฐ ๊ตฌ์ฒด ํด๋์ค์ ์์กดํจ์ผ๋ก์จ DIP ์๋ฐ
โข private ์์ฑ์๋ก ์์ ํด๋์ค๋ฅผ ๋ง๋ค๊ธฐ ์ด๋ ค์
Bean Factory
Spring Container์ ์ต์์ ์ธํฐํ์ด์ค
โข Spring Bean์ ์์ฑํ๊ณ , ๊ฐ์ฒด ์ฌ์ด์ ๋ฐํ์ ์์กด๊ด๊ณ๋ฅผ ๋งบ์ด์ฃผ๋ ์ญํ ์ ํจ
โข ์ง์ ์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ๊ฑฐ์ ์์
Bean
Spring Container๊ฐ ๊ด๋ฆฌํ๋ ์๋ฐ ๊ฐ์ฒด
โข Spring Container์ ์ํด ์์ฑ, ๊ด๋ฆฌ๋จ
โข Bean ์ด๋ฆ์ ํญ์ ๋ค๋ฅด๊ฒ ์ค์ ํด์ผ ํจ ไกธ Singleton ํจํด ๋๋ฌธ
Bean ๊ด๋ จ ๋ฉ์๋
- getBeanDefinitionNames() : ์คํ๋ง์ ๋ฑ๋ก๋ ๋ชจ๋ Bean ์ด๋ฆ์ ์กฐํ
- getBean() : ํน์ Bean์ ์กฐํํ๋๋ฐ ์ฌ์ฉ
โข ac.getBean(classType)
โข ac.getBean(beanA)
โข ac.getBean(beanA, classType)
ไกธ Bean์ด ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ, NoSuchDefinitionException ๋ฐ์ - getBeansOfType() : ํน์ ํ์ ์ ํด๋นํ๋ ๋ชจ๋ Bean ์กฐํ
IoC ์ ์ด์ ์ญ์
ํ๋ก๊ทธ๋จ์ ์ ์ด ํ๋ฆ์ ๊ฐ๋ฐ์๊ฐ ์๋ ์ธ๋ถ์์ ๊ด๋ฆฌ
โข ๊ฐ์ฒด์ ์์ฑ๊ณผ ์๋ฉธ, ๊ฐ์ฒด ๊ฐ์ ์์กด๊ด๊ณ ์ค์ ์ ๋ชจ๋ Spring์์ ์ ์ด
โข ๊ฐ์ฒด์ ์์กด์ฑ์ ์ญ์ ์์ผ ๋ชจ๋ ๊ฐ์ ์์กด๋๋ฅผ ์ค์ด๊ณ ์ ์ฐํ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๊ฒ ํจ
โข IoC๊ฐ ์ด๋ฃจ์ด์ง๋ ๊ณต๊ฐ == IoC ์ปจํ
์ด๋
DI ์์กด์ฑ ์ฃผ์
ํด๋์ค ์ฌ์ด์ ์์กด ๊ด๊ณ๋ฅผ Bean ์ค์ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ์๋ ์ฐ๊ฒฐํด์ฃผ๋ ๊ฒ
์์กด์ฑ ์ฃผ์
๋ฐฉ๋ฒ
์์ฑ์ ์ฃผ์
โข Spring์์ ๊ฐ์ฅ ๊ถ์ฅํจ
โข ๋๋ถ๋ถ์ ์์กด๊ด๊ณ ์ฃผ์
์ ํ ๋ฒ ์ผ์ด๋ ๊ฒฝ์ฐ ์ ํ๋ฆฌ์ผ์ด์
์ข
๋ฃ์๊น์ง ์์กด๊ด๊ณ๋ฅผ ๋ณ๊ฒฝํ ์ผ X
์์ฑ์ ์ฃผ์
์ ๊ฐ์ฒด๋ฅผ ํธ์ถํ ๋ ๋ฑ ํ ๋ฒ๋ง ํธ์ถ๋๋ฏ๋ก ๋ถ๋ณํ๊ฒ ์ค๊ณ ๊ฐ๋ฅ
โข ์์ ์๋ฐ ์ฝ๋๋ฅผ ํตํด ๋จ์ ํ
์คํธ๋ฅผ ํ๋ ๊ฒฝ์ฐ ์์กด๊ด๊ณ๊ฐ ๋๋ฝ๋์์ ๋ ์ปดํ์ผ ์๋ฌ๋ฅผ ํตํด
๋ฐ๋ก ์บ์นํ ์ ์์
โข ์ํ ์์กด์ฑ ๊ฒ์ถ ๊ฐ๋ฅ (BeanCurrentlyCreationException ๋ฐ์)
ํ๋ ์์ํฌ์ ์์กดํ์ง ์๊ณ ์์ ์๋ฐ ์ธ์ด์ ํน์ง์ ๊ฐ์ฅ ์ ์ด๋ฆฌ๋ ๋ฐฉ๋ฒ
- @RequiredArgsComstructor๋ฅผ ํจ๊ป ์ฌ์ฉ ์ ํ์ํ ๊ธฐ๋ฅ์ ๋ ๊น๋ํ๊ฒ ์ฌ์ฉ ๊ฐ๋ฅ
Lombok
๋ฐ๋ณต๋๋ ๋ฉ์๋๋ฅผ ์ด๋
ธํ
์ด์
์ ์ฌ์ฉํ์ฌ ์๋์ผ๋ก ์์ฑํด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
โข Java์ ์ฌ์ฉํ๋ ๋ฉ์๋๊ฐ ๋ง์์ง์๋ก ์ฝ๋๊ฐ ๋ณต์กํด์ง๊ณ ์์ฑํ๋๋ฐ ๋ฒ๊ฑฐ๋ก์์ง
ไกธ Lombok์ ์ฌ์ฉํ์ฌ ์ฝ๋ ๋ค์ด์ดํธ
โข ์ด๋
ธํ
์ด์
๊ธฐ๋ฐ์ ์ฝ๋ ์๋ ์์ฑ์ ํตํ ์์ฐ์ฑ ํฅ์
โข ๋ฐ๋ณต ์ฝ๋ ๋ค์ด์ดํธ๋ฅผ ํตํด ๊ฐ๋
์ฑ ๋ฐ ์ ์ง๋ณด์์ฑ ํฅ์
์์กด์ฑ ์ฃผ์
๋ฐฉ๋ฒ
Spring, Lombok์ ๊ฒฐํฉํ ์์ฑ์ ์ฃผ์
โข @RequiredArgsConstructor๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
โข Lombok ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํด ์์ฑ์๋ฅผ ์์ฑ ์ Spring ํ๋ ์์ํฌ๊ฐ ํด๋น ์์ฑ์์ @Autowired๊ฐ
์๋ต๋์๋ค๋ ๊ฒ์ ์ธ์ ์ ์ ํฉํ Spring Bean ์ฃผ์
โข Spring 4.3๋ถํฐ ์ฌ์ฉ ๊ฐ๋ฅ
Lombok Annotation
์์ฑ์ ๊ด๋ จ
โข @NoArgsConstructor: ๋งค๊ฐ ๋ณ์๊ฐ ์๋ ๊ธฐ๋ณธ ์์ฑ์๋ฅผ ์์ฑ
โข @RequiredArgsConstructor: final ํ๋๋ง ํฌํจ๋ ์์ฑ์๋ฅผ ์์ฑ
โข @AllArgsConstructor: ๋ชจ๋ ํ๋๋ฅผ ํฌํจํ ์์ฑ์๋ฅผ ์์ฑ
Lombok Annotation
๋ฉ์๋ ๊ด๋ จ
โข @Getter/@Setter: Getter/Setter๋ฅผ ์๋์ผ๋ก ์์ฑ
โข @toString: toString ๋ฉ์๋๋ฅผ ์๋์ผ๋ก ์์ฑ
โข @EqualsAndHashCode: equals, hashCode๋ฅผ ์๋์ผ๋ก ์์ฑ
Lombok Annotation
๋น๋ ํจํด
โข @Builder: ๋ฉ์๋ ์ฒด์ด๋์ ์ด์ฉํ๋ static ๋ฉ์๋ builder๋ฅผ ์์ฑ
ํตํฉ ๊ธฐ๋ฅ
โข @Data: @ToString, @EqualsAndHashCode, @Getter, @Setter, @RequiredArgsConstructor๋ฅผ
ํ๊บผ๋ฒ์ ์ ๊ณต