๋ฐ์ํ
๊ฒ์๊ธ์ ๋ค์ด๊ฐ๊ธฐ ์ ๋ฏธ๋ฆฌ ๋งํ์๋ฉด
์์คํ ํํธ์ ๊ฒฐ๋ก ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์๋ก ๋์ด ๋ฉ๋๋ค.
spring framework์ DSL๋ฅผ ์ฌ์ฉ์ ๊ถ์ฅํ๋ ๊ฑธ๋ก์.
๊ทธ๋ผ์๋ ์ ๊ฑฐ์ ๋ชจ๋๊ฐ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ ์ง์ ๋ํด, ๋ฐ์ ๊ณผ์ ์ ๋ณผ ์ ์์ต๋๋ค.
์ํํธ์จ์ด ์ ์์ ๋์๊ฑด์ค๊ณผ ๊ฐ๋ค

- ์ ์construction์ ์ฌ์ฉuse๊ณผ ์์ฃผ ๋ค๋ฅด๋ค.
- ์ํํธ์จ์ด ์์คํ
์ (์ ํ๋ฆฌ์ผ์ด์
๊ฐ์ฒด๋ฅผ ์ ์ํ๊ณ ์์กด์ฑ์ ์๋ก '์ฐ๊ฒฐ'ํ๋) ์ค๋น๊ณผ์ ๊ณผ
(์ค๋น ๊ณผ์ ์ดํ์ ์ด์ด์ง๋) ๋ฐํ์ ๋ก์ง์ ๋ถ๋ฆฌํด์ผ ํ๋ค. - ๊ด์ฌ์ฌ ๋ถ๋ฆฌ๋ ์ฐ๋ฆฌ ๋ถ์ผ์์ ๊ฐ์ฅ ์ค๋๋๊ณ ๊ฐ์ฅ ์ค์ํ ์ค๊ณ ๊ธฐ๋ฒ ์ค ํ๋๋ค.
๊ด์ฌ์ฌ Concern
์ํํธ์จ์ด์์ ํด๊ฒฐํด์ผ ํ ํน์ ํ ๋ฌธ์ ๋ ์ฑ ์์ ์๋ฏธํฉ๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ ๋ถ๋ถ์ด ๋ด๋นํ๋ ์ญํ ๋๋ ๊ธฐ๋ฅ์ ๊ฐ๋ฆฌํค๋ ๊ฐ๋ ์ผ๋ก,
์นํ์ด์ง๋ฅผ ์๋ก ๋ค๋ฉด ๋ก๊ทธ์ธ/๊ฒ์ํ ๋ฑ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ ํน์ ์์ ๋จ๊ณ๋ ์ค๊ณ์์ ์ฑ ์์ ๊ฐ์ง๊ณ ์๋ค๊ณ ๋ณผ ์ ์์ต๋๋ค.
์ด๊ธฐํ ์ง์ฐ (๊ณ์ฐ ์ง์ฐ)
Lazy Initialization (Lazy Evaluation)

- ์ฅ์
- ์ค์ ๋ก ํ์ํ ๋๊น์ง ๊ฐ์ฒด๋ฅผ ์์ฑํ์ง ์์ผ๋ฏ๋ก ๋ถํ์ํ ๋ถํ๊ฐ ๊ฑธ๋ฆฌ์ง ์๋๋ค.
→ ๋ฐ๋ผ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ํ๋ ์๊ฐ์ด ๊ทธ๋งํผ ๋นจ๋ผ์ง๋ค. - ์ด๋ค ๊ฒฝ์ฐ์๋ nullํฌ์ธํฐ๋ฅผ ๋ฐํํ์ง ์๋๋ค.
- ์ค์ ๋ก ํ์ํ ๋๊น์ง ๊ฐ์ฒด๋ฅผ ์์ฑํ์ง ์์ผ๋ฏ๋ก ๋ถํ์ํ ๋ถํ๊ฐ ๊ฑธ๋ฆฌ์ง ์๋๋ค.
- ๋จ์
- ๋ง์ฝ MyServiceImpl ๊ฐ์ฒด๋ฅผ ์ ํ ์ฌ์ฉํ์ง ์๋๋ผ๋,
MyServiceImpl์์ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ฉด ์ปดํ์ผ ์์ฒด๊ฐ ์๋๋ค.
→ ์์กด์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ผํ๋ ๋จ์ ์ด ์๋ค. - MyServiceImpl์ด ๋ฌด๊ฑฐ์ด ๊ฐ์ฒด๋ผ๋ฉด ํ
์คํธ ๊ฒฝ๋ก์ ์ฑ
์์ด ๋๋ฌด ๋ง์์ง๋ค.
- ๋ฌด์๋ณด๋ค MyServiceImpl์ ๋ชจ๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ผ๋ง ํ๋ ๊ฑด ์ง ์ ์ ์๋ค.
- ๋ง์ฝ MyServiceImpl ๊ฐ์ฒด๋ฅผ ์ ํ ์ฌ์ฉํ์ง ์๋๋ผ๋,
- ํ๋ฒ ์ ๋๋ง ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค๋ฉด ๋ฌธ์ ๋์ง ์์ง๋ง, ์์๋ก ์ฌ์ฉํ๋ค๋ฉด ๋ฌธ์ ์ด๋ค.
Main ๋ถ๋ฆฌ

