πŸ“œ CleanCode

[CleanCode]ν˜•μ‹ λ§žμΆ”κΈ°

뉴이 NUEY 2024. 9. 21. 19:37
λ°˜μ‘ν˜•

μ½”λ“œ ν˜•μ‹μ€ μ˜μ‚¬μ†Œν†΅μ΄λ‹€

ν”„λ‘œμ νŠΈκ°€ 컀질 수둝 μˆ˜λ§Žμ€ κ°œλ°œμžλ“€μ΄ λ§Œλ“  클래슀λ₯Ό 보게 될 텐데
κ°œλ°œμžλ§ˆλ‹€ 고유의 μŠ€νƒ€μΌλ‘œ μ½”λ“œλ₯Ό μ μ–΄λ‘μ—ˆλ‹€λ©΄ μƒλ‹Ήνžˆ 읽기 νž˜λ“€ κ²λ‹ˆλ‹€.
κ·Έλž˜μ„œ κ°œλ°œμ΄ˆκΈ°μ— tab의 크기와 font, μ£Όμ„ν˜•μ‹μ„ λͺ¨λ‘ 정해두고 μ§„ν–‰ν•©λ‹ˆλ‹€.
κ·Έκ±Έ 일일히 검사할 μˆ˜λŠ” μ—†μœΌλ‹ˆκΉŒ sonarQubeλ₯Ό μ΄μš©ν•΄ ν˜•μ‹μ„ κ²€μ‚¬ν•˜λ©΄ ν˜•μ‹μ— λ§žμ§€ μ•ŠλŠ” μ½”λ“œλ“€μ„ 찾을 수 μžˆμŠ΅λ‹ˆλ‹€.


μ μ ˆν•œ ν–‰(μ„Έλ‘œ) 길이
Lines
행길이

책에 λ”°λ₯΄λ©΄ μš°λ¦¬κ°€ 많이 μ‚¬μš©ν•˜λŠ” tomcat λ“± κ±°λŒ€ν•œ μ‹œμŠ€ν…œλ„
클래슀의 길이가 λŒ€κ°œ 200쀄을 λ„˜μ§€ μ•ŠλŠ”λ‹€.
μž‘μ€ νŒŒμΌλ“€λ‘œλ„ λŒ€κ·œλͺ¨ μ‹œμŠ€ν…œμ„ λ§Œλ“€ 수 μžˆλ‹€λŠ” 증거닀.


κ°€λ‘œ ν˜•μ‹ λ§žμΆ”κΈ°

μ‹ λ¬Έ κΈ°μ‚¬μ²˜λŸΌ μž‘μ„±ν•˜λΌ
  • λ…μžλŠ” 신문을 μœ„μ—μ„œ μ•„λž˜λ‘œ μ½λŠ”λ‹€.
  • μ΅œμƒλ‹¨μ— κ°€μž₯ 큰 ν‘œμ œκ°€ κ°„λ‹¨ν•œ μ„€λͺ…이 μ ν˜€μžˆλ‹€.
  • 이름은 κ°„λ‹¨ν•˜λ©΄μ„œλ„ μ„€λͺ…κ°€λŠ₯ν•΄μ•Ό ν•œλ‹€.
  • μ†ŒμŠ€ 파일 첫 뢀뢄은 고차원 κ°œλ…κ³Ό μ•Œκ³ λ¦¬μ¦˜μ„ μ„€λͺ…ν•œλ‹€.
  • λ§ˆμ§€λ§‰μ—λŠ” κ°€μž₯ 저차원 ν•¨μˆ˜μ™€ μ„ΈλΆ€ 내역이 λ‚˜μ˜¨λ‹€.

κ°œλ…μ€ 빈 ν–‰μœΌλ‘œ 뢄리
λ§Œμ•½ 이런 μ‹μœΌλ‘œ 빈 행이 μ—†λ‹€λ©΄ 가독성이 μƒλ‹Ήνžˆ 떨어진닀.
빈 행은 μƒˆλ‘œμš΄ κ°œλ…μ„ μ‹œμž‘ν•œλ‹€λŠ” μ‹œκ°μ  λ‹¨μ„œλ‹€.

