์ง๊ธ๊น์ง ๊ฐ์ฒด ์งํฅ ์ค๊ณ์ ์คํ๋ง์ ๋ํด ๋ฐฐ์ฐ๊ณ java์ฝ๋๋ก ์์ ๋ฅผ ๋ง๋ค์ด๋ดค๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ์ฒด ์งํฅ ์๋ฆฌ๋ฅผ ์ ์ฉํด SOLID ์์น์ ์ค์ํ๋๋ก ํ๋ค.
๊ทธ๋ฐ๋ฐ ๋ง์ ์ฒ์๋ถํฐ ์ค๋ช
ํด๋ณด๋ผ๊ณ ํ๋ฉด ... ๋ชป ํ ๊ฒ ๊ฐ๋ค !!
๊ทธ๋์ !! ์ค๋์ ์ง๊ธ๊น์ง ๋ฐฐ์ด ๋ด์ฉ์ ์ญ ์ดํด๋ณด๋ฉฐ ์ ๋ฆฌํ๋ ์๊ฐ์ ๊ฐ์ง๋ ค๊ณ ํ๋ค.
๊ฐ์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ก๊ทธ๋จ์ ์ ์ฐํ๊ณ ๋ณ๊ฒฝ์ด ์ฉ์ดํ๊ฒ ๋ง๋ ๋ค.
(๊ทธ๋์ ๋๊ท๋ชจ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ๋ง์ด ์ฌ์ฉํ๋ค.)
โ๏ธ ์ ์ฐํ๊ณ ๋ณ๊ฒฝ์ด ์ฉ์ด?
์ด๋
๋คํ์ฑ
์ ์ด์ผ๊ธฐํ๋ค.๋คํ์ฑ
์ ์ปดํฌ๋ํธ๋ฅผ ์ฝ๊ณ ์ ์ฐํ๊ฒ ๋ณ๊ฒฝํ๋ฉฐ ๊ฐ๋ฐํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ด์ผ๊ธฐํ๋ค.
์ ์ ๋ค์๋ ์์๋ฅผ ๋์ด์ผ๋ณด์.
๋ก๋ฏธ์ค์ ์ค๋ฆฌ์ฃ๐ฉ๐ผโโค๏ธโ๐จ๐ผ์ ๋ํ ์์๊ฐ ๊ธฐ์ต๋๋๊ฐ? ์ญํ ๊ณผ ๊ตฌํ์ ๊ตฌ๋ถํ๋ ๊ฒ์ด ์ค์ํ๋ค๊ณ ๊ฐ์กฐํ์๋ค.
๋ก๋ฏธ์ค์ ์ญํ , ์ค๋ฆฌ์ฃ์ ์ญํ ์ ์ด๋ค ๋ฐฐ์ฐ๊ฐ ๋งก๋ ๋์ฒด ๊ฐ๋ฅํด์ผ ํ๋ค๊ณ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฅผ ์ ์ฐํ๊ณ ๋ณ๊ฒฝ์ด ์ฉ์ดํ๋ค๊ณ ํํํ๋ค.
์ด๋ฅผ ์๋ฐ์ ์์ ์ผ๋ก ๋ณด๋ฉด ์ญํ ์ ์ธํฐํ์ด์ค, ๊ตฌํ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค, ๊ตฌํ ๊ฐ์ฒด๋ผ๊ณ ํ ์ ์๋ค.
โ๏ธ ๊ทธ๋์ ๋ญ, ๋คํ์ฑ์ ์ด์ฉํ๋ฉด ๋ญ๊ฐ ์ข๋ค๋๊ฑฐ์ผ?
์ด๋ ๊ฒ ๋คํ์ฑ์ ํตํด ์ฝ๋๋ฅผ ์ง๋ฉด ํด๋ผ์ด์ธํธ๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ๋ ์๋ฒ์ ๊ตฌํ ๊ธฐ๋ฅ์ ์ ์ฐํ๊ฒ ๋ณ๊ฒฝํ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค.
์คํ๋ง์์ IoC(์ ์ด์ ์ญ์ ), DI(์์กด๊ด๊ณ ์ฃผ์ )๋ ๋คํ์ฑ์ ํ์ฉํด ์ญํ ๊ณผ ๊ตฌํ์ ํธ๋ฆฌํ๊ฒ ๋ค๋ฃฐ ์ ์๋๋ก ํ ๊ฒ์ด๋ค.
SRP ๋จ์ผ ์ฑ ์ ์์น
: Single responsibility principle
- ํ ํด๋์ค๋ ํ๋์ ์ฑ ์๋ง ๊ฐ์ ธ์ผ ํ๋ค.
- ๋ณ๊ฒฝ์ด ์์ ๋ ํ๊ธ ํจ๊ณผ๊ฐ ์ ๋ค๋ฉด ๋จ์ผ ์ฑ ์ ์์น์ ์ ๋ฐ๋ฅธ ๊ฒ
โญ๏ธ OCP ๊ฐ๋ฐฉ-ํ์ ์์น
: Open/closed principle
- ์ํํธ์จ์ด ์์๋ ํ์ฅ์๋ ์ด๋ ค์์ผ๋ ๋ณ๊ฒฝ์๋ ๋ซํ์์ด์ผ ํ๋ค.
- ์์์ ์๊ธฐํ๋ ์ญํ ๊ณผ ๊ตฌํ์ ๋ถ๋ฆฌ๋ฅผ ์๊ฐํด๋ณด๋ฉด ์กฐ๊ธ ์ดํด๋ ๊ฒ์ด๋ค.
LSP ๋ฆฌ์ค์ฝํ ์นํ ์์น
: Liskov substitution principle
- ํ๋ก๊ทธ๋จ ๊ฐ์ฒด๋ ํ๋ก๊ทธ๋จ์ ์ ํ์ฑ์ ๊นจ๋จ๋ฆฌ์ง ์์ผ๋ฉด์ ํ์ ํ์ ์ ์ธ์คํด์ค๋ก ๋ฐ๊ฟ ์ ์์ด์ผ ํ๋ค.
- ๋คํ์ฑ์์ ํ์ ํด๋์ค๋ ์ธํฐํ์ด์ค ๊ท์ฝ์ ๋ค ์ง์ผ์ผ ํ๋ค. ์ฆ, ์๋์ฐจ ์ธํฐํ์ด์ค์ ์์ ์ ํ์ง์ ์ํํ๋ฉด ์๋๋ค.
ISP ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น
: Interface segregation principle
- ํน์ ํด๋ผ์ด์ธํธ๋ฅผ ์ํ ์ธํฐํ์ด์ค ์ฌ๋ฌ ๊ฐ๊ฐ ๋ฒ์ฉ ์ธํฐํ์ด์ค ํ๋๋ณด๋ค ๋ซ๋ค.
์ฆ, ํ๋์ ๋ชฐ์๋ฃ์ง ๋ง๊ณ ์ ์ชผ๊ฐ์ด๋ณด์.- ์ธํฐํ์ด์ค๊ฐ ๋ช ํํด์ง๊ณ , ๋์ฒด ๊ฐ๋ฅ์ฑ์ด ๋์์ง๋ค.
โญ๏ธ DIP ์์กด๊ด๊ณ ์ญ์ ์์น
: Dependency inversion principle
- ๊ตฌํ ํด๋์ค(๊ตฌํ)์ ์์กดํ์ง ๋ง๊ณ , ์ธํฐํ์ด์ค(์ญํ )์ ์์กดํ๋ผ
์์กด๊ด๊ณ ์ฃผ์ or ์์กด์ฑ ์ฃผ์
๋ก๋ฏธ์ค์ ์ค๋ฆฌ์ฃ๐ฉ๐ผโโค๏ธโ๐จ๐ผ ์์๋ฅผ ์๊ฐํด๋ณด๋ฉด ์ญํ ์ ์๋ค. ๊ทธ๋ผ ์ญํ ์ ๋๊ฐ ๋งก์์ง๋ ๋๊ฐ ์ ํด์ฃผ์ง?
๐ค: ๋ก๋ฏธ์ค๊ฐ ์ค๋ฆฌ์ฃ์ ์ญ์ธํ๊ฑฐ๋ ์ค๋ฆฌ์ฃ์ด ๋ก๋ฏธ์ค๋ฅผ ์ญ์ธํด์ผํ๋?
๋ง๋ ์๋๋ ์๋ฆฌ. ๋๋ฌด ๋ง์ ์ญํ ์ ์ฃผ์ง ๋ง์ -`ะดยด-!!
๋ณ๋์ ๊ณต์ฐ ๊ธฐํ์(AppConfig)๋ฅผ ๋ชจ์์
Appconfig๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ฒด ๋์ ๋ฐฉ์์ ๊ตฌ์ฑ(config)ํ๊ธฐ ์ํด ๊ตฌํ ๊ฐ์ฒด ์์ฑ/์ฐ๊ฒฐ์ ์ํํ๋ค.
์ธํฐํ์ด์ค ์ ์ฅ์์๋ ์์ฑ์๋ฅผ ํตํด ์ด๋ค ๊ตฌํ ๊ฐ์ฒด๊ฐ ์ฃผ์ ๋ ์ง ์ ์ ์๋ค. = ๋งก์ ์ผ์ด ์ค์ด๋ฆ. (์คํ์๋ง ์ง์ค)
์คํ๋ง ์ปจํ
์ด๋
= ์ธํฐํ์ด์ค
= ApplicationContext
์คํ๋ง ์ปจํ ์ด๋๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ
์คํ๋ง ์ปจํ
์ด๋ ์์ฑ ๊ณผ์
1. ์คํ๋ง ์ปจํ
์ด๋ ์์ฑ
2. ์คํ๋ง ๋น ๋ฑ๋ก
3. ์คํ๋ง ๋น ์์กด๊ด๊ณ ์ค์ (์คํ๋ง ์ปจํ
์ด๋๊ฐ ์ค์ ์ ๋ณด๋ฅผ ์ฐธ๊ณ ํด ์์กด๊ด๊ณ๋ฅผ ์ฃผ์
(DI
)ํ๋ค.)
BeanFactory
๋ฅผ ์์๋ฐ์ ๊ฒ์ด ApplicationContext
(BeanFactory + ๋ถ๊ฐ๊ธฐ๋ฅ)
โ๏ธ BeanFactory
- ์คํ๋ง ์ปจํ ์ด๋ ์ต์์ ์ธํฐํ์ด์ค
- ์ญํ : ์คํ๋ง ๋น ๊ด๋ฆฌ, ์กฐํ
์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ ๊ธฐ๋ฅ ๋๋ถ๋ถ์
BeanFactory
์ ๊ณต ๊ธฐ๋ฅ
โ๏ธ ApplicationContext
BeanFactory
๋ฅผ ์์๋ฐ์ ๊ฒ์ดApplicationContext
(BeanFactory + ๋ถ๊ฐ๊ธฐ๋ฅ)๐ ApplicationContext ๋ถ๊ฐ๊ธฐ๋ฅ
- ๊ตญ์ ํ ๊ธฐ๋ฅ
- ํ๊ฒฝ ๋ณ์
- ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ฒคํธ
- ํธ๋ฆฌํ ๋ฆฌ์์ค ์กฐํ
BeanFactory
, ApplicationContext
= ์คํ๋ง ์ปจํ
์ด๋
๐ ๋จ์ถํค (mac)
command + ,(๋ฐ์ )
: preferences
preferences โ keymap ๊ฒ์
: ๋จ์ถํค ํ์ธ
command + shift + enter
: tap ์น ๋ ;(์ธ๋ฏธ์ฝ๋ก )๊น์ง ๋ฃ์ด ํ ์ค ์์ฑ
psvm + enter
: public static void main(String[] args){} ์์ฑ
command + n
: toString() ์ ๊ฒ์ํด ์์ฑํ ์ ์์ (์ถ๋ ฅ์ ๋ณด๊ธฐ ์ฝ๊ฒ ํจ)
command + shift + t
: ํ ์คํธ ์์ฑ
option + enter
+Add static import -
: Assertions.assertThat์ static์ผ๋ก ๋ฐ๊พธ๊ธฐ