Title: Clean Code ํด๋ฆฐ ์ฝ๋ : ์ ์์ผ ์ํํธ์จ์ด ์ฅ์ธ ์ ์
Author: Robert C. Martin
ํ์์ฑ PPP Principles, Patterns, Practices
1. ๊นจ๋ํ ์ฝ๋
๊นจ๋ํ ์ฝ๋๋
- ์ค๋ณต์ด ์๋ค
- ํ ๊ธฐ๋ฅ๋ง ์ํํ๋ค
- ๋ ผ๋ฆฌ๊ฐ ๊ฐ๋จํ๊ณ , ์์น์๋ ์ต์ ํ๋ ํ์ง ์๋๋ค
- ํ ์คํธ (Unit Test, Indext Test)๊ฐ ์๋ค
- ํด๋์ค, ๋ฉ์๋, ํจ์ ๋ฑ์ ์ต๋ํ ์ค์ธ๋ค. ์๊ฒ ์ถ์ํ ํ๋ค(?)
- Leblanc์ ๋ฒ์น -> ์ ๋ ๋ด๊ฐ ๋์๊ฐ์ ์ต์ ํ๋ ํ์ง ์๋๋ค. ์์ฑํ ๋๋ถํฐ ์ข์ ์ฝ๋๋ก ๋ง๋ ๋ค.
SRP, Single Responsible Principle ๋จ์ผ์ฑ ์์์น
- A class should have only one reason to change. # ํด๋์ค๊ฐ ๋ณ๊ฒฝ๋ ์ด์ ๋ ๋จ ํ๋์ฌ์ผ ํ๋ค.
- ํ๋์ ๋ชจ๋์ ํ๋์, ์ค์ง ํ๋์ ์กํฐ์ ๋ํด์๋ง ์ฑ ์์ ธ์ผ ํ๋ค
- Book ํด๋์ค -> Reader์ Author ์กํฐ๊ฐ ์์ ์ ์๋ค https://siyoon210.tistory.com/155
OCP, Open Closed Principle ๊ฐ๋ฐฉํ์๋ฒ์น https://nesoy.github.io/articles/2018-01/OCP
- ๊ธฐ์กด์ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ง ์์ผ๋ฉด์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์๋๋ก ์ค๊ณ๊ฐ ๋์ด์ผ ํ๋ค.
- ๋ฌด์์ด ๋ณํ๋ ๊ฒ์ธ์ง. ๋ฌด์์ด ๋ณํ์ง ์๋ ๊ฒ์ธ์ง ๊ตฌ๋ณํ์.
LSP, Liskov Substitution Principle ๋ฆฌ์ค์ฝํ ์นํ ๋ฒ์น https://nesoy.github.io/articles/2018-03/LSP
- ์์ ํด๋์ค๋ ์ต์ํ ์์ ์ ๋ถ๋ชจ ํด๋์ค์์ ๊ฐ๋ฅํ ํ์๋ ์ํํ ์ ์์ด์ผ ํ๋ค. ์์ ํ์ ์ ๊ฐ์ฒด๋ฅผ ํ์ ํ์ ์ ๊ฐ์ฒด๋ก ์นํํด๋ ์์ ํ์ ์ ์ฌ์ฉํ๋ ํ๋ก๊ทธ๋จ์ ์ ์์ ์ผ๋ก ๋์ํด์ผ ํ๋ค.
- ํด๊ฒฐ๋ฐฉ๋ฒ: ์์ ๊ด๊ณ๋ฅผ ์ ๊ฑฐํ๋ค. ๋๋ ํน์ ๋ฉ์๋๋ฅผ ์์ ํด๋์ค๋ก ์ฎ๊ธด๋ค.
ISP, Interface Segregation Principle ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ๋ฒ์น
- ์ํํธ์จ์ด ์ค๊ณ์๋ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ ์์กดํ์ง ์์์ผ ํ๋ค
DIP, Dependency Inversion Principle ์์กด์ฑ ์ญ์ ๋ฒ์น
- ๊ณ ์์ค ์ ์ฑ ์ ๊ตฌํํ๋ ์ฝ๋๋ ์ ์์ค ์ธ๋ถ์ฌํญ์ ๊ตฌํํ๋ ์ฝ๋์ ์ ๋๋ก ์์กดํด์๋ ์ ๋๋ค. ๋์ ์ธ๋ถ์ฌํญ์ด ์ ์ฑ ์ ์์กดํด์ผ ํ๋ค.
2. ์๋ฏธ์๋ ์ด๋ฆ
- (๋ญ ํ๋ ๋ณ์์ธ์ง) ์๋๋ฅผ ๋ถ๋ช ํ ๋ฐํ๋ผ
- ์กด์ฌ ์ด์ ? ์ํ ๊ธฐ๋ฅ? ์ฌ์ฉ ๋ฐฉ๋ฒ?
- If๋ฌธ์ ํ๋๊ทธ์ ์กฐ๊ฑด์ผ๋ก Boolean ์ ๋ฐํํ๋ ํจ์๋ฅผ ๋ฃ์ด๋ ๋๋ค = ์ธ์๋ก boolean๊ฐ์ ์ง์ ์ฌ์ฉํ์ง ๋ง๋ผ.
- ์คํด๋ฅผ ์ผ์ผํค๋ ํํ์ ์ด๋ฆ์ผ๋ก ์ฐ์ง ๋ง๋ผ
- ์๋ ์๋ ํจ์ ์ด๋ฆ, O๋ l ๋ฑ..
- ์๋ฏธ์๊ฒ ๊ตฌ๋ถํ๋ผ
- source, destination ์ฒ๋ผ
- ์๋ฏธ ์๋ ๋จ์ด๋ฅผ ์จ๋ผ (์๋ ๋จ์ด๋ฅผ ์ง์ด๋ด์ง ๋ง๋ผ)
- ๊ฒ์ํ๊ธฐ ์ฌ์ด ์ด๋ฆ์ ์จ๋ผ -> ์ด๋ฆ์ ๊ธธ์ด๋ ์ ์ฉ ๋ฒ์ ํฌ๊ธฐ์ ๋น๋กํด์ผ ํ๋ค
- i,j ๋ฑ์ ์์ ๋ฉ์๋์์ ๋ก์ปฌ ๋ณ์๋ก๋ง ์ ๋นํจ
- ์์๋ ๋๋ฌธ์๋ก ํํํด์ ์ฌ์ฉ MAX_INT ๊ฐ์.
- ์ธ์ฝ๋ฉ์ ์ต์ํ ํ๊ณ (ํผํ๋ค)
- ํด๋์ค ์ด๋ฆ, ๊ฐ์ฒด ์ด๋ฆ: ๋ช ์ฌ๋ ๋ช ์ฌ๊ตฌ. ๋์ฌ๋ ์ฌ์ฉํ์ง ์๋๋ค.
- Customer, WikiPage, Account, AddressParser
- ํผํ ๊ฒ : Manager, Processor, Data, Info ๋ฑ๊ณผ ๊ฐ์ ๋จ์ด
- ๋ฉ์๋ ์ด๋ฆ: ๋์ฌ, ๋์ฌ๊ตฌ
- postPayment, deletePage, save ๋ฑ
- get, set, is ๋ฑ๋ ์ข์ (Java)
- ์ถ์์ ์ธ ๊ฐ๋ ํ๋์ ๋จ์ด ํ๋ ์ฌ์ฉ
- Fetch, retrieve, get ์ค ํ๋ / controller, manager, driver ์ค ํ๋
- Add์ ๊ฐ๋ ์ด ๋ค๋ฅธ ์๋ก์ด ํจ์๋ insert ๋๋ append๊ฐ ์ ๋น
์ด๋ฆ ์ง๋ ์๋ น
- ํด๋ฒ ์์ญ ์ด๋ฆ : queue, visitor ๋ฑ
- ํด๋ฒ ์์ญ ์ ๋นํ ์ด๋ฆ์ด ์์ผ๋ฉด ๋ฌธ์ ์์ ๋์จ ์ด๋ฆ์ ์ฌ์ฉํ๋ค
- ๋งฅ๋ฝ์ ์ถ๊ฐํ๋ค (๋๋ ์ ๋์ด๋ฅผ ์ถ๊ฐํ๋ค. firstName -> addFirstName)
3. ํจ์
ํจ์: ํ๋ก๊ทธ๋จ์ ๊ฐ์ฅ ๊ธฐ๋ณธ ๋จ์
ํจ์๋ฅผ ์ง๋ ์์ - ์๋ ์ฒ์๋ถํฐ ํ! ์ง๋ด์ง ๋ชปํ๋ค.
- ์ผ๋จ ๋ง๋ ๋ค (์ด์)
- ๋จ์ ํ ์คํธ๋ฅผ ์ฒ ์ ํ๊ฒ ๋ง๋ ๋ค
- ์ฝ๋๋ฅผ ๋ค๋ฌ๊ณ , ํจ์๋ฅผ ๋ง๋ค๊ณ , ์ด๋ฆ์ ๋ฐ๊พธ๊ณ , ์ค๋ณต์ ์ ๊ฑฐํ๋ค.
- ๋ฉ์๋ ์๋ฅผ ์ค์ด๊ณ ์์๋ฅผ ์ค์ธ๋ค. ๊ณ์ ๋จ์ํ ์คํธ๋ ํต๊ณผํด์ผ ํ๋ค.
ํจ์๋ฅผ ๋ง๋๋ ๊ท์น
- ์๊ฒ ๋ง๋ค์ด๋ผ
- if, else ๋ฑ์ ๋ฌธ ์์ ๋ค์ด๊ฐ๋ ๋ด์ฉ์ ํ ์ค์ด์ด์ผ ํ๋ค (ํ ์ถฉ๊ฒฉ;;)
- ํ ๊ฐ์ง๋ง ํด๋ผ
- ABC -> doA(), doB(), doC() ๊ทธ ์์์ ๋ doBasicA() doAnotherA()์..
- "ํจ์๋ ํ ๊ฐ์ง๋ฅผ ํด์ผ ํ๋ค. ๊ทธ ํ ๊ฐ์ง๋ฅผ ์ ํด์ผ ํ๋ค. ๊ทธ ํ ๊ฐ์ง๋ง์ ํด์ผ ํ๋ค."
- ํ๊ฐ์ง๋? ์ถ์ํ ์์ค์ด ํ๋์ธ ๋จ๊ณ๋ง ์ํํ๋ค๋ฉด ๊ทธ ํจ์๋ ํ ๊ฐ์ง ์์ ๋ง ํ๋ ๊ฒ. ์ฌ๋ฌ ์น์ ์ผ๋ก ๋๋๊ธฐ ์ด๋ ต๋ค
- ํจ์๋ด ์ถ์ํ ๋ ๋ฒจ์ ๋ชจ๋ ๋์ผํด์ผ ํ๋ค!
- ์: getHtml()์ ์ถ์ํ ์์ค์ด ๋๊ณ .append("\n")์ ๋ฎ์ ๊ฒ
- ์ฝ๋์ ๋ด๋ ค๊ฐ๊ธฐ ๊ท์น: ํ ํจ์ ๋ค์์๋ ์ถ์ํ ์์ค์ด ํ ๋จ๊ณ ๋ฎ์ ํจ์๊ฐ ์จ๋ค.
- ์์ ์ ์ธ ์ด๋ฆ์ ์ธ ๊ฒ (๋์ฌ + ๋ช ์ฌ ์ฒ๋ผ) ์ง์๊ฐ๋ ์ด๋ฆ๋ค์ ์ผ๊ด๋๊ฒ ์ง์ด๋ผ
- ์ธ์ - ์ธ์ ๊ฐฏ์๋ ์ ์ ์๋ก ์ข๋ค! (0์ด ์ต๊ณ !) 3๊ฐ ์ด์์ ๊ฐ๋ฅํ ํผํ๋ค.
- ํจ์์ ์ง๋ฌธ์ ๋์ง๋ค. fileExists("My File")
- ์ธ์๋ฅผ ๋ญ๊ฐ๋ก ๋ณํํด ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค fileOpen("MyFile")
- ์ด๋ฒคํธ ๊ฐฏ์(????) passwordAttemptsFailedNtimes(int attempts)
- ์ ์ผํ๊ฒ 1๊ฐ ์ ๋ ๊ด์ฐฎ์ ๊ฒฝ์ฐ ์ . ์ธ์๊ฐ ์ธ๊ฐ ์ ๋ ๋๋ฉด ์ธ์๋ฅผ ํด๋์ค ํ๋๋ก ๋ฌถ์ด์ ์ฃผ๋ ๊ฒ์ด ๋ซ์ง ์์์ง ์๊ฐํด๋ณธ๋ค (์: int x, int y -> Point center)
- ์ ๋๋ก ์ธ์์ bool ๊ฐ์ ๋๊ธฐ์ง ๋ง๋ผ ใ ใ
- ๋จ์ผํญ: ๋์ฌ/๋ช
์ฌ write(name) writeField(name)
ํจ์์ ์ธ์๋ฅผ ๋ฃ๋๋ค assertExpectedEqualsActual(expected, actual) - ๊ฐ์ฒด๋ฅผ ์ ๋ฐ์ดํธํ๋ ํจ์๋ํจ์๊ฐ ์ํ ๊ฐ์ฒด ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ๋ซ๋ค
- appendFooter(report) ๋ณด๋ค report.appendFooter()์ด ๋ซ๋ค๋ ๊ฒ.
- ํจ์๋ ๋ญ๊ฐ๋ฅผ ์ํํ๊ฑฐ๋, ๋ฐํ์ ํ๊ฑฐ๋ ๋ ์ค์ ํ๋๋ค! (๋๋ค ํ๋ฉด ์๋จ)
- ์๋ฌ ์ฝ๋๋ฅผ ๋ฐํํ๋ ๊ฒ๋ณด๋ค๋ try catch ์์ธ ์ฒ๋ฆฌ๊ฐ ๋ซ๋ค
- Try catch ์์๋ ์๋ ๋ด์ฉ์ ๋ณ๋ ๋ธ๋ก์ ๊ฐ์ง ํจ์๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ด ๋ซ๋ค
4. ์ฃผ์
- ์ฃผ์์ ์์ ์๋ก ์ข๋ค. ์ฃผ์์ด ํ์ํ ๋๋ง๋ค ์๊ฐํ๋ค -> ์ฝ๋๋ก ํํํ ๋ฐฉ๋ฒ์ ์์๊น?
์ข์ ์ฃผ์
- ๋ฒ์ ์ธ ์ฃผ์ Copyright, ๋ผ์ด์ ์ค ๋ฑ
- ์๋๋ฅผ ์ค๋ช ํ๋ ์ฃผ์ (์๊ณ ๋ฆฌ์ฆ ๊ฐ์)
- ๊ฒฝ๊ณ ์ฃผ์ (์ค๋ ๊ฑธ๋ฆฐ๋ค...๋ฑ)
- TODO ์ฃผ์
- ์ค์์ฑ์ ๊ฐ์กฐํ๋ ์ฃผ์
๋์ ์ฃผ์
- ๊ฐ์ ์ด์ผ๊ธฐ๋ฅผ ์ค๋ณตํ๋ ์ฃผ์
- ๋ซ๋ ๊ดํธ์ ๋ค๋ ์ฃผ์
- ์ฃผ์์ผ๋ก ์ฒ๋ฆฌํ ์ฝ๋ -> ์ฐจ๋ผ๋ฆฌ ์์ค ์ฝ๋ ๊ด๋ฆฌ ํ๋ก๊ทธ๋จ์ ์์ ์ตํ๋ผ ใ ใ
5. ํ์ ๋ง์ถ๊ธฐ
- ํ์๋ผ๋ฆฌ๋ ์ฝ๋ ํ์์ ๋ง์ถ๋ค
- ๊ฐ๋ ์ ๋น ํ์ผ๋ก ๋ถ๋ฆฌํ๋ค
- ์๋ก ๋ฐ์ ํ ๊ฐ๋ ์ ์ธ๋ก๋ก ๊ฐ๊น์ด ๋ฌ์ผ ํ๋ค (๋๋๋ก ํ ํ์ผ์ ๋๋ค)
- ์ฐ๊ด์ฑ = ํ ๊ฐ๋ ์ ์ดํด๋๋๋ฐ ๋ค๋ฅธ ๊ฐ๋ ์ด ์ค์ํ ์ ๋
- Dependency(์ข ์ํจ์, ํธ์ถํ๋ ํจ์) ๊ฐ๊น์ด ๋๊ณ , ํธ์ถํ๋ ํจ์ ์๋์ ํธ์ถ๋๋ ํจ์๋ฅผ ๋๋ค
- ์์ค์ฝ๋๊ฐ ๊ณ ์ฐจ์์์ ์ ์ฐจ์์ผ๋ก ์์ฐ์ค๋ฝ๊ฒ ๋ด๋ ค๊ฐ๋ฉด์ ์ฝํ๋ค
- ๊ฐ์ฅ ์ค์ํ ๊ฐ๋ ์ ๋งจ ์์, ๊ฐ๋จํ๊ฒ ํํํ๋ค. ์ธ์ธํ ๋ด์ฉ์ ์๋์ ๋๋ค.
6. ๊ฐ์ฒด์ ์๋ฃ๊ตฌ์กฐ
- ํด๋์ค: ์ฌ์ฉ์๊ฐ ๊ตฌํ์ ๋ชจ๋ฅธ ์ฑ ์๋ฃ์ ํต์ฌ์ ์กฐ์ํ ์ ์์ด์ผ ์ง์ ํ ์๋ฏธ์ ํด๋์ค๋ค
- ์ ์ฐจ์ ์ธ ์ฝ๋(์๋ฃ๊ตฌ์กฐ) vs. ๊ฐ์ฒด์งํฅ์ ์ธ ์ฝ๋
- ์๋ฃ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ ์ ์ฐจ์ ์ฝ๋๋ ๊ธฐ๋ณธ ์๋ฃ ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝํ์ง ์์ผ๋ฉด์ ์ ํจ์๋ฅผ ์ถ๊ฐํ๊ธฐ ์ฝ๊ณ , ๊ฐ์ฒด์งํฅ์ ์ธ ์ฝ๋๋ ๊ธฐ์กด ํจ์๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ๋ ์ ํด๋์ค๋ฅผ ์ถ๊ฐํ๊ธฐ ์ฝ๋ค.
- = ์ ์์ฒ ์ฝ๋๋ ์ ์๋ฃ๊ตฌ์กฐ ์ถ๊ฐ๊ฐ ์ด๋ ต๊ณ (๋ชจ๋ ํจ์๋ฅผ ๊ณ ์ณ์ผ ํ๊ณ ), ๊ฐ์ฒด ์งํฅ ์ฝ๋๋ ์ ํจ์๋ฅผ ์ถ๊ฐํ๊ธฐ ์ด๋ ต๋ค(๋ชจ๋ ํด๋์ค๋ฅผ ๊ณ ์ณ์ผ ํ๋ค). ใ กใ ก?
- = ์๋ก์ด ์๋ฃํ์ ์ ์ถ๊ฐํ๋ ์ ์ฐ์ฑ์ด ํ์ํ๋ฉด ๊ฐ์ฒด๋ฅผ, ์๋ก์ด ๋์์ ์ถ๊ฐํ๋ ์ ์ฐ์ฑ์ด ํ์ํ๋ฉด ์๋ฃ๊ตฌ์กฐ์ ์ ์ฐจ์ ์ธ ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ค.
- ๋๋ฏธํฐ ๋ฒ์น : ๋ชจ๋์ ์์ ์ด ์กฐ์ํ๋ ๊ฐ์ฒด์ ์์ฌ์ ์ ๋ชฐ๋ผ์ผ ํ๋ค๋ ๋ฒ์น (๊ฐ์ฒด๋ ์๋ฃ๋ฅผ ์จ๊ธฐ๊ณ ํจ์๋ฅผ ๊ณต๊ฐํ๋ค = ๊ฐ์ฒด๋ ๋์์ ๊ณต๊ฐํ๊ณ ์๋ฃ๋ฅผ ์จ๊ธด๋ค. )
- ๊ฐ์ฒด๋ "๋ฌด์์ ํ๋ค"๋ฅผ ํ๊ธฐํด์ผํ๋ฉฐ, ์๋ด๋ฅผ ๋๋ฌ๋ด๋ฉด ์๋๋ค.
์์: obj.createScratchFileStream
7. ์ค๋ฅ์ฒ๋ฆฌ
- TDD + ์์ธ์ฒ๋ฆฌ(try except)๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ค
- ํ์ธ๋์ง ์์ ์ค๋ฅ(Unchecked error)๋ฅผ ์ฌ์ฉํ๋ค - ?
- ์์ธ์ ์๋ฏธ๋ฅผ ์ ๊ณตํ๋ค (์ ๋ค context) - ์คํจ ์ฐ์ฐ ์ด๋ฆ, ์คํจ ์ ํ. ํ์ํ๋ค๋ฉด ๋ก๊น ๋.
- ์์ธ์ฒ๋ฆฌ์ฉ ํด๋์ค๋ฅผ ์ด์ฉํ ๊ฐ์ธ๊ธฐ ๊ธฐ๋ฒ (์ธ๋ถ API๋ฅผ ํ์ฉํ ๋ ์ ์ฉํ๋ค). ๋น์ฆ๋์ค ๋
ผ๋ฆฌ์ ์ค๋ฅ ์ฒ๋ฆฌ๋ฅผ ๋ถ๋ฆฌํ๋ค!
: error๋ฅผ ๋ด๋ ๊ฐ์ฒด๋ฅผ local ํด๋์ค ๊ฐ์ฒด ํ๋๋ก ๊ฐ์ธ์, ๋ด๋ถ์์ ํ๋ฒ ์์ธ ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ๊ณ , ๋จ์ ์์ธ ์ฒ๋ฆฌ ์ ํ๋ค๋ง ๋ฐ์์ ํด์ฃผ๋ ์ -> ์์ธ ์ฒ๋ฆฌ๋ฅผ ์ ํ๋ณ๋ก ๋ฌถ์ด์ ์ฒ๋ฆฌํ ์ ์๋ค!
8. Boundaries ์ธ๋ถ์ฝ๋ ํตํฉํ ๋
์ธ๋ถ ์ฝ๋๋ฅผ ํตํฉ์ํฌ๋ ๊ฒฝ๊ณ๋ฅผ ๊น๋ํ๊ฒ ์ฒ๋ฆฌํ๋ ๊ธฐ๋ฒ๊ณผ ๊ธฐ๊ต๋ฅผ ์๋ดํ๋ Chapter
- ๊ฐ๋ฅํ ๊ฒฝ๊ณ๋ฅผ ์ค์ด๊ณ , ์ธ๋ถ ์ฝ๋์ dependency๋ฅผ ๋ฎ์ถ๋ค. ๋ฐฉ๋ฒ์ ์บก์ํ, ๋๋ ์๋ก์ด ํด๋์ค๋ก ๊ฐ์ธ๊ธฐ๋ค.
- ์ํด๋์ค: ์ธ๋ถ API์ ๊ฐ์ฒด(์ธ์คํด์ค)๋ฅผ ์ธ๋ถ๋ก ๋๊ธฐ์ง ์๋๋ค (์ฒ์ ์ฒ๋ฆฌํ๋ ํด๋์ค ์์์๋ง ์ฒ๋ฆฌํ๋๋ก ํ๋ค)
- ADAPTER ํจํด* - ?? ์บก์ํ ๋ฐฉ๋ฒ - ์ค๊ณ ํจํด ๊ธฐ๋ฒ ์ค ํ๋.
- ์ธ๋ถ ํจํค์ง ์ฝ๋๋ ํ์ตํ ์คํธ๋ฅผ ํด๋ณด๊ณ (Learning Tests) ์ตํ๋ค. ์์๋๋ก ๋๋์ง ๊ฒ์ฆํ๊ธฐ ์ํด์.
- ์ถ๊ฐ ๋ฒ์ ์ด ๋์์๋๋ ๋์ ์ฝ๋์ ํฉ์น๊ธฐ ์ ์ ํธํ์ฑ์ ํ์ธํ ์ ์๋ค
- ์์ง ๋ถ์ด์ง ์์ ์ธ๋ถ ์ฝ๋๋ฅผ ์ฌ์ฉํด์ผ ํ ๋๋ fake ํด๋์ค๋ ๊ตฌํ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค์ด์ ์ฌ์ฉํ๋ค
*ADAPTER ํจํด - https://jusungpark.tistory.com/22
9. ๋จ์ ํ ์คํธ Unit Tests
TDD ๋ฒ์น ์ธ ๊ฐ์ง
- ์คํจํ๋ ๋จ์ํ ์คํธ๋ฅผ ์์ฑํ ๋๊น์ง ์ค์ ์ฝ๋๋ฅผ ์์ฑํ์ง ์๋๋ค
- ์ปดํ์ผ์ ์๋์ง๋ง ์คํ์ด ์คํจํ๋ ์ ๋๋ก๋ง ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ค
ํ์ฌ ์คํจํ๋ ํ ์คํธ๋ฅผ ํต๊ณผํ ์ ๋๋ก๋ง ์ค์ ์ฝ๋๋ฅผ ์์ฑํ๋ค
- ํ ์คํธ ์ฝ๋์๋ ๊ฐ๋ ์ฑ์ด ์ค์ํ๋ค. ๊ฐ๋ ์ฑ. ๊ฐ๋ ์ฑ. ๊ฐ๋ ์ฑ.
- ํ ์คํธ ๊ตฌ์กฐ
- BUILD-OPERATE-CHECK