์ข์ ์ฝ๋, ๋์ ์ฝ๋ - 1
๐ ๋ ์ํ๊ธฐ
ใ์ข์ ์ฝ๋, ๋์ ์ฝ๋ใ ๋ ์ ํ๊ธฐ
-
PART 1. ์ด๋ก
- 1์ฅ. ์ฝ๋ ํ์ง
- 2์ฅ. ์ถ์ํ ๊ณ์ธต
- 3์ฅ. ๋ค๋ฅธ ๊ฐ๋ฐ์์ ์ฝ๋ ๊ณ์ฝ
- 4์ฅ. ์ค๋ฅ
-
PART 2. ์ค์
- 5์ฅ. ๊ฐ๋ ์ฑ ๋์ ์ฝ๋๋ฅผ ์์ฑํ๋ผ
- 6์ฅ. ์์ธก ๊ฐ๋ฅํ ์ฝ๋๋ฅผ ์์ฑํ๋ผ
์ ๊ธฐ์ฌ๋ ์ฑํฐ๋ค์ ๋ ์ํ ๋ค ๋ธ๋ก๊ทธ์ ํ๊ธฐ๋ก ์ ๋ฆฌ๊น์ง ํด๋ณด๋ คํ๋ค.
๋ง์ ์ด๊ฐ ๊ทธ๋ฌํ์๋ฏ์ด, ๋ ๋ํ ๊ฐ๋ฐ ์์ ์ค ์ฒ์ ์ฝ๊ณ ๋ ์ ํ๊ธฐ๋ก ๋จ๊ธด ๋์๊ฐ ใClean Codeใ ์๋ค.
ใClean Codeใ ๋ ์ ํ๊ธฐ ๋ฐ๋ก๊ฐ๊ธฐ
-
๐ Clean Code - 1
-
๐ Clean Code - 2
-
๐ Clean Code - 3
-
๐ Clean Code - 4
6์ฅ๊น์ง ์ฝ์ ํ๊ธฐ๋ฅผ ํ์ค๋ก ์์ฝํ์๋ฉด, ใClean Codeใ ์ ์ ์ฌํ๋ค๋ ์๊ฐ์ด ๋ง์ด ๋ค์๋ค. (์์ง ๋ชจ๋ ์ฝ์ง ๋ชปํ์์ง๋ง!)
ํ์ง๋ง, ์ด ์ฑ ์ ์ ์๋ ์์ ์ ์ฃผ์ฅ์ ํ์ด๋๊ฐ๋ ๋ฐฉ์์ด ์กฐ๊ธ ๋ฌ๋๋ค. ์ด๋ป๊ฒ ๋ค๋ฅธ์ง์ ๋ํ์ฌ ์์ธํ ๋ด์ฉ์ ์๋์ ๊ธฐ์ฌํ์๋ค.
1์ฅ. ์ฝ๋ ํ์ง
์ฝ๋ ํ์ง์ด ์ค์ํ ์ด์ (๋น์ฐํ์ง๋ง! ์กฐ๊ธ ๋ ๊ตฌ์ฒด์ ์ผ๋ก)์ ๋ํด ๋ค๋ฃจ๋ฉฐ, ์ข์ ์ฝ๋ ํ์ง์ ๊ฐ์ง ์ํํธ์จ์ด๊ฐ ์ค์ฅ๊ธฐ์ ์ผ๋ก ๊ฐ์ ธ์ค๋ ๋ฒ ๋คํ์ ๋ํด ๊ฐ์กฐํ๋ค.
1์ฅ์ ํ์ค๋ก ์์ฝํ์๋ฉด ๋ค์๊ณผ ๊ฐ๋ค๊ณ ๋๊ผ๋ค.
โ์๋๋ฅด์ง ์์ผ๋ฉด ๋ ๋น ๋ฅด๋ค.โ
1์ฅ์ ์ด ์ฑ ์ ์ ์๊ฐ ์๊ธฐํ๊ณ ์ํ๋ ์ฃผ์ ์ธ โ๊ณ ํ์ง ์ฝ๋โ์ ์ค์์ฑ์ ๋ํด ์ธ๊ธํ๋ค.
์ ๋ขฐํ ์ ์์ผ๋ฉฐ, ์ ์ง๋ณด์๊ฐ ์ฉ์ดํ๊ณ ๋ฒ๊ทธ๊ฐ ๊ฑฐ์ ์๋ ์ํํธ์จ์ด๋ฅผ ์ด๋ฃจ๋ ์ฝ๋์ ๋ํด์ ๋ปํ์ง๋ง ์ค์ํ ์ด์ผ๊ธฐ๊ฐ ์ฃผ๋ ๋ด์ฉ์ด์๋ค.
2์ฅ. ์ถ์ํ ๊ณ์ธต
์ด๋ฒ ์ฅ์ ์ถ์ํ์ ๋ํ ๊ทผ๊ฑฐ์๋ ์์ ๊ณผ ๋ค์ํ ์์๊ฐ ์ข์๋ค.
์ด ์ฑ ์ ํฐ ์ฅ์ ์ด๋ผํ๋ฉด, ๋ค์ํ ์์๊ฐ ํน์ ์ธ์ด๋ก ํธํฅ๋์ด ์ฐ์ฌ์ง์ง ์์๋ค. ๋ค์ํ ์ธ์ด์์ ์์ด๋์ด๋ฅผ ์ฐจ์ฉํ ์์ฌ์ฝ๋(pseudocode)๋ฅผ ์ฌ์ฉํ๋ค๋๊ฒ ๊ฐ์ฅ ํฐ ์ฅ์ ์ด๋ผ ์๊ฐํ๋ค.
2์ฅ์ ๋ค์ํ ์์(๋๋ฌด ํฐ ํด๋์ค ~ ์ธต์ด ๋๋ฌด ์์ ํด๋์ค)๋ฅผ ํ ๋๋ก ๊ฐ๊ฐ์ ์ฅ๋จ์ ์ ๊ผฌ์ง๋๋ค.
ใClean Codeใ ์ ๋น๊ตํ๋ฉด(๊ณ์ ๋น๊ตํ ์์ ์ด๋ค..) ๋
ผ๋์ด ์์ ๋งํ ์ฃผ์ ๋ฅผ ์ค๋ช
ํ ๋๋ ์ ๋นํ ์์ ์ ํจ๊ป ๋
์๋ค์ ์ดํด์์ผ์ค๋ค.
๊ทธ๋ฆฌ๊ณ ์ ์์ ์ฃผ์ฅ์ โ์ฌ๋ฌ ๋ฐฉ๋ฒ๋ก ์ค ํ๋์ผ ๋ฟโ์ด๋ผ ๋์์์ด ์ฃผ์ฅํ๋ค.
์ด๋ฒ ์ฅ์์ ์ด ์ฑ ์ด ๊ฐ์ง ์ฑ๊ฒฉ(?)์ ๊ณ ์ค๋ํ ๋๋ ์ ์์๋๊ฒ ๊ฐ๋ค.
3์ฅ. ๋ค๋ฅธ ๊ฐ๋ฐ์์ ์ฝ๋ ๊ณ์ฝ
3์ฅ๋ถํฐ๋ โ๊ฐ๋ฐ๋ก โ์ ๋ํ ๋ด์ฉ์ด ์ฃผ๋ ๋ด์ฉ์ด์๋๊ฑฐ ๊ฐ๋ค.
๋ค๋ฅธ ๊ฐ๋ฐ์..๋ผ๊ณ ์ง์นญํ์์ง๋ง, ์ด๋ ๋ ์์ ๊ณผ์ ๊ณ์ฝ์ด๊ธฐ๋ ํ๋ค.
โ์์ ์ด ์์ฑํ ์ฝ๋๋ผ๋ 1๋ ํ์๋ ์์ธํ ๋ด์ฉ์ ์์ด๋ฒ๋ฆด ๊ฐ๋ฅ์ฑ์ด ํฌ๋ค. ๋ฏธ๋์ ์์ ์ ๋ณธ์ง์ ์ผ๋ก ๋ค๋ฅธ ๊ฐ๋ฐ์๋ผ๊ณ ๊ฐ์ฃผํด์ผ ํ๋ค.โ
์ด ๊ตฌ๋ฌธ์ ์ฝ๊ณ ๋ค์๋ (ํํ ์ค๋..) 21๊ฐ์ ์ ์ฝ๋๋ฅผ ์์ ํ๋ค ๊ฒฝ์
์ ๊ธ์น ๋ชปํ์๋ค..
๋ด๊ฐ ์ด ์ฝ๋๊ฐ ๋ง๋ ์ถ์ด GitLens๋ฅผ ํตํด ๋ณด๋ ๋ด๊ฐ ๋ง๋ค..?? 21๊ฐ์ ์ ์ ๋์ ๋ฌด์ง๊ฐ ๋๋ฌ๋์ ๋๋ฌด ๋ผ์ํ๊ฒ ๋ค๊ฐ์๋ค. ๐ฅฒ
์ด ์ฝ๋๋ฅผ ๊ณต์ ํ๋ฉฐ, ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ํตํด ์ด๋ฐ ์ฝ๋๋ค์ด ์ฝ๋๋ฒ ์ด์ค์ ๋ณํฉ๋์ง ์๊ฒ๋ ํ์ ๋ชจ๋ ๋ ธ๋ ฅํ์ ๋ค์งํ ์ ์๋ ๊ณ๊ธฐ๊ฐ ๋์ด ์คํ๋ ค(?) ์ข์๋ค.
4์ฅ. ์ค๋ฅ
์ค์ํ ์ด์ผ๊ธฐ๋ฅผ ๋ด์ ์ฅ์ด์๋ค.
์ ์๋ ์ด๋ฒ 4์ฅ์ ์ด์ ๋ถํฐ ๊ธธ๊ฒ ํ์ด ์ฐ๊ฒ ๋ค ๋ฏธ๋ฆฌ ์ ์ ํฌ๊ณ (?)๋ฅผ ํ๋ค.
๋ด์ฉ์ ๋น๋ก ๊ธธ์์ง๋ง ์ ๋ฌํ๊ณ ์ํ๋ ์ฃผ๋ ๋ด์ฉ๋ค์ ์์ฝํ์๋ฉด ๋ค์๊ณผ ๊ฐ์๋ค.
- ๋ณต๊ตฌํ ์ ์๋ ์ค๋ฅ์ ๋ณต๊ตฌํ ์ ์๋ ์ค๋ฅ๋ฅผ ๊ตฌ๋ถํ์ฌ ์ฒ๋ฆฌํ๋ผ.
- ์๋ํ๊ฒ ์คํจํ๋ผ.
- ๋ช ์์ ์ผ๋ก ์ค๋ฅ๋ฅผ ์ ๋ฌํ๋ผ.
- (๋ถ๋ก) ์ปดํ์ผ๋ฌ ๊ฒฝ๊ณ ๋ฅผ ๋ฌด์ํ์ง ๋ง๋ผ.
์ด ์ธ์๋ ์ญ์๋ ์ ์๋ ์ค๋ก ์ ์งํจ๋ค. โ์์์ ์ผ๋ก ์ค๋ฅ๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ๋ฒโ์ ๋ํด์๋ ์๊ฐํ๊ณ ๊ทธ ๋์ ์ฅ๋จ์ ์ ๊ผฌ์ง๋๋ค. (์ด์ ์ต์ํ๋ค)
๋ค๋ง, ์ ๋ด์ฉ์ ์ฃผ๋ ๋ฐฉ๋ฒ๋ก ์ด๋ผ ์ค๋ช ํ๋ฉฐ ๊ทธ ๊ทผ๊ฑฐ์ ๋ํด์ ๊ตฌ์ฒด์ ์ผ๋ก ์์ ํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ ๋ํ ์ ์์ ์๊ฐ๊ณผ ๊ฐ์ผ๋ฉฐ, ๊ฐ์ ๋ฐฉ๋ฒ๋ก ์ผ๋ก ์์ธ์ ์ํฉ์ ์ฒ๋ฆฌํ๊ณ ์๋ค.
5์ฅ. ๊ฐ๋ ์ฑ ๋์ ์ฝ๋๋ฅผ ์์ฑํ๋ผ
์ด๋ฒ 5์ฅ ๋ํ ใClean Codeใ ์ ๋น๊ตํ๋ฉด(๊ทธ๋ ๋ค, ๋ ๋์๋ค.) ์ ํ ๋ค๋ฅธ ๋ฐฉํฅ์ผ๋ก ๋ฐฉ๋ฒ๋ก ์ ์ ์ํ๋ค.
๋ฐ๋ก โ์ฃผ์โ์ ๋ํ ๋ด์ฉ์ด๋ค.
โํด๋์ค์ ๊ฐ์ด ํฐ ๋จ์์ ์ฝ๋๊ฐ ๋ฌด์์ ํ๋์ง ์์ฝํ๋ ๋์ ์์ค์์์ ์ฃผ์๋ฌธ์ ์ ์ฉํ๋ค.โ
ใClean Codeใ ์์๋ โ์ฃผ์โ์ ๋ค์๊ณผ ๊ฐ์ด ํํ๋๋ค.
- ์ฃผ์์ด ํ์ํ ์ฝ๋๋ ์๋ชป ์ฐ์ฌ์ง ์ฝ๋์ด๋ค.
์ด๋ฒ ์ฑ ์์๋ ์ฌ๋ฐ๋ฅธ โ์ฃผ์โ ์ฌ์ฉ๋ฒ์ ๋ํด ๋ช๊ฐ์ง ์์๋ก ๋ ์๋ค์ ์ค๋ํ๋ค.
๊ทธ ์ค ๊ณต๊ฐ์ด ๊ฐ๊ณ , ์ค์ ๋ก ๋์ ํ๊ณ ์ถ์ โ์ฃผ์โ ์ฌ์ฉ ์์๋ฅผ ๊ฐ์ ธ์๋ณด์๋ค.
์ฃผ์์ ๋ฐ๋ก #XXX ๊ฐ์ ์ด์ ๋๋ฒ๋ฅผ ์ธ๊ธํ๋ ํ์ด์๋ค.
์ด๋ค ์ฝ๋๊ฐ ์ ์กด์ฌํ๋์ง ์ด์ ๋ฅผ ์ค๋ช ํ๊ธฐ๋ ๋น์ฆ๋์ค ํ์คํ ๋ฆฌ์ ์ฐ๊ด์๊ธฐ ๋๋ฌธ์ ์ฝ์ง ์๋ค. ์ฃผ์ ์ฃผ์ ๊ธธ๊ฒ ์ฐ๊ธฐ ๋ณด๋ค ์ด์ ๋๋ฒ๋ฅผ ์ธ๊ธํ์ฌ ์งง๊ณ ๊ฐ๊ฒฐํ๊ฒ ๋จ๊ธฐ๋ ํ์ด๋ค.
์ด๊ฑด..ํ๋ฒ ๋์ ํด๋ณผ๋ง ํ๋ค ์๊ฐํ์ฌ ํ ๋ก ์ฅ์์ ํ์๋ค์๊ฒ ๊ณต์ ํ์๊ณ , ์ด๋ ์น์ธ๋์ด ์จ๋ด์งํ ๋ก์ง ๋ถ๋ถ์ด ๋ฐ๊ฒฌ๋๋ฉด ๋์ ํด๋ณผ ์์ ์ด๋ค. ๐
6์ฅ. ์์ธก ๊ฐ๋ฅํ ์ฝ๋๋ฅผ ์์ฑํ๋ผ
์ด๋ฒ ์ฅ์ 1์ฅ์ โ์ฝ๋ ํ์งโ๊ณผ ์ ์ฌํ๊ฒ ํ๋ฌ๊ฐ๋ค. (์์ 5์ฅ ๋ํ ๋ง์ฐฌ๊ฐ์ง์์ง๋ง!)
์ค์ฉํ ์ ์๋ ์ฝ๋์ ์์ ์ค์ด๊ณ , ๋ณ๋์ ์ธ์์ธ๊ณ ์์ด ์ ์ง๋ ์ ์๋ ์ฝ๋๋ฅผ ์์ฑํ๋ผ๋ ๋ด์ฉ์ด ์ฃผ๋ ๋ด์ฉ์ด์๋ค.
๋ํ, ์ด๊ฑฐํ(enum) ์๋ฃํ ์ฒ๋ฆฌ์ ๋ํด ์ฃผ์ํ๋ผ ๊ฐ์กฐํ์๋ค. (์ด๊ฑฐํ(enum) ์๋ฃํ์ ์ ์ฉํ๊ธฐ์ ๋๋ฌด๋ ๋ฐ๊ฐ์ด ์ฃผ์ ์๋ค! ๐คฉ)
์ต๊ทผ ๋๋ ์๋์ ๊ฐ์ ์ด๊ฑฐํ(enum) ์๋ฃํ์ ์์ ํ ์ ์ด ์๋ค.
export enum GenderEnum {
MAN = 'M',
WOMAN = 'W',
GENDERLESS ='NONE', // ์ถ๊ฐ๋ ์ด๊ฒ๊ฐ
}์๋๊ฐ ๋ฐ๋๋ฉฐ ๋น์ฐํ๋ค ์๊ฐํ๋ ๊ฒ๋ค์ด ๋์ด์ ๋น์ฐํ์ง ์๋ ์ ์๋ค. ๋น์ฐํ๋ค ์๊ฐํ์ฌ ์ด๊ฑฐํ(enum) ์๋ฃํ์ผ๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ ํฐ ์ค๋ง์ด๋ค.
๊ทธ๋ฌ๋ฏ๋ก ์ด๊ฒ๊ฐ์ด ์ถ๊ฐ๋ ์ ์์์ ์ธ์ ๋ ๋๋นํ๋ ์ฝ๋๋ฅผ ์ต๊ดํ ํ๋ผ ๊ฐ์กฐํ๋ค.
์ค์ ๊ฒฝํํ๋ ์ฌ๋ก๋ผ ํฌ๊ฒ ์ ๋ฟ์๋ค.
๐ค Understanding
์์ ์ฝ์ ใClean Codeใ ์ ๋ค๋ฅด๊ฒ ์ด๋ฒ ใ์ข์ ์ฝ๋, ๋์ ์ฝ๋ใ ๋ ๊ฑฐ๋ถํ์ง ์๊ณ ์ฝ๊ฒ ์ฝํ๋ค.
์์ ์ฝ์ ์ฑ ์ ์์๋ ๋ชจ๋ Java๋ก ๊ตฌ์ฑ๋์ด ์๊ธฐ์ ์์ ์ฝ๋๋ฅผ ๋ณด๋ฉด ์ฝ๊ฒ ํฅ๋ฏธ๊ฐ ๋จ์ด์ก๋ค. ํ์ง๋ง, ์ด๋ฒ ์ฑ ์ ์์๋ค์ ์์ฌ์ฝ๋(pseudocode)๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฉฐ, ์์๋ก ๋๋ ์ฌ๋ก์์ ๋ํ ์ฌ๋ฌ ์ธ์ด๋ค(Java, C++, JavaScript, TypeScript ๋ฑ๋ฑ..)์ ํฌ๊ด์ ์ผ๋ก ์ธ๊ธํ์ฌ ํฅ๋ฏธ๋๊ฐ ๋์๋๊ฒ ํฐ ์ฅ์ ์ด์๋ค.
์ค์ ๋ก ๋งค์ง๊ฐ ์ฌ๋ก๋ก JavaScript์
indexOf()ํจ์์ -1 ๋ฆฌํด๊ฐ์ด ์ธ๊ธ๋ ๋๋ ๋์ด ๋๊ทธ๋ผ์ก๋ค. ๐ณ
์ ๋ฐ์ ๋ ์ฝ๊ณ ๋ ํ๊ธฐ๋ก๋ 1~2๋
์ฐจ ์ฃผ๋์ด๋ค์ด ์ฝ๊ธฐ์๋ ์ข์ ์์ (ํนํ๋, ์ ์ง๋ณด์ ์
๋ฌด๋ฅผ ๋ด๋นํ๊ณ ์๋ค๋ฉด ๋์ฑ ๋)์ด๋ผ ์๊ฐํ๋ค.
์ด ํ์ ๋งํ๊ธฐ์ ์์ง ์ ๋ฐ ๊ฐ๋์ ๋ถ๋์ด ๋จ์๊ธฐ์ ์ ๋๋ก ๋ ๋ ์ ํ๊ธฐ๋ ๋ง์ ์ฝ๊ณ ๋จ๊ฒจ๋ณด๋๋กํ๊ฒ ๋ค.