์ฐ๋ฆฌ์ ์ธ์์๋ '์์' ์ด๋ผ๋๊ฒ ์๋ค. ๊ตญ์ด์ฌ์ ์ ๋ฐ๋ฅด๋ฉด
'์์' ์ด๋ ์ฌ๋๋ค์ด ๋ณดํต ์๊ณ ์๊ฑฐ๋ ์์์ผ ํ๋ ์ง์.
์ผ๋ฐ์ ๊ฒฌ๋ฌธ๊ณผ ํจ๊ป ์ดํด๋ ฅ, ํ๋จ๋ ฅ, ์ฌ๋ฆฌ ๋ถ๋ณ ๋ฐ์๊ฐ ํฌํจ๋๋ค.
๋ผ๊ณ ์ค๋ช ๋์ด ์๋๋ฐ, ์ฐ๋ฆฌ๊ฐ ์ฝ๋๋ฅผ ์์ฑํจ์ ์์ด๋ '์์' ์ด๋ผ๋๊ฒ ์๋ค.
์ฝ๋๋ฅผ ์์ฑํ๋ ๊ท์น์ ์ ์งํค๋ ๊ฒ์ ๊ฐ๋ฐ์๋ค๊ฐ์ ์์์ด๋ค. ์ด๊ฒ์ 'Coding Convention' ์ด๋ผ๊ณ ๋ถ๋ฅด๋ ๊ฒ์ด๋ค.
๋๋ถ๋ถ์ ์ฝ๋๋ฅผ ๋ณด๋ค๋ณด๋ฉด ๋ณ์๋ช ์ ์๋ฌธ์(name, age, weight ๋ฑ)๋ก, ํด๋์ค๋ ์ฒซ๊ธ์๊ฐ ๋๋ฌธ์(Human, Student ๋ฑ)๋ก ์์ํ๋ ๋ชจ์ต์ ๋ณผ ์ ์๋๋ฐ, ์ด๋ฐ๊ฒ๋ค์ ๋ด๊ฐ ๊ทธ๋ฅ ์ฐ๊ณ ์ถ์๋๋ก ์ด๊ฒ ์๋๋ผ, ๋ชจ๋ ์ผ๋ฐ์ ์ธ ์ฝ๋ฉ ์ปจ๋ฒค์ ์ ๋ฐ๋ฅธ ๊ฒ์ด๋ค.
์ฐ๋ฆฌ๊ฐ ์์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ๋๋ฐ ์ด๋ฌํ ์ปจ๋ฒค์ ์ ๋ฐ๋ฅด์ง ์๋๋ค๋ฉด, ๋ค๋ฅธ ๊ฐ๋ฐ์์ ํจ๊ป ํ์ ํ๊ฑฐ๋ ํ์ฌ์์ ์ผํ ๋ '์์์ด ์๋ ์ฌ๋' ์ทจ๊ธ์ ๋ฐ์์๋ ์๋ค...
์ด์ฌํ ๊ณต๋ถํ๋๋ฐ ๋ฐ๋ณด์ทจ๊ธ์ ๋ฐ์ง ๋ง์์ผ๊ฒ ์ฃ ?
์ฝ๋ ์์ฑ ๊ท์น๋ค (Coding Conventions)
์ด๋ฆ ๊ท์น(Naming Rules) - ๋ณ์, ํจ์, ํด๋์ค, ๋ฉ์๋ ๋ฑ
์ด๋ฆ์ ์ง๋๋ฐ๋ ๋ํ์ ์ผ๋ก 5๊ฐ์ง ๋ฐฉ์์ด ์๋ค. ๋ค์ด๋ฐ ๋ฃฐ(Naming Rules) ์ด๋ผ๊ณ ๋ ํฉ๋๋ค.
- PascalCase (ํ์ค์นผ ์ผ์ด์ค)
- ์ฒซ๊ธ์์ ์ด์ด์ง๋ ๋จ์ด์ ์ฒซ๊ธ์๋ฅผ ๋๋ฌธ์๋ก ํ๊ธฐํ๋ ๋ฐฉ๋ฒ
- ์) GoodPerson, MyKakaoCake, IAmDeveloper
- Pascal ์ด๋ผ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ด๋ฌํ ํ๊ธฐ๋ฒ์ ์ฌ์ฉํด์ ์ ๋ช ํด์ง ๋ฐฉ์์ด๋ค.
- camelCase (์นด๋ฉ ์ผ์ด์ค)
- ์ฒซ๋จ์ด๋ ์๋ฌธ์๋ก ํ๊ธฐํ์ง๋ง, ์ด์ด์ง๋ ๋จ์ด์ ์ฒซ๊ธ์๋ ๋๋ฌธ์๋ก ํ๊ธฐํ๋ ๋ฐฉ๋ฒ
- ์) goodPerson, myKakaoCake, iAmDeveloper
- ๋ํ(camel)์ ๋ฑ๋ชจ์์ด ๋ณผ๋กํ ๊ฒ์ ์๊ฐ์ ์ป์ด์ ์ด๋ ๊ฒ ๋ถ๋ฅด๊ธฐ๋ก ํ๋ค.
- snake_case (์ค๋ค์ดํฌ ์ผ์ด์ค)
- ๋ชจ๋ ๋จ์ด๋ฅผ ์๋ฌธ์๋ก ํ๊ธฐํ๊ณ , ๋จ์ด๋ฅผ ์ธ๋๋ฐ(_) ๋ก ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ
- ์) good_person, my_kakao_cake, i_am_developer
- ๊ผญ ๋ฑ(snake)์ด ๋ ์ ๊ธฐ์ด๋ค๋๋ ๊ฒ ๊ฐ์ ๋๋์ด ๋ค์ง์๋์?
- kebab-case (์ผ๋ฐฅ ์ผ์ด์ค)
- ๋ชจ๋ ๋จ์ด๋ฅผ ์๋ฌธ์๋ก ํ๊ธฐํ๊ณ , ๋จ์ด๋ฅผ ๋์(-) ๋ก ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ
- ์) good-person, my-kakao-cake, i-am-developer
- ๊ผฌ์ฑ์ด์ ํฐ ๊ณ ๊น๋ฉ์ด๋ฆฌ๊ฐ ๊ฝํ ์๋ ์ผ๋ฐฅ(ํฐํค์์)์ ์ด๋ฏธ์ง์์ ์๊ฐ์ ์ป์ด์ ์ง์ ์ด๋ฆ์ด๋ค. ๋ช ๋์ ๊ธธ๊ฑฐ๋ฆฌ์ ํ๋๊ฑธ ์์ฃผ ๋ณผ ์ ์์ต๋๋ค.
- ์ด ๋ฐฉ์์ ํ๋ก๊ทธ๋๋ฐ์์๋ ์ ์์ฐ์ด๊ณ , ๋ณดํต ํ์ผ๋ช
์ด๋ ํด๋๋ช
์ ๋ง๋ค๋ ์ฌ์ฉํ๋ ํธ์ด๋ค. ์ฝ๋ฉ์ด ์ต์ํด์ง๊ณ ๊ฐ๋ฐ์๊ฐ ๋๋ฉด ํ์ผ๊ณผ ํด๋์ ์ด๋ฆ์ ์ง์ ํ ๋, space(๊ณต๋ฐฑ) ๋์ ์ dash(-) ๋ฅผ ์ฌ์ฉํ๋ ์์ ์ ๋ฐ๊ฒฌํ๊ฒ ๋๋ค. (
๋๋ถ๋ถ์ ๊ฒฝ์ฐ์์ ์ด๊ฒ ์ข๋ค๋ ์ฌ์ค์ ๊นจ๋ซ๊ฒ ๋๊ฑฐ๋ ์)
- UPPER_CASE (์ดํผ ์ผ์ด์ค)
- ๋ชจ๋ ๋จ์ด๋ฅผ ๋๋ฌธ์๋ก ํ๊ธฐํ๊ณ , ๋จ์ด๋ฅผ ์ธ๋๋ฐ(_) ๋ก ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ
- ์) GOOD_PERSON, MY_KAKAO_CAKE, I_AM_DEVELOPER
- ๋๋ถ๋ถ์ ํ๋ก๊ทธ๋๋ฐ์์ ์์๋ณ์(constant variable)์ ์ด๋ฆ์ ์ด๋ ๊ฒ ์ฌ์ฉํ๊ณ ์๋ค.
- ๋ญ๊ฐ ์๋ฆฌ์น๋ ๋๋๊ณผ ๋งค์ฐ ์ค์ํ ๋๋์ด ๋ค์ฃ ?
์ด๋ฌํ case ๋ค์ ์ธ์ด๋ง๋ค, ํ๊ฒฝ๋ง๋ค ์กฐ๊ธ์ฉ ์ฌ์ฉ ์ฌ๋ก๊ฐ ๋ฌ๋ผ์ง๊ธฐ๋ ํ๋๋ฐ, Python / JavaScript & Java ๊ธฐ์ค์ผ๋ก ์ ๋ฆฌํด๋ณด๋ฉด ์๋ ํ์ ๊ฐ์ต๋๋ค.
PascalCase | ํด๋์ค, Exception | ํด๋์ค, Exception | - |
camelCase | - | ๋ณ์, ํจ์, ๋ฉ์๋ | - |
snake_case | ๋ณ์, ํจ์, ๋ฉ์๋ | - | - |
kebab-case | - | - | ํ์ผ, ํด๋๋ช |
UPPER_CASE | ์์๋ณ์ | ์์๋ณ์ | - |
์ด๋ฐ ๋ค์ด๋ฐ ๋ฃฐ ๋๋ถ์ ์ฐ๋ฆฌ๋ ์๊ธ์๊ฐ ๋๋ฌธ์๋ก ์์ํ๋๊ฑธ ๋ณธ ์๊ฐ, "์ํ, ์ด๊ฑด Class ์ด๊ฒ ๊ตฌ๋." ๋ผ๊ณ ๋ณธ๋ฅ์ ์ผ๋ก ๋์น์ฑ ์ ์๋ค.
Boolean ํ์ ์ ๋ณ์ ์๋ช ๊ท์น
์์ ๋ค์ด๋ฐ ๋ฃฐ์ ์ด์ด์ boolean ํ์ ์ ๋ ํนํ ๋ณ์๋ช ์๋ช ๊ท์น์ด ์๋๋ฐ, ๊ฑฐ์ ๋ณดํต is ๋ผ๋ ์ ๋์ฌ(prefix) ๋ฅผ ์ฌ์ฉํ๋ค.
is_human = True # ์ฌ๋์ธ์ง ์๋์ง
is_animal = False # ๋๋ฌผ์ธ์ง ์๋์ง
is_exist = True # ์กด์ฌํ๋์ง ์ํ๋์ง
is_final_data = False # ๋ง์ง๋ง ๋ฐ์ดํฐ์ธ์ง ์๋์ง
...
์ด๋ฐ ๋ค์ด๋ฐ ๋ฃฐ ๋๋ถ์ ์ฐ๋ฆฌ๋ is ๋ผ๋ ๊ธ์๋ฅผ ๋ณด๋ ์๊ฐ, "์ํ, ์ด ๋ณ์๋ boolean ํ์ ์ ๋ณ์๊ฒ ๊ตฌ๋. true/false ์ ๊ฐ์ ๊ฐ์ง๊ฒ ๊ตฌ๋." ๋ผ๊ณ ๋ณธ๋ฅ์ ์ผ๋ก ๋์น์ฑ ์ ์๋ค. ๋ค์ด๋ฐ ๋ฃฐ์ ๊ธฐ๋ณธ์ค์ ๊ธฐ๋ณธ์ด๋๊น ๊ผญ ๋ฐ๋ฅด๋ ๊ฒ ์ข์ต๋๋ค!
๋ค์ฌ์ฐ๊ธฐ (indent)
๋ค์ฌ์ฐ๊ธฐ(indent)๋ 2์ข ๋ฅ ๋ฐฉ์์ผ๋ก ๊ฐ๋ฅํ๋ค.
- tab ๋ฐฉ์
- space ๋ฐฉ์
๋๋ค ๋ฑ ๋ณด๊ธฐ์ ๋๊ฐ์ด ๋น์นธ์ผ๋ก ๋ณด์ด์ง๋ง ์ค์ ์ฝ๋์์๋ ์ฌ๋ฌ๊ฐ์ง ์ด์ ๋ก space ์ฌ์ฉ์ด ๊ถ์ฅ๋๋ ํธ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค์ฌ์ฐ๊ธฐ์ ์นธ ์๋ฅผ 2์นธ์ผ๋ก ํ ์ง, 4์นธ์ผ๋ก ํ ์ง, 8์นธ์ผ๋ก ํ ์ง๋ ๋ค์ํ๊ฒ ๋ ผ์๋๋ ํธ์ด์ง. ๋ณดํต ์ ์ ํ ๊ฐ๋ ์ฑ์ ์ํด์ ๊ธฐ๋ณธ์ค์ ์ผ๋ก 4 space ๋ฅผ ์ฆ๊ฒจ ์ฌ์ฉํ๋ ํธ์ธ ๊ฒ ๊ฐ๋ค.
์ 2๊ฐ์ง ์ธ์๋ ์์ฃผ ์ฌ์ํ๊ฒ ๋ค์ด๊ฐ๋ฉด
- ๊ดํธ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
- ๊ดํธ๋ฅผ ์ฌ์ฉํ ์ง ์ํ ์ง
- ๋์ด์ฐ๊ธฐ๋ฅผ ์ด๋ป๊ฒ ํ ์ง
- comma ๋ฅผ ์ด๋ ์์น์ ์ฐ์์ง
- ์ธ๋ฏธ์ฝ๋ก ์ ์ฌ์ฉํ ์ง ์ํ ์ง
- ์ค ๊ฐ๊ฒฉ์ ์ด๋ป๊ฒ ํ ์ง
- ์ค ๋ฐ๊ฟ์ ํ ์ง ์ํ ์ง
- ์ฃผ์์ ์ด๋ค์์ผ๋ก ๋ฌ์ง
- ์์๋ฐ์ดํ(')๋ฅผ ์ฌ์ฉํ ๊ฑด์ง, ํฐ๋ฐ์ดํ(")๋ฅผ ์ฌ์ฉํ ๊ฑด์ง
๋ฑ๋ฑ ๋ฐ์ง๊ณ ๋ค์ด๊ฐ๋ฉด ๋งค์ฐ ๋ค์ํ๋ค.
๋๋ถ๋ถ์ ํ๋ก๊ทธ๋๋ฐ ์ฑ ๋ค์ ๋ง์ ์ฌ๋๋ค์ด ๊ณตํต์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ฐฉ์์ ์ฑํํ์ฌ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ๋๋ฌธ์, ์ฑ ์ ๋ง์ด ์ฝ๊ณ ๊ทธ์ ๋ฐ๋ผ ์ฝ๋ฉํ๋ค๋ณด๋ฉด ์ฐ๋ฆฌ๊ฐ ํ๊ตญ์ด๋ฅผ ์ฒด๋ํ๋ฏ ์์ฐ์ค๋ฝ๊ฒ ์ข์ ์ปจ๋ฒค์ ์ ๋ฐ๋ผํ๊ฒ ๋๋ค.
๊ทธ๋ฐ๋ฐ.. ์์ ๊ฐ์ ์ฝ์๋ค์ ์ผ์ผํ ์๊ฐํ๋ฉด์ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ์ ๋๋ฌด ๊ดด๋กญ์ง ์๋์..?
๊ทธ๋์ ๊ฐ๋ฐ์๋ค์ ์ํด์ ๋ง๋ ์์ค์ฝ๋ ๋ถ์๋๊ตฌ๊ฐ ์๋ค. ๋ฐ๋ก Lint ๋ผ๋ ๋ ์.
์์ค์ฝ๋ ๋ถ์๋๊ตฌ Lint
Lint ๋, ์์ค์ฝ๋์ ์ ์ฌ์ ์ธ ์ค๋ฅ๋ฅผ ํ์ธํ๊ฑฐ๋, ์ฝ๋ฉ ์ปจ๋ฒค์ ์ ์ฝ๊ฒ ์ ์งํ ์ ์๋๋ก ๋์์ฃผ๋ ๋๊ตฌ๋ก 'Lint' ๋ผ๋ ๋จ์ด๋ ์ท์ ์์ฃผ ์ผ์ด๋๋ '๋ณดํธ๋ผ๊ธฐ' ๋ผ๋ ๋ป์ด๋ค. ์ท์ ๋ณดํ์ด ๋ง์ผ๋ฉด ์ง์ ๋ถํด ๋ณด์ด์์์? ๊ทธ๋์ ๋ณดํ์ ๊ฑฐ๊ธฐ ๊ฐ์ ๊ธฐ๊ณ๋ฅผ ์ฌ์ฉํ๊ธฐ๋ ํ์ง. ๊ทธ ๋ณดํ์ ๊ฑฐ๊ธฐ๊ฐ ๋ฐ๋ก Lint!!!
Lint ๋ ์ผ๊ด๋๊ณ ์ฝ๊ธฐ ์ฌ์ด ์ฝ๋๋ฅผ ์ ์งํ๋ ๋ฐ ๋์์ ์ฃผ๊ณ , ๊ฐ๋ฐ์๊ฐ ๊ณ ๋ คํ์ง ๋ชปํ๋ ์ค๋ฅ๋ฅผ ํฌ์ฐฉํ๋ ๋ฐ ๋์์ ์ฃผ๊ธฐ๋ ํ๋ค. ๋๋ถ๋ถ์ ๊ฐ๋ฐ์๋ค์ ์ฒด๊ณ์ ์ด๊ณ ๊นจ๋ํ ์์ค์ฝ๋ ๊ด๋ฆฌ๋ฅผ ์ํด Lint ์ ๋์์ ๋ฐ์ผ๋ฉฐ ์ฝ๋๋ฅผ ์์ฑํ๊ฒ ๋๋๋ฐ Lint ๋ ์์์ ์ค๋ช ํ ๋ชจ๋ ์ฝ๋ฉ ์ปจ๋ฒค์ ๋ค์ ์ํ๋๋๋ก ์ค์ ํด์ ์์ ์ ์คํ์ผ๋๋ก ์ฝ๋๋ฅผ ์์ฑํ๋๋ก ๋์์ค๋ค.
๊ณต๋ถํ๋ ๋จ๊ณ๋ฅผ ๋์ด์ ์ค์ ๊ฐ๋ฐ์๊ฐ ๋๋ค๋ฉด ๋ชจ๋ ์์ค์ฝ๋ ์์ฑ์ Lint ๋ฅผ ์ ํ์ฉํ๋ ๊ฒ์ด ์ข์ผ๋ ๊ผญ ์์๋ ๊ฒ์ ๊ถ์ฅํ๋ค. ๊ฑฐ์ ๋๋ถ๋ถ์ ์ธ์ด์๋ ๊ฐ ์ธ์ด๋ณ Lint(๋ถ์๋๊ตฌ)๊ฐ ์์ผ๋ ๋ณธ์ธ์ด ์ฌ์ฉํ๋ ์ธ์ด์ ๋ง๋ Lint๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
Python ์ PyLint
JavaScript ๋ ESLint
Java ๋ CheckStyle ๋ฑ
Lint๋ฅผ ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ๊ธฐ์ ํ ๋ธ๋ก๊ทธ๋ค์ ๋ง์ผ๋, ์ค์ค๋ก ์ฐพ์๋ณด๋ ๊ฒ๋ ํฐ ๋์์ด ๋ ๊ฒ ๊ฐ์์ ์ฌ๊ธฐ๊น์ง ์ ์ต๋๋ค๐
๋.