- ์์คํ
์์ ์์ฑ๊ณผ ์ฌ์ฉ์ ๋ถ๋ฆฌํ๋ ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ด๋ค.
- ์์ฑ๊ณผ ๊ด๋ จํ ์ฝ๋๋ ๋ชจ๋ main์ด๋ main์ด ํธ์ถํ๋ ๋ชจ๋๋ก ์ฎ๊ธด๋ค.
- main ํจ์์์ ์ํธํ
ํ์ํ ๊ฐ์ฒด๋ฅผ ์์ฑํ ํ ์ด๋ฅผ ์ ํ๋ฆฌ์ผ์ด์
์ ๋๊ธด๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ ๊ทธ์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค. - ๋ชจ๋ ํ์ดํ๊ฐ main์ชฝ์์ ์ ํ๋ฆฌ์ผ์ด์
์ชฝ์ ํฅํ๋ค.
→ ์ฆ, ์ ํ๋ฆฌ์ผ์ด์ ์ main์ด๋ ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ ๊ณผ์ ์ ์ ํ ๋ชจ๋ฅธ๋ค.
Factory

- ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ ์์ ์ ์ ํ๋ฆฌ์ผ์ด์
์ด ๊ฒฐ์ ํ ํ์๊ฐ ์๊ธด๋ค.
ex) ์ฃผ๋ฌธ์ ์ → ์ ํ๋ฆฌ์ผ์ด์ ์ LineItem ์ธ์คํด์ค์์ฑ → order. - ์ด ๋๋ Abstract Facotry ํจํด์ ์ฌ์ฉํ๋ค.
→ LineItem์ ์์ฑํ๋ ์์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๊ฒฐ์ ํ์ง๋ง, LineItem์ ์์ฑํ๋ ์ฝ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ชจ๋ฅธ๋ค.
์์กด์ฑ ์ฃผ์
Dependency Injection

- ์ฌ์ฉ๊ณผ ์ ์์ ๋ถ๋ฆฌํ๋ ๊ฐ๋ ฅํ ๋งค์ปค๋์ฆ์ด๋ค.
- ์ ์ด ์ญ์ ๊ธฐ๋ฒ์ ์์กด์ฑ ๊ด๋ฆฌ์ ์ ์ฉํ๋ค.
์ ์ด ์ญ์ Invension of Control
ํ ๊ฐ์ฒด๊ฐ ๋งก์ ๋ณด์กฐ ์ฑ ์์ ์๋ก์ด ๊ฐ์ฒด์๊ฒ ์ ์ ์ผ๋ก ๋ ๋๊ธด๋ค.
๊ฐ๋ก์ด ๊ฐ์ฒด๋ ๋๊ฒจ๋ฐ์ ์ฑ ์๋ง ๋งก์ผ๋ฏ๋ก ๋จ์ผ ์ฑ ์ ์์นSRP๋ฅผ ์งํค๊ฒ ๋๋ค.
- ์์กด์ฑ ๊ด๋ฆฌ ๋งฅ๋ฝ์์ ๊ฐ์ฒด๋ ์์กด์ฑ ์์ฒด๋ฅผ ์ธ์คํด์ค๋ก ๋ง๋๋ ์ฑ
์์ ์ง์ง ์๋๋ค.
→ ์ด๋ฐ ์ฑ ์์ ๋ค๋ฅธ '์ ๋ด'๋งค์ปค๋์ฆ์ ๋๊ฒจ์ผ๋ง ํ๋ค. ๊ทธ๋ ๊ฒ ์ ์ด๋ฅผ ์ญ์ ํ๋ค. - ์ด๊ธฐ ์ค์ ์ ์์คํ
์ ์ฒด์ ํ์ํ๋ฏ๋ก ๋๊ฐ '์ฑ
์์ง' ๋ฉ์ปค๋์ฆ์ผ๋ก 'main'๋ฃจํด์ด๋ ํน์ ์ปจํ
์ด๋๋ฅผ ์ฌ์ฉํ๋ค.
- ์์กด์ฑ์ ์ฃผ์
ํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์ค์ ์setter ๋ฉ์๋๋ ์์ฑ์ ์ธ์๋ฅผ (ํน์ ๋ ๋ค)์ ๊ณตํ๋ค.
์คํ๋ง ํ๋ ์์ํฌ๋ ์๋ฐ DI ์ปจํ ์ด๋๋ฅผ ์ ๊ณตํ๋ค.
→ ๊ฐ์ฒด ์ฌ์ด ์์กด์ฑ์ xmlํ์ผ์ ์ ์ํ๋ค.
→ ์๋ฐ ์ฝ๋์์ ์ด๋ฆ์ผ๋ก ํน์ ํ ๊ฐ์ฒด๋ฅผ ์์ฒญํ๋ค.
๋๋ค์ DI ์ปจํ ์ด๋๋ ํ์ํ ๋๊น์ง๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ง ์๊ณ
๊ณ์ฐ ์ง์ฐ์ด๋ ๋น์ทํ ์ต์ ํ์ ์ธ ํฉํ ๋ฆฌ๋ฅผ ํธ์ถํ๊ฑฐ๋ ํ๋ก์๋ฅผ ์์ฑํ๋ค.
๋ฐ์ํ
'๐ CleanCode' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [CleanCode]์์คํ 2 (2) | 2024.10.10 |
|---|---|
| [CleanCode]ํด๋์ค 2 (1) | 2024.10.08 |
| [CleanCode]ํด๋์ค 1 (0) | 2024.10.08 |
| [CleanCode]๋จ์ ํ ์คํธ (3) | 2024.10.03 |
| [CleanCode]๊ฒฝ๊ณ 2 (1) | 2024.10.01 |