μ„Έλ‘œ 밀집도
μ΄λ ‡κ²Œ 직접적이진 μ•Šλ”λΌλ„ κ΄€λ ¨μžˆλŠ” λ³€μˆ˜μ™€ ν•¨μˆ˜λ“€μ˜ κ²½μš°λŠ”
κ°€κΉκ²Œ 두어 ν•œλˆˆμ— λ“€μ–΄μ˜€κ²Œ ν•œλ‹€.

수직 거리

μœ„μ˜ μ„Έλ‘œ λ°€μ§‘λ„μ²˜λŸΌ μ„œλ‘œ κ΄€λ ¨λœ 것듀은 κ°€κΉκ²Œ 두어야 ν•œλ‹€.
μ’€ 더 μžμ„Έν•˜κ²Œ μ•Œμ•„λ³΄μž.
 

λ³€μˆ˜ μ„ μ–Έ

λ³€μˆ˜λŠ” μ‚¬μš©ν•˜λŠ” μœ„μΉ˜μ— μ΅œλŒ€ν•œ 가깝이 μ„ μ–Έν•œλ‹€.
μš°λ¦¬κ°€ λ§Œλ“œλŠ” ν•¨μˆ˜λŠ” λ§€μš° μ§§μœΌλ―€λ‘œ κ° ν•¨μˆ˜ μ²˜μŒμ— μ„ μ–Έν•œλ‹€.

μ•„μ£Ό κΈ΄ ν•¨μˆ˜μΈ κ²½μš°μ—λŠ” μ½”λ“œ 쀑간에 λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜κΈ°λ„ ν•œλ‹€.

 

μΈμŠ€ν„΄μŠ€ λ³€μˆ˜
μ—¬κΈ°μ—μ„œ μΈμŠ€ν„΄μŠ€ ν•¨μˆ˜λž€ new둜 뢈러온 μΈμŠ€ν„΄μŠ€λ₯Ό λ§ν•œλ‹€.

 

μ„Έλ‘œ μˆœμ„œ

μœ„β†’μ•„λž˜ λ°©ν–₯으둜 μœ μ§€ν•œλ‹€. 
그러면 μ†ŒμŠ€μ½”λ“œ λͺ¨λ“ˆμ΄ κ³ μ°¨μ›β†’μ €μ°¨μ›μœΌλ‘œ μžμ—°μŠ€λŸ½κ²Œ λ‚΄λ €κ°„λ‹€.

κ°€μž₯ μ€‘μš”ν•œ κ°œλ…μ„ ν‘œν˜„ν•  λ•ŒλŠ” (고차원 ν•¨μˆ˜λ₯Ό λ§ν•˜λŠ” λ“―)
μ„Έμ„Έν•œ 사항을 μ΅œλŒ€ν•œ λ°°μ œν•œλ‹€. (ν•¨μˆ˜λ₯Ό μž‘κ²Œ λ§Œλ“€λΌλŠ” 뜻인 λ“―)

ν˜ΈμΆœν•˜λŠ” ν•¨μˆ˜λ₯Ό
ν˜ΈμΆœν•œ ν•¨μˆ˜λ³΄λ‹€ λ¨Όμ € λ°°μΉ˜ν•œλ‹€.
λ…μžλŠ” ν˜ΈμΆœν•œ ν•¨μˆ˜κ°€ 밑에 μ •μ˜λ˜λ¦¬λž€ 것을 μ•Œ 수 μžˆλ‹€.

κ°€λ‘œ 곡백과 밀집도
이것 보닀
μ΄λ ‡κ²Œ μ μ ˆν•˜κ²Œ λ„μ–΄μ“°κΈ°λ‘œ 곡백을 μ£Όλ©΄ 가독성이 μ’‹λ‹€.

 

μ—°μ‚°μž μš°μ„ μˆœμœ„λ₯Ό κ³ λ €ν•˜μ—¬ 승수(-b)μ‚¬μ΄μ—λŠ” 곡백을 두지 μ•Šκ³ , κ³±μ…ˆμ΄ κ°€μž₯ μš°μ„ μ΄κΈ° λ•Œλ¬Έμ— 곡백을 두지 μ•Šμ•˜λ‹€.

