์ฝ๋๋ฅผ ์ง๋ค๋ณด๋ฉด, ์ด๋์ ์ฝํ๊ณ ์ฅํ์๋ ๋ด ํ๋ก์ ํธ๋ฅผ ๋ง์ฃผํ๋ค. ๋ถ์ง๋ฐํจ์ด ๊ฐ๋ฐ์์ ๋๋ชฉ์ด ์๋๊ฐ๋ผ๊ณ ์๊ฐ๋ ์ ๋๋ก ํญ์ ๊น๋ํจ์ ์ ์งํ๋ ๊ฒ์ด ์ฐธ ์ค์ํ๋ค๋ ์๊ฐ์ด ๋ค๊ณคํ๋ค. ํน์ ๋ฏธ๋์ ๋์ ๊ณผ๊ฑฐ์ ๋๊ฐ ํญ์ ํ์ฌ์์ ์ธ์ฐ๋ ๋ฏํ๊ธฐ๋ ํ๋ค. ์ค๋์ ์ด๋ ๊ฒ ๋ง์ฃผํ๊ธฐ ์ซ์ ์คํ๊ฒํฐ ์ฝ๋์ ๋ํด์ ํ๋ฒ ๋ถ์ํด๋ณด๊ณ , ์ด๋ค ํด๊ฒฐ ๋ฐฉ๋ฒ, ์์น์ ๋๋ ๊ฒ์ด ์ข์์ง ์์๋ณด๋ คํ๋ค.
์คํ๊ฒํฐ ์ฝ๋
- ์คํ๊ฒํฐ ์ฝ๋
- ์์ค ์ฝ๋๊ฐ ๋ณต์กํ๊ฒ ์ฝํ ๋ชจ์ต์ ๋ฉด๋ฐ์ ๋น์ ํ ํํ
- ๋ฌธ์ ์
- ์ ์ง๋ณด์ ์ด๋ ค์
- ์ฌํ์ฉ ๋ถ๊ฐ
- ๋ฒ๊ทธ์ ์จ์
- ์์ฐ์ฑ ์ ํ
- ํํ
- ๋ณต์กํ ์ ์ด๋ฌธ
- ๋ง์ ๋ณ์
- ์๋ชป๋ ์์
- ํด๋์ค ๊ฐ ์์กด๊ด๊ณ ์ ๋ฆฌ๊ฐ ์๋จ
- ์ถ์ํ ๋จ๊ณ์ ๋ถ์ฌ
- ์์ธ
- ๋ชฐ๋ผ์
- ์ฃผ๋์ด์ ๊ฒฝ์ฐ
- ๊ฒ์๋ฌ์
- ์ด๊ฒ ๋ ๋ฌธ์ ๊ฐ ๋ง์
- ๋ชฐ๋ผ์
ํํ์ ๋ฐ๋ฅธ ์คํ๊ฒํฐ ์ฝ๋
์์์ ์์๋ณธ ์คํ๊ฒํฐ ์ฝ๋์ ํํ์ ๋ฐ๋ผ ์์์ ํจ๊ป ํด๋น ๋ถ๋ฅ๋ฅผ ์ดํดํด๋ณด์.
๋ณต์กํ ์ ์ด๋ฌธ
- goto
- branch (if, switch)
- ๋ถ๊ธฐ ๋ณ๋ก case๋ฅผ ๋ฐ์ ธ์ผ ํ๋ค๋ ์ ์์ ์ฝ๊ธฐ ์ด๋ ค์ด ์ฝ๋๋ฅผ ๋ง๋ฆ
- loop (for, while)
- Cyclomatic complexity
- ์ฝ๋์ ๋ณต์ก์ฑ์ ๋ํ๋ด๋ ์งํ ์ค ํ๋
- Control flow ๋ถ๊ธฐ ๊ฐ์๋ฅผ ์ธ์ด ์ธก์
- if ๋ฌธ์ด ์๋ค๋ฉด..?
- ์๋นํ ์ฝ๋ ์ฝ๊ธฐ๊ฐ ์์ํด์ง ๊ฒ
๋ง์ ๋ณ์
- ๋จ์ํ ๊ฐ์ ์ ์ฅํ๋ ์ฉ๋
- ์ ์ด๋ฅผ ์ปจํธ๋กค ํ๊ธฐ ์ํ ์ฉ๋
- ํด๋น ๋ณ์๊ฐ ๋ณํํจ์ ๋ฐ๋ผ ๋ถ๊ธฐ(if, switch) ํน์ loop(for)๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ํ๋ฆ์ ๊ธฐ์ตํด์ผ ํจ
- ์๋นํ ์ฝ๋๊ฐ ์ฝ๊ธฐ ํ๋ค์ด์ง
- ์ ์ด์ ์ฌ์ฉ๋๋ ๋ณ์๊ฐ ๋ง์ ์๋ก ์ฝ๋ ํ๋ฆ์ ๋ฐ๋ผ๊ฐ๊ธฐ ํ๋ฆ
- ๋ณ์๊ฐ ์๋ค๋ฉด..?
- ๋ชจ๋ ๊ฒ์ด ์์๋ผ๋ฉด, ๋ถ๊ธฐ๋ ์์ ๊ฒ์ด๊ณ ๋จ์ํ๊ฒ ์ฝ์ ์ ์์ ๊ฒ
์๋ชป๋ ์์
- ๋์น์ฑ๊ธฐ ์ด๋ ค์ด ์คํ๊ฒํฐ ์ฝ๋
- ์ง์ฑ ์คํ๊ฒํฐ ์ฝ๋
- ์์์ ๊ฐ์ฅ ๊ฐํ ์ปคํ๋ง ์ค ํ๋
- ์ฝ๋๋ฅผ ์ ๋๋ก ์ดํดํ๊ธฐ ์ํด์๋ ๋ถ๋ชจ ํด๋์ค๋ฅผ ๋ฒ๊ฐ์๊ฐ๋ฉด์ ์ฝ์ด์ผ ํจ
- override๋ ํจ์์ ์๋ ํจ์๋ฅผ ๊ตฌ๋ถํด์ ์ฝ์ด์ผ ํจ
- ์๋ชป๋ ์์
- ๋งค์ฐ ๋ค์ํ ์ํฉ์์ ๋ฐ์
- ๊ธฐ๋ณธ์ ์ผ๋ก feature envy ์ํฉ์ ๊ฐ์ ํด๋ณด์.
- Feature Envy
- ๊ธฐ๋ฅ์ ๋ํ ์์ฌ
- ๋ณธ์ฐ์ ์๋ฌด ์ด์ธ์ ๊ธฐ๋ฅ์ด ํด๋น ํด๋์ค์ ๋ค์ด๊ฐ์ ํ ํด๋์ค์์ ์ด์ ์์กด์ ์ด๊ฒ ๋๋ ๊ฒฝ์ฐ
- ๋ฉ์๋์์ ๋ฐ์ํ๋ Code Smell
- Code Smell
- ์ฌ์คํ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ๊ฐ๋ฅ์ฑ์ด ์๋ ์์ค ์ฝ๋์ ํน์ง
- Code Smell
- A Class์ ๋ฉ์๋์ ๋์์ด B Class์ ์ฌ๋ฌ method์ ์์กด์ ์
- Method Move๋ฅผ ํตํด ํด๊ฒฐ์ด ๊ฐ๋ฅํ๋ค.
- Feature Envy
- ์์
- UIViewController โ DefaultNetworkViewController โ RealViewController
- DefaultNetworkViewController
- UIViewController ์์
- viewWillAppear์ network ์์ฒญํ๋ ์ฝ๋ ๋ฃ์ด๋
- ์ผ๋จ View๋ฅผ ๋ด๋นํ๋ ํด๋์ค๊ฐ network ์์ฒญํ๋ ์ฝ๋๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ ๊ฒ์ด ๋ง์ด ์๋๊ธด ํจ
- ์ญํ ์ ๋๋๊ณ ๋ถ๋ฆฌํด์ผ ํจ
- RealViewController
- DefaultNetworkViewController ์์
- super.network ๋ฉ์๋ ํธ์ถ
- ํ์
- RealViewController๋ ๋คํธ์ํฌ ํธ์ถ์ ํ๋ฉด ํ๋ฒ๋ง ํธ์ถ๋ ์ค ์์๋๋ฐ 2๋ฒ ํธ์ถ๋จ
- ViewWillAppear์ ํด๋น ์ฝ๋๊ฐ ์จ๊ฒจ์ ธ ์๊ธฐ ๋๋ฌธ
- ์ํ๋ ๋์์ ํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ฒ๊น ๋น์ฉ์ด ๋ง์ด ๋ค์ด๊ฐ
ํด๋์ค ๊ฐ ์์กด๊ด๊ณ ์ ๋ฆฌ๊ฐ ์๋จ
- ํด๋์ค๊ฐ ์์กด ๊ด๊ณ๊ฐ ๋ณต์กํ์ฌ ํด๋์ค๋ฅผ ๋
์์ ์ผ๋ก ์ฌํ์ฉ ํ ์ ์๋ ์ํฉ
- ํน์ ํด๋์ค ๋์ ์ํด ๋ค๋ฅธ ํด๋์ค๋ฅผ ํ์๋ก ํจ
- ํด๋์ค ํ๋๋ฅผ ์ฌํ์ฉํ๋ ค ํ๋๋ฐ, ์์ญ๊ฐ์ ํด๋์ค๋ฅผ ๊ฐ์ ธ์์ผ ํ๋ ์ํฉ(๋น๋๊ฐ ์๋์)
- ํด๋์ค์ ๋์์ด ์๊ด์๋ ๋ค๋ฅธ ํด๋์ค์ ์ํฅ์ ๋ฏธ์น๋ ๊ฒฝ์ฐ
์ถ์ํ ๋จ๊ณ์ ๋ถ์ฌ
- ๋ํ ์ผ๊น์ง ๋ชจ๋ ์ ๋๋ค๋ฉด ์ฝ๊ธฐ๊ฐ ์ด๋ ค์์ง
- ์ฝ๋๋ ์ถ์ํ๋ ๋ด์ฉ์ผ๋ก ๊ธฐ์ ๋์ด์ผ ํจ
- ์ด ๋, ํ๋์ ํจ์ ์์์๋ ๋์ผํ ๋ ๋ฒจ์ ์ถ์ํ๊ฐ ์ฌ์ฉ๋์ด์ผ ํจ
ํด๊ฒฐ ๋ฐฉ๋ฒ
- OOP๋ฅผ ์ ๋๋ก ๋ค์ ๊ณต๋ถํด์ผ ํด๊ฒฐ์ด ๊ฐ๋ฅ
- ํ๊ต์์ ๋ฐฐ์ด OOP?
- OOP๋ฅผ ๋ฐฐ์ด ๊ฒ์ด ์๋๊ณ OOP Language๋ฅผ ๋ฐฐ์ด ๊ฒ
- ๋์์ธ ํจํด ๊ณต๋ถ
- ์คํ๋ ค ๋๋ฌด ๋ณต์กํ๊ฒ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์๋๊ฐ ํ๋ ์๋ฌธ
- ์ด๊ฑด ์๋ชป์จ์ ๊ทธ๋ฐ ๊ฒ
- ๋ฆฌํฉํ ๋ง ๊ณต๋ถ
- ๊ธฐ์กด์ ๋ ๊ฑฐ์๋ฅผ ์ก๊ธฐ ์ํด ๋ฆฌํฉํ ๋ง
- ๋ฒ๊ทธ๋ฅผ ์ก๊ธฐ ์ํ UnitTest
- ๋ฌธ์ ์
- ์ด๊ฑธ ๋ชจ๋ ๋ค ๋น ๋ฅธ ์๊ฐ๋ด์ ๊ณต๋ถํ๊ธฐ ์ด๋ ค์
- Design Pattern: ๋ชฉ์ ์ดํด๊ฐ ์์ด์ ์ด๋ ค์
- Clean Code: ์ ์ผ๋ก๋ง ํด๋ฆฐ์ฝ๋
- Refactoring: ์ฌ์์ฑ์ธ๊ฐ?
- UnitTest: ๋จน๋๊ฑด๊ฐ?
- ๋ฒ์น
- 10-200 Rule
- ๋ชจ๋ ํจ์๋ 10๋ผ์ธ ์์์ ๋๋๋ค.
- ๋ชจ๋ class(struct, enum)์ 200๋ผ์ธ ์์์ ๋๋์ผ ํ๋ค.
- ํจ๊ณผ
- ๋ฐ์ํ ๋ค์ํ ๋ฌธ์ ๋ค์ ํด๊ฒฐํ๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๊ณผ์
- ๋ฌธ์ ํด๊ฒฐ์ ์์
- ๋ก์ง๊ณผ ๊ตฌ์กฐ์ ๋จ์ํ๋ก ์๊ด๊ด๊ณ ํ์ ์ฉ์ด
- ์งง๊ฒ ์์ฑํ๋ค๋ ๊ฒ์ ์๋ฏธ
- ์์์ ๋ถ๋ฆฌ
- ํ๋์ ํจ์๊ฐ ์ฌ๋ฌ๊ฐ์ ํจ์๋ก ๋ถ๋ฆฌ
- ํ๋์ ํด๋์ค๊ฐ ์ฌ๋ฌ๊ฐ์ ํด๋์ค๋ก ๋ถ๋ฆฌ
- ๋ถ๋ฆฌ๋ฅผ ํ๋ค๋ณด๋ฉด ๊ท์น์ด ์๊น
- ์ถ์ํ ๋ ๋ฒจ์ ์๊ฐํ ์ ๋ฐ์ ์์
- ์์ํจ์์ ๊ฐ๊น์ด ํํ๋ก ๋ณํ
- Cyclomatic complexity๊ฐ ๋์์ง ์ ์์
- ๋ณ์๋ฅผ ๋ง์ด ์ฌ์ฉํ ์ ์์
- ๊ฐ๊ฐ์ ์ญํ ์ด ๋ช ํํด์ง
- ๋ง์ ๊ณ ๋ฏผ์ ํ๊ฒ ๋จ
- 10์ค, 200์ค์ ํ์ํ ๊ณต๊ฐ
- ์ด๋ป๊ฒ ํ๋ฉด ๊ฐ๊ฒฐํ๊ฒ?
- ์ด๋ป๊ฒ ํจ์๋ฅผ ๋ถ๋ฆฌํ ๊น?
- ์ด๋ป๊ฒ ํด๋์ค๋ฅผ ๋ถ๋ฆฌํ ๊น?
- ์์์ ๋ถ๋ฆฌ
- ๊ณ ๋ฏผ์ ์๊ฐ์ ๋ง์ด ํ๋ณดํ๊ธฐ
- ๊ณ ๋ฏผ์ ๋ง์ด ํด์ผ ์ถ๊ฐ ํ์ต ๋ด์ฉ์ ๋ฐ์๋ค์ด๋ ์๋๊ฐ ๋นจ๋ผ์ง
- ํจ์์ ํด๋์ค๋ฅผ ๋ถ๋ฆฌํ๋ค๋ฉด, ์ด๋ป๊ฒ ๋ค์ ๊ตฌ์กฐํ ์ํฌ ๊ฒ์ธ์ง์ ๋ํ ๊ณ ๋ฏผ๋ ํ์
- ๋์์ธ ํจํด
- 10-200 Rule