| description | ์คํ๋ง์ ํต์ฌ์ ๋ฌด์์ธ๊ฐ? |
|---|
๐ ์ถ์ฒ : https://dev-coco.tistory.com/80
๐ ๊ฐ์ ์ถ์ฒ :https://www.inflearn.com/course/์คํ๋ง๋ถํธ-๊ฐ๋ ์ ๋ฆฌ
Framework : ํ์์์ ๋์ํ๋ค.
๊ตฌ์ฌ์ ํ์์์ ์์ง์๊ณผ ๊ฐ์ ๊ฒ์ด๋ค. ํ ์์์ ๋ฒ์ด๋์ง ๋ง๋ผ๋ ๋ป์ผ๋ก ํ์ ์ ๊ณตํด์ค ํ ๋ ์ด ํ์ ๋ง์ถฐ์ ๊ฐ๋ฐ์ ํด๋ผ ๊ทธ๋ ๊ฒ ํ๋ฉด ์ข์ ํ๋ก๊ทธ๋จ์ ๋ง๋ค ์ ์๋ค.
- ์คํ๋ง์ด ์ด๋ป๊ฒ ๋ง๋ค์ด์ก๋ ์ง ๋ด๋ถ๋ฅผ ๋ณผ ์ ์๊ณ ๋ด๋ถ๋ฅผ ๋ฏ์ด๊ณ ์น ์ ์๋ค.
- ์์ค ์ฝ๋๊ฐ ๊ณต๊ฐ! ์คํ ์์ค์ด๊ธฐ ๋๋ฌธ์ ๋ถํธํ ๋ถ๋ถ์ ๊ณ ์ณ์ ๊ธฐ์ฌ ๊ฐ๋ฅํ๋ค.
class๋ ์ค๊ณ๋์ด๋ฉฐ, object๋ ์ค์ฒดํ๊ฐ ๊ฐ๋ฅํ ๊ฒ์ด๋ฉฐ(๋กค ์บ๋ฆญํฐ ์ค ๋๋๋ class์ด๋ ์บ๋ฆญํฐ๋ ์ถ์์ ์ธ ์๋ฏธ์ ์ถ์ ํด๋์ค), instance๋ ์ค์ฒดํ ๋ ๊ฒ์ด๋ค.
object๋ฅผ ์์ s = new ์์();๋ก heap์ ์ฌ๋ฆฌ๋ฉด ์ด s๋ ๋ง๋ ๋ฉ์๋๊ฐ ๊ด๋ฆฌํจ ๋จ์ ์ ์ด๋ ๊ฒ ๋๋ฉด ๋์ค์ ๊ณต์ ํ ๋ ํ๋ค์ด์ง๋ค.
๊ฐ์ฒด์ ์์ฑ, ์๋ช ์ฃผ๊ธฐ์ ๊ด๋ฆฌ๊น์ง ๋ชจ๋ ๊ฐ์ฒด์ ๋ํ ์ ์ด๊ถ์ด ๋ฐ๋์๋ค๋ ๊ฒ์ ์๋ฏธ
์ปดํฌ๋ํธ ์์กด๊ด๊ณ ์ค์ (Component dependency resoulution), ์ค์ (Configuration) ๋ฐ ์๋ช
์ฃผ๊ธฐ(LifeCycle)์ ํด๊ฒฐํ๊ธฐ ์ํ ๋์์ธ ํจํด(Design Pattern)์ด๋ค.
- ์คํ๋ง์ด ์ง์ ๋ง๋ ๋ค. ์ค์บํ์ฌ heap ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ ค์ฃผ๊ณ ์คํ๋ง์ด ์ง์ ๊ด๋ฆฌ
์ปจํ ์ด๋?๋
์ปจํ ์ด๋๋ ๋ณดํต ๊ฐ์ฒด์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌ, ์์ฑ๋ ์ธ์คํด์ค๋ค์๊ฒ ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋๋ก ํ๋ ๊ฒ
์คํ๋ง ํ๋ ์์ํฌ๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํ๊ณ ์ฑ
์์ง๊ณ ์์กด์ฑ์ ๊ด๋ฆฌํด์ฃผ๋ ์ปจํ
์ด๋๊ฐ ์๋๋ฐ,๊ทธ๊ฒ์ด ๋ฐ๋ก IoC ์ปจํ
์ด๋(=์คํ๋ง ์ปจํ
์ด๋)
์ธ์คํด์ค ์์ฑ๋ถํฐ ์๋ฉธ๊น์ง์ ์ธ์คํด์ค ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ๋ฅผ ๊ฐ๋ฐ์๊ฐ ์๋ ์ปจํ ์ด๋๊ฐ ๋์ ํด์ฃผ๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด ๊ด๋ฆฌ ์ฃผ์ฒด๊ฐ ํ๋ ์์ํฌ(Container)๊ฐ ๋๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์๋ ๋ก์ง์ ์ง์คํ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค.
- IoC ์ปจํ ์ด๋๋ ๊ฐ์ฒด์ ์์ฑ์ ์ฑ ์์ง๊ณ , ์์กด์ฑ์ ๊ด๋ฆฌํ๋ค.
POJO์ ์์ฑ, ์ด๊ธฐํ, ์๋น์ค, ์๋ฉธ์ ๋ํ ๊ถํ์ ๊ฐ์ง๋ค.- ๊ฐ๋ฐ์๋ค์ด ์ง์ POJO๋ฅผ ์์ฑํ ์ ์์ง๋ง ์ปจํ ์ด๋์๊ฒ ๋งก๊ธด๋ค.
- ๊ฐ๋ฐ์๋ ๋น์ฆ๋์ค ๋ก์ง์ ์ง์คํ ์ ์๋ค.
- ๊ฐ์ฒด ์์ฑ ์ฝ๋๊ฐ ์์ผ๋ฏ๋ก TDD๊ฐ ์ฉ์ดํ๋ค.
POJO(Plain Old Java Object)๋? ์ฃผ๋ก ํน์ ์๋ฐ ๋ชจ๋ธ์ด๋ ๊ธฐ๋ฅ, ํ๋ ์์ํฌ๋ฅผ ๋ฐ๋ฅด์ง ์๋
Java Object๋ฅผ ์ง์นญํ๋ค. Java Bean ๊ฐ์ฒด๊ฐ ๋ํ์ ์ด๋ค. ๊ฐ๋จํ๊ฒ getter / setter๋ฅผ ์๊ฐํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
DL: ์ ์ฅ์์ ์ ์ฅ๋์ด ์๋ Bean์ ์ ๊ทผํ๊ธฐ ์ํด ์ปจํ ์ด๋๊ฐ ์ ๊ณตํ๋ API๋ฅผ ์ด์ฉํ์ฌ Bean์ Lockupํ๋ ๊ฒDI: ๊ฐ ํด๋์ค๊ฐ์ ์์กด๊ด๊ณ๋ฅผ ๋น ์ค์ (Bean Definition) ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ์ปจํ ์ด๋๊ฐ ์๋์ผ๋ก ์ฐ๊ฒฐํด์ฃผ๋ ๊ฒ- Setter Injection (์์ ์ ์ฃผ์ )
- Constructor Injection (์์ฑ์ ์ฃผ์ )
- Method Injection (ํ๋ ์ฃผ์ )
- DL ์ฌ์ฉ์ ์ปจํ ์ด๋ ์ข ์์ด ์ฆ๊ฐํ๊ธฐ ๋๋ฌธ์ ์ฃผ๋ก DI๋ฅผ ์ฌ์ฉํ๋ค. DI๋ก ์ธํด ์คํ๋ง์ด ๋ง๋ ๊ฒ๋ค์ ๋ค๋ฅธ ๊ณณ์์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค. ์ฆ, ๊ณต์ ๊ฐ ๊ฐ๋ฅํ๋ค.
๐ ์ถ์ฒ : https://dog-developers.tistory.com/12
{% content-ref url="component-bean.md" %} component-bean.md {% endcontent-ref %}
{% content-ref url="3-field-setter.md" %} 3-field-setter.md {% endcontent-ref %}
- ์คํ๋ง ์ปจํ
์ด๋๊ฐ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด๋ฅผ ๋น(Bean)์ด๋ผ๊ณ ํ๊ณ ,์ด ๋น๋ค์ ๊ด๋ฆฌํ๋ค๋ ์๋ฏธ๋ก ์ปจํ
์ด๋๋ฅผ
๋น ํฉํ ๋ฆฌ(BeanFactory)๋ผ๊ณ ๋ถ๋ฅธ๋ค. - ๊ฐ์ฒด์ ์์ฑ๊ณผ ๊ฐ์ฒด ์ฌ์ด์ ๋ฐํ์ ๊ด๊ณ๋ฅผ DI ๊ด์ ์์ ๋ณผ ๋ ์ปจํ
์ด๋๋ฅผ
BeanFactory๋ผ๊ณ ํ๋ค. - BeanFactory์ ์ฌ๋ฌ๊ฐ์ง ์ปจํ
์ด๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํ
์ดํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ(ApplicationContext)๊ฐ ์๋ค.
1. BeanFactory
- BeanFactory ๊ณ์ด์ ์ธํฐํ์ด์ค๋ง ๊ตฌํํ ํด๋์ค๋ ๋จ์ํ ์ปจํ ์ด๋์์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ DI๋ฅผ ์ฒ๋ฆฌํ๋ ๊ธฐ๋ฅ๋ง ์ ๊ณตํ๋ค.
- Bean์ ๋ฑ๋ก, ์์ฑ, ์กฐํ, ๋ฐํ ๊ด๋ฆฌ๋ฅผ ํ๋ค.
ํฉํ ๋ฆฌ ๋์์ธ ํจํด์ ๊ตฌํํ ๊ฒ์ผ๋ก BeanFactory๋ ๋น์ ์์ฑํ๊ณ ๋ถ๋ฐฐํ๋ ์ฑ ์์ ์ง๋ ํด๋์ค์ด๋ค.- Bean์ ์กฐํํ ์ ์๋
getBean()๋ฉ์๋๊ฐ ์ ์๋์ด ์๋ค. - ๋ณดํต์ BeanFactory๋ฅผ ๋ฐ๋ก ์ฌ์ฉํ์ง ์๊ณ , ์ด๋ฅผ ํ์ฅํ ApplicationContext๋ฅผ ์ฌ์ฉํ๋ค.
2. ApplicationContext
-
Bean์ ๋ฑ๋ก, ์์ฑ, ์กฐํ, ๋ฐํ ๊ด๋ฆฌํ๋ ๊ธฐ๋ฅ์ BeanFactory์ ๊ฐ๋ค.
-
์คํ๋ง์ ๊ฐ์ข ๋ถ๊ฐ ๊ธฐ๋ฅ์ ์ถ๊ฐ๋ก ์ ๊ณตํ๋ค.
-
BeanFactory ๋ณด๋ค ๋ ์ถ๊ฐ์ ์ผ๋ก ์ ๊ณตํ๋ ๊ธฐ๋ฅ
- ๊ตญ์ ํ๊ฐ ์ง์๋๋ ํ ์คํธ ๋ฉ์์ง๋ฅผ ๊ด๋ฆฌ ํด์ค๋ค.
- ์ด๋ฏธ์ง๊ฐ์ ํ์ผ ์์์ ๋ก๋ํ ์ ์๋ ํฌ๊ด์ ์ธ ๋ฐฉ๋ฒ์ ์ ๊ณตํด์ค๋ค.
- ๋ฆฌ์ค๋๋ก ๋ฑ๋ก๋ ๋น์๊ฒ ์ด๋ฒคํธ ๋ฐ์์ ์๋ ค์ค๋ค.
<figure><img src="../../.gitbook/assets/image (5) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
๐ ์ถ์ฒ : https://dog-developers.tistory.com/12
๋ฐ๋ผ์ ๋๋ถ๋ถ์ ์ดํ๋ฆฌ์ผ์ด์ ์์๋ ๋นํฉํ ๋ฆฌ ๋ณด๋ค๋ ์ดํ๋ฆฌ์ผ์ด์ ์ฝํ ์คํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ข๋ค.
๋ฌธ์ง๊ธฐ์ ๊ฐ์.. ์๋ฌด๋ฅผ ์ค๋ค. ์๋ฅผ ๋ค์ด ๊ถํ์ด ์๋ค๋ฉด ๋ชป๋ค์ด ์ค๊ฒ ๋ง๋ ๊ฒ๊ณผ ๊ฐ์ ๊ฒ์ ๋งํ๋ค.
A๋๋ผ์ ์ฑ์ tomcat์ด๋ผ๊ณ ๋ณด๊ณ ์์ ์ง์ ์คํ๋ง ์ปจํ
์ด๋๋ผ๊ณ ์๊ฐํ๋ฉด ๋จ
ํฐ์ผ ์ชฝ์ผ๋ก ๋ค์ด์ค๋ ํํฐ๋ ์ค์ filter๋ผ๊ณ ๋ถ๋ฆฌ๋ฉฐ, web.xml์ ๊ฐ์ง๋ค. ๋ ๋ฒ์งธ๋ก ์คํ๋ง ์ปจํ
์ด๋๋ก ๋ค์ด๊ฐ๋ ํํฐ๋ Interceptor(AOP)๋ก ๊ถํ์ฒดํฌ๋ฅผ ํด์ค
๐ ์คํ๋ง์ ์์ฒญ๋๊ฒ ๋ง์ ์ด๋ ธํ ์ด์ ์ ๊ฐ์ง๊ณ ์๋ค(๋ฆฌํ๋ ์ , ์ปดํ์ผ์ฒดํน)
https://velog.io/@prettylee620/Reflection
- ์ด๋
ธํ
์ด์
(์ฃผ์ + hint) : ์ปดํ์ผ๋ฌ๊ฐ ๋ฌด์ํ์ง ์์ โ ๋ง์น
@Override
-
์คํ๋ง์ ์ด๋ ธํ ์ด์ ์ ํตํด ๊ฐ์ฒด๋ฅผ ์์ฑ
@Compont: ํด๋์ค ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ฉ, ์ฆ IoC๊ฐ ์ค์บ ์ฝ์ด์ heap์ ์๋์ผ๋ก ์ฌ๋ ค์ค
@Autowired: ๋ก๋ฉ๋ ๊ฐ์ฒด ํด๋น ๋ณ์์ ์ง์ด ๋ฃ๊ธฐ, ๋์ผํ ํ์ ์ ๊ฐ์ฒด๊ฐ ์๋์ง ํ์ธ ํ์๋ค๋ฉดํ์ (A)์ ํตํด ์ฐพ์ ์๋ค๋ฉด ์ฐ๊ฒฐ ์ฆ, DI ํด์ฃผ๊ฒ ๋๋ค. ์๋ค๋ฉดnull์ด ๋ค์ด๊ฐ
class B{ A a = new A(); }
๋ผ๋ฉด, ์๋ก ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ ๋ ๋ค๋ฅธ A ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ณต๊ฐ์ ์์ฑ๋๊ฒ ๋จ
class B{ @Autowired A a }
๋ผ๋ฉด, B ํด๋์ค ์ค์บ ์ ๋ถ์ํ๋ ๊ธฐ๋ฒ์ผ๋ก ๋ฐํ์ ์ ๋ถ์ํ๋ฉฐ, ์ด๋ฅผ
๋ฆฌํ๋ ์ ์ด๋ผ๊ณ ํ๋๋ฐ ๋ถ์ ์ ๋ฉ์๋, ํ๋, ์ด๋ ธํ ์ด์ ์ด ์ด๋ค ๊ฒ์ด ์๋์ง์ ๋ฌด์์ธ๊ฐ ํด๋ผ๊ณ ์ค์ ํ ์ ์๋ค.
- // ์ฃผ์ : ์ปดํ์ผ๋ฌ๊ฐ ๋ฌด์
 (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png)
 (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png)
 (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png)
 (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png)
 (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png)
 (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png)
 (1) (1) (1) (1) (1) (1) (1) (1).png)