κ°€λ‘œμ •λ ¬
μ΄λŸ¬ν•œ ν˜•μ‹μ€ μ •μž‘ μ€‘μš”ν•œ 뢀뢄을 κ°•μ‘°ν•˜μ§€ λͺ»ν•˜κΈ° λ•Œλ¬Έμ— μœ μš©ν•˜μ§€ λͺ»ν•˜λ‹€. λ˜ν•œ ν˜•μ‹μ΄ 변경될 κ°€λŠ₯성이 λ†ν›„ν•˜λ‹€. λ˜ν•œ μ΄λ ‡κ²Œ λ³€μˆ˜κ°€ 많이 μ‚¬μš©λ  μ‹œ λ”°λ‘œ 클래슀둜 뢄리해야 ν•œλ‹€.

λ“€μ—¬μ“°κΈ°
μ–΄λ– ν•œ μ½”λ“œλ“  μ΄λ ‡κ²Œ λ“€μ—¬μ“°κΈ°κ°€ μ—†λ‹€λ©΄ 읽기 쉽지 μ•Šμ„ 것이닀.
κ°„ν˜Ή κ°œλ°œμžλ“€μ€ 짧은 if / whileλ¬Έ λ“±μ—μ„œ λ“€μ—¬μ“°κΈ° κ·œμΉ™μ„ λ¬΄μ‹œν•˜κ³€ ν•œλ‹€.
ν•˜μ§€λ§Œ μ΄λŠ” 쒋지 μ•ŠμœΌλ‹ˆ μ˜μ‹μ μœΌλ‘œ λ“€μ—¬μ“°κΈ°λ₯Ό ν•˜λŠ” 것을 μΆ”μ²œν•œλ‹€.

κ°€μ§œ λ²”μœ„
μ§€κΈˆκΉŒμ§€ λ‚˜λŠ” whileλ¬Έ 끝에 μ„Έλ―Έμ½œλ‘ ; ν•˜λ‚˜λ₯Ό 살짝 덧뢙인 μ½”λ“œλ‘œ μˆ˜μ—†μ΄ 골탕을 λ¨Ήμ—ˆλ‹€γ…‹γ…‹γ…‹γ…‹γ…‹γ…‹γ…‹γ…‹γ…‹γ…‹γ…‹γ…‹γ…‹γ…‹γ…‹γ…‹γ…‹γ…‹γ…‹λ„€...μ΄λŸ¬μ§€ λ§λΌλŠ” κ±°μ£ ...

νŒ€ κ·œμΉ™

처음 μ‹œμž‘ν•  λ•Œ λ§ν–ˆλ“―μ΄ 개발자 고유의 μ½”λ”©μŠ€νƒ€μΌμ΄ 있기 λ•Œλ¬Έμ—
ν”„λ‘œμ νŠΈλ₯Ό μ‹œμž‘ν•  λ•Œ

  • 주석
  • λ“€μ—¬μ“°κΈ°
  • λ©”μ„œλ“œ 이름 ν˜•μ‹

등을 미리 μ •ν•˜κ³  μ‹œμž‘ν•˜κ³ , 이λ₯Ό μš°μ„ μœΌλ‘œ 여겨야 ν•œλ‹€.


λ°₯ μ•„μ €μ”¨μ˜ ν˜•μ‹κ·œμΉ™

μ•„μ£Ό 잘 μ§œμ—¬μ§„ μ½”λ“œ ν˜•μ‹μ΄ 예제둜 μ²¨λΆ€λ˜μ–΄ μžˆλŠ”λ°
원본을 찾지 λͺ»ν•΄ 깃헙에 λˆ„κ°€ μ˜¬λ €λ†“μ„ κ±Έ 첨뢀해본닀..
https://github.com/ludwiggj/CleanCode/blob/master/src/clean/code/chapter05/CodeAnalyzer.java

CleanCode/src/clean/code/chapter05/CodeAnalyzer.java at master Β· ludwiggj/CleanCode

Code samples taken from CleanCode book. Contribute to ludwiggj/CleanCode development by creating an account on GitHub.

github.com

 

λ°˜μ‘ν˜•