ํด๋ฆฐ์ฝ๋๊ฐ ํ์ํ ์ด์
์ฐ๋ฆฌ๋ ํผ์ ์ผํ์ง ์๊ณ ๋๋ฃ์ ํจ๊ป ์ผํ๋ค. ์ฐ๋ฆฌ๋ ์ฝ๋๋ฅผ ์ฝ๋ ๋ ์์ผ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
ํธํ๊ฒ ์ดํดํ๊ณ ๋น ๋ฅด๊ฒ ๊ณ ์น ์ ์๋๋ก ํ๊ธฐ ์ํด ํด๋ฆฐ์ฝ๋๊ฐ ํ์ํ๋ค.
## ์๋ฏธ์๋ ์ด๋ฆ
1. ์๋๋ฅผ ๋ถ๋ช ํ ๋ฐํ๋ผ.
- ์ด๋ฆ์ผ๋ก ์๋๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ํ์ ๋ผ์ผ ํ๋ค.
- ๋ณ์์ ์ด๋ฆ์ด ๊ธธ์ด์ง๋ฉด ์ด๋กํ๋?
=> ์ด๋ฆ์ด ๊ธธ์ด๋ ์ง๊ด์ ์ธ๊ฒ ์ข๋ค๊ณ ์๊ฐํ๋ค.
๋ณ์ ์๋ฌด๋ฆฌ ๊ท์ฐฎ๊ณ ํ๋ค์ด๋ ์๋ฏธ๊ฐ ์ ํํ์ง ์์ผ๋ฉด ๋ช ํํ๊ฒ ์์ ํด์คฌ์ผ๋ฉด ์ข๊ฒ ๋ค.
- ํ์ฌ๋ง๋ค ์ฉ์ด์ฌ์ ์ด ์๊ณ ๋ฉํ๋ฐ์ดํฐ๊ฐ ์๋ค.
=> ์ด๋ฌํ ๋ฌธํ๊ฐ ์๋ค๋ฉด ๋ฐ๋ฅด๊ณ , ์ด๊ฒ๋ณด๋ค๋ ๋๋๋ก ๋ช ํํ ์ด๋ฆ์ด ์์ผ๋ฉด ์ข๊ฒ ๋ค.
2. ๊ทธ๋ฆ๋ ์ ๋ณด๋ฅผ ํผํ๋ผ.
- ๋๋ฆฌ ์ฐ์ด๋ ์๋ฏธ๊ฐ ์๋ ๋จ์ด๋ฅผ ๋ค๋ฅธ ์๋ฏธ๋ก ์ฌ์ฉํ์ง ๋ง์.
- ์๋ก ํก์ฌํ ์ด๋ฆ์ ์ฌ์ฉํ์ง ์๋๋ก ์ฃผ์ํ์.
3. ์๋ฏธ ์๊ฒ ๊ตฌ๋ถํ๋ผ.
4. ๋ฐ์ํ๊ธฐ ์ฌ์ด ์ด๋ฆ์ผ๋ก ์ ํ์.
5. ๊ฒ์ํ๊ธฐ ์ฌ์ด ์ด๋ฆ์ ์ฌ์ฉํ๋ผ.
- ๊ฐ๋ฐ์ ํ๋ค๊ฐ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ๋ก๊ทธ์์ ๊ฒ์ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
6. ํ์ ๊ณผ ๊ด๋ จ๋ ๋ฌธ์์ด์ ๋ฃ์ง ๋ง์๋ผ.
- ํ์ ์ด ๋ณํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
7. ํ ๊ฐ๋ ์ ํ ๋จ์ด๋ฅผ ์ฌ์ฉํ๋ผ.
8. ์๋ฏธ ์๋ ๋งฅ๋ฝ์ ์ถ๊ฐํ๋ผ.
9. ๋ถํ์ํ ๋งฅ๋ฝ์ ์์ ๋ผ.
## Function : ํ ๊ฐ์ง๋ง ํ์.
1. ์๊ฒ ๋ง๋ค์ด๋ผ. (SRP)
- ํ ๊ฐ์ง๋ง ํด๋ผ.
- ํจ์ ๋ด๋ถ๊ฐ ์์ฐ์ค๋ฝ๊ฒ ์ชผ๊ฐค ์ ์๋ค๋ฉด ์ฌ๋ฌ ์์ ์ ํ๊ณ ์๋ค๋ ์๋ฏธ์ด๋ค.
- ์ถ์ํ ์์ค์ด ํ ๋จ๊ณ์ฉ ๋ฎ์์ ธ์ผ ํ๋ค.. => ์ด๊ฒ ๋ฌด์จ ๋ง์ด์ง?
=> ๋ฐ๋ณตํด์ ์ฌ์ฉํ์ง ์์๋ ํจ์๋ก ๋ง๋๋ ๊ฒ์ด ์ข๋ค.
```
if (!Optional.ofNullable(service.getTest().execute().body()).isPresent())
```
2. Switch๋ฌธ
- ์ ๋งํ๋ฉด ์ฐ์ง ๋ง์๋ผ.
- ๋ฌธ์ ์
1) ํจ์๊ฐ ๊ธธ๋ค.
2) ํ ๊ฐ์ง ์ผ๋ง ํ์ง ์๋๋ค.
3) SRP๋ฅผ ์๋ฐํ๋ค.
4) OCP๋ฅผ ์๋ฐํ๋ค.
- ํด๊ฒฐ๋ฐฉ๋ฒ
1) Switch๋ฅผ ์ธ ๋๋ Controller, Service๋จ์ด ์๋๋ผ ๊ฝ๊ฝ์จ๊ฒจ์ ์ฌ๋๋ค์ด ๋ชป๋ณด๊ฒ ํ๋ค.
=> ํธ๋ค๋ฌ๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ๋ค.
3. ํจ์์ ์ธ์ ์ข ๋ฅ์ ๊ฐ์
- ์ต๋ํ ์๋ ๊ฒ์ด ์ข๋ค. => 1~2๊ฐ๊ฐ ์ ๋นํ๋ค.
- ์ธ์๋ input ๊ด๋ จ (requestbody, requestparam, ๊ณ ๊ฐ์ ๋ ฅ๊ฐ) ๊ฐ์ ๋ฃ์ด์ค๋ค.
4. ๋ช ๋ น๊ณผ ์กฐํ๋ฅผ ๊ตฌ๋ถํด๋ผ.
5. ์ค๋ฅ์ฝ๋๋ณด๋ค ์์ธ๋ฅผ ์ฌ์ฉํ๋ผ! ( if else๋ก ์ค๋ฅ์ฒ๋ฆฌ ํ์ง๋ง์๋ผ!! )
- Try-Catch ๋ฌธ์ผ๋ก ์์ธ์ฒ๋ฆฌ๋ฅผ ํ๋ ๊ฒ์ด ์ข ๋ ํ๋ช ํ๋ค.
- Try-Catch VS throws ?
--- try-catch๋ ์ ๋งํ๋ฉด Controller์์ ์ฌ์ฉ
--- throws๋ ์ ๋งํ๋ฉด Service์์ ์ฌ์ฉ
--- ๋น์ฆ๋์ค ๋ก์ง์ Service์ ํจ์๋ค์ด ํฉ์ณ์ ธ์ ์คํ๋ ๊ฒฐ๊ณผ๋ค์ ๊ฐ์ง๊ณ ์์ ์ ์ํํ๋ค. ๋๋ฌธ์ ํ ๊ณณ์ ๋ชจ์ผ์.
=> ์ด๊ฑด ๋ต์ด ์๋ค.
## ๋ฆฌํฉํ ๋ง
- ๋ฉค๋ฒ๊ฐ์ฒด๋ฅผ private์ผ๋ก ์ ์ธํ์ผ๋ getter๋ก ์ ๊ทผํ๋ค. => ์๋ํ ์๋ฐ.
- ๋ด๋ถ ๊ตฌํ์ด ๋ ธ์ถ๋๊ณ ์๋ค.
- getter, setter๋ ์ธ์คํด์ค๋ฅผ ํธ์ถํ๋ ๊ฒ์ด๋ค.
- public์ผ๋ก ํ์๋ฅผ ํ๋๋ก ํ๋ ๊ฒ์ด ์ข๋ค.
์บก์ํ
- ์ธ๋ถ์ ๋ ธ์ถ์ํฌ ์ ์๋ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค๊ณ (๋น์ฆ๋์ค ๋ก์ง)
- ๋ด๋ถ ๊ตฌํ์ ์ธ์คํด์ค ๋ณ์๋ค์ด ๋์ํ๋ ๊ฒ. => ์ธ๋ถ์ ๋ ธ์ถ๋์ด ์ง์ ์ ์ผ๋ก ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ฒํ๋ฉด ์๋๋ค.
-- ๋ง์๋๋ก ์ฌ์ฉํ ์ ์๊ณ , ๋ณ๊ฒฝํ ๊ฒ๋ค์ด ๋ง์์ง๋ค.
- public์ ์์ฑ์์ ํ์
- ๋ด๋ถ์ ๊ตฌํ : ์ธ์คํด์ค ๋ณ์๋ฅผ ์จ๊ธฐ๊ณ ์ง์ ์ ์ผ๋ก ๋ค๋ค์ง๋ ๊ฒ๋ค์ private. ๋น์ฆ๋์ค ๋ก์ง(๋ค๋ฅธ ํด๋์ค์ ๊ฐ์ฒด๊ฐ ์์ฒญํ์ ๋ ์๋ตํด์ผํ๋ ๊ฒฝ์ฐ, getter์ setter๊ฐ ๋ช ๋ฐฑํ๊ฒ ํ์ํ ๊ฒฝ์ฐ์ ์ฌ์ฉ.)
---> getter, setter๋ฅผ ์จ๋ ๋๋ ๊ฒฝ์ฐ๋ DTO