😎 CLEAN CODE

clean-code-typescript-λ²ˆμ—­

clean-code-javascript

clean-code-javascript- λ²ˆμ—­

  1. Clean Code?
  2. ν•„μš”ν•œ 이유
  3. ν•™μŠ΅λ²•

1. Clean Code?

μ–΄λ–€ 것을 clean ν•˜λ‹€κ³  할지, 그것을 μ •μ˜ν•˜λŠ” 것이 μ€‘μš”.

μ’€ 더 보편적으둜 ν†΅μš©λ˜λŠ” ν΄λ¦°μ½”λ“œκ°€ 어떀건지 μ±…μ—μ„œ κΈ°μˆ ν•˜κ³  있음.

이 μ±…μ—μ„œλŠ” 였브젝트 λ©˜ν† λ“€μ΄ μΆ”κ΅¬ν•˜λŠ” 클린 μ½”λ“œ λ‚΄μš©μ„ λ‹΄κ³  있음.

  • μ„±λŠ₯이 쒋은 μ½”λ“œ
  • μ˜λ―Έκ°€ λͺ…ν™•ν•œ μ½”λ“œ ( = 가독성이 쒋은 μ½”λ“œ)
  • 쀑볡이 제거된 μ½”λ“œ

보이슀카우트 룰

= μΊ ν”„μž₯은 처음 왔을 λ•Œλ³΄λ‹€ 더 κΉ¨λ—ν•˜κ²Œ ν•΄ 놓고 λ– λ‚˜μ•Ό ν•œλ‹€.

= λ‚΄κ°€ 건듀기 전보닀 더 κΉ¨λ—ν•œ μ½”λ“œλ‘œ λ§Œλ“€μ–΄μ•Ό ν•œλ‹€.

λ©˜ν† λ“€μ΄ μƒκ°ν•˜λŠ” Clean Code

λ‚˜λŠ” μš°μ•„ν•˜κ³  효율적인 μ½”λ“œλ₯Ό μ’‹μ•„ν•œλ‹€.

논리가 간단해야 버그가 μˆ¨μ–΄λ“€μ§€ λͺ»ν•œλ‹€.

μ˜μ‘΄μ„±μ„ μ΅œλŒ€ν•œ 쀄여야 μœ μ§€λ³΄μˆ˜κ°€ μ‰¬μ›Œμ§„λ‹€.

였λ₯˜λŠ” λͺ…λ°±ν•œ μ „λž΅μ— μ˜κ±°ν•΄ μ² μ €νžˆ μ²˜λ¦¬ν•œλ‹€.

μ„±λŠ₯을 졜적으둜 μœ μ§€ν•΄μ•Ό μ‚¬λžŒλ“€μ΄ 원칙 μ—†λŠ” μ΅œμ ν™”λ‘œ μ½”λ“œλ₯Ό λ§μΉ˜λ €λŠ” μœ ν˜Ήμ— 빠지지 μ•ŠλŠ”λ‹€.

κΉ¨λ—ν•œ μ½”λ“œλŠ” ν•œ 가지λ₯Ό μ œλŒ€λ‘œ ν•œλ‹€.

  • c++ μ°½μ‹œμž, Bjarne Stroustrup

κΉ¨λ—ν•œ μ½”λ“œλŠ” λ‹¨μˆœν•˜κ³  직접적이닀.

κΉ¨λ—ν•œ μ½”λ“œλŠ” 잘 μ“΄ λ¬Έμž₯처럼 μ½νžŒλ‹€.

κΉ¨λ—ν•œ μ½”λ“œλŠ” κ²°μ½” μ„€κ³„μžμ˜ μ˜λ„λ₯Ό μˆ¨κΈ°μ§€ μ•ŠλŠ”λ‹€.

였히렀 λͺ…μΎŒν•œ 좔상화와 λ‹¨μˆœν•œ μ œμ–΄λ¬ΈμœΌλ‘œ κ°€λ“ν•˜λ‹€.

  • Object Oriented Anlysis and Design with Application μ €μž Grady Booch

κΉ¨λ—ν•œ μ½”λ“œλŠ” μž‘μ„±μžκ°€ μ•„λ‹Œ μ‚¬λžŒλ„ 읽기 쉽고 고치기 쉽닀.

λ‹¨μœ„ ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€μ™€ 인수 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€κ°€ μ‘΄μž¬ν•œλ‹€.

κΉ¨λ—ν•œ μ½”λ“œμ—λŠ” μ˜λ―ΈμžˆλŠ” 이름이 λΆ™λŠ”λ‹€.

νŠΉμ • λͺ©μ μ„ λ‹¬μ„±ν•˜λŠ” 방법은 ν•˜λ‚˜λ§Œ μ œκ³΅ν•œλ‹€.

μ˜μ‘΄μ„±μ€ μ΅œμ†Œμ΄λ©° 각 μ˜μ‘΄μ„±μ„ λͺ…ν™•νžˆ μ •μ˜ν•œλ‹€.

APIλŠ” λͺ…ν™•ν•˜λ©° μ΅œμ†Œλ‘œ μ€„μ˜€λ‹€.

언어에 따라 ν•„μš”ν•œ λͺ¨λ“  정보λ₯Ό μ½”λ“œλ§ŒμœΌλ‘œ λͺ…ν™•νžˆ ν‘œν˜„ν•  수 없기에 μ½”λ“œλŠ” λ¬Έν•™μ μœΌλ‘œ ν‘œν˜„ν•΄μ•Ό λ§ˆλ•…ν•˜λ‹€.

  • OTI 창립자이자 이클립슀 μ „λž΅μ˜ λŒ€λΆ€ Dave Thomas

κΉ¨λ—ν•œ μ½”λ“œμ˜ νŠΉμ§•μ€ λ§Žμ§€λ§Œ κ·Έ μ€‘μ—μ„œλ„ λͺ¨λ‘λ₯Ό μ•„μš°λ₯΄λŠ” νŠΉμ§•μ΄ ν•˜λ‚˜ μžˆλ‹€.

κΉ¨λ—ν•œ μ½”λ“œλŠ” μ–Έμ œλ‚˜ λˆ„κ΅°κ°€ 주의 깊게 μ§°λ‹€λŠ” λŠλ‚Œμ„ μ€€λ‹€.

고치렀고 μ‚΄νŽ΄λ΄λ„ λ”±νžˆ 손 댈 곳이 μ—†λ‹€.

μž‘μ„±μžκ°€ 이미 λͺ¨λ“  사항을 κ³ λ €ν–ˆμœΌλ―€λ‘œ.

κ³ μΉ  ꢁ리λ₯Ό ν•˜λ‹€λ³΄λ©΄ μ–Έμ œλ‚˜ 제자리둜 λŒμ•„μ˜¨λ‹€.

κ·Έλ¦¬κ³ λŠ” λˆ„κ΅°κ°€ 남겨쀀 μ½”λ“œ, λˆ„κ΅°κ°€ 주의 깊게 μ§œλ†“μ€ μž‘ν’ˆμ— 감사λ₯Ό λŠλ‚€λ‹€.

  • Working Effectively with Legacy Code μ €μž Michael Feathers

ν΄λ¦°μ½”λ“œ = 글을 잘 μ“°λŠ” 것과 일λ§₯상톡 ν•œλ‹€.

  • 읽기 μ‰¬μš΄ μ½”λ“œ
  • μ „λ‹¬ν•˜κ³ μž ν•˜λŠ” λ°”λ₯Ό λͺ…ν™•ν•˜κ²Œ μ•Œλ €μ£ΌλŠ” μ½”λ“œ
  • 개발자의 μ˜λ„κ°€ λͺ¨λ‘ 담겨 μžˆλŠ” μ½”λ“œ

2. ν•„μš”ν•œ 이유?

ν›Œλ₯­ν•œ 개발자 혼자 ν•˜λ‚˜μ˜ ν”„λ‘œμ νŠΈλ₯Ό μ „λΆ€λ‹€ κ°œλ°œν•˜λŠ” μ‹œμ ˆμ€ 지났닀.

ν˜‘μ—… λŠ₯λ ₯을 λ°œμ „ μ‹œμΌœμ•Ό ν•˜λŠ” μ‹œλŒ€.

ν”„λ‘œμ νŠΈλ₯Ό 처음 μ‹œμž‘ν•˜λŠ” 경우λ₯Ό μ œμ™Έν•˜κ³ λŠ”, λ‹€λ₯Έ μ‚¬λžŒμ˜ μ½”λ“œλ₯Ό μ½λŠ” μ‹œκ°„μ΄ 훨씬 λ§Žμ•„μ§€κ²Œ λ˜μ—ˆμŒ,

μ½”λ“œλ₯Ό λ§Œλ“œλŠ” μ‹œκ°„μ„ λ‹¨μΆ•ν•˜λŠ” 것도 μ€‘μš”ν•˜μ§€λ§Œ.

λ‹€λ₯Έ μ‚¬λžŒμ΄ μ½”λ“œλ₯Ό μ½λŠ” μ‹œκ°„μ„ μ€„μ΄λŠ” 것이 λ”μš± μ€‘μš”ν•΄μ§€λ©° 클린 μ½”λ“œκ°€ κ°κ΄‘λ°›κ²Œ 됨.

μž‘κ°€μΈ λ‚΄κ°€ μ‹œκ°„μ„ 쑰금 더 λ“€μ—¬ 쒋은 λ¬Έμž₯으둜 ν‘œν˜„ν•˜κ²Œ λœλ‹€λ©΄, λ§Žμ€ λ…μžλ“€μ€ κ·Έ μ½”λ“œλ₯Ό 술술 읽게 되고, 더 λΉ λ₯Έ μ‹œκ°„ μ•ˆμ— ν•΄λ‹Ή λ‚΄μš©μ„ μˆ™μ§€ν•˜κ³ , μƒˆλ‘œμš΄ μ½”λ“œλ₯Ό λ§Œλ“€κ±°λ‚˜ μˆ˜μ •ν•  수 있게 됨

클린 μ½”λ“œμ˜ νš¨μœ¨μ„±

μ•„λž˜μ²˜λŸΌ, 개발자 ν˜Όμžμ˜€λ‹€λ©΄ 효율이 λ–¨μ–΄μ§€μ§€λ§Œ. ν˜‘μ—…μ˜ μ‹œλŒ€μ—μ„œλŠ” 였히렀 νš¨μœ¨μ„±μ΄ 증가함. (ex, μ˜€ν”ˆμ†ŒμŠ€)

  • 일반 μ½”λ“œ
    • 개발자 : 1μ‹œκ°„ μ½”λ”©
    • λ„€ λͺ…μ˜ ν˜‘μ—…μžκ°€ μ½”λ“œ 이해 : 1μ‹œκ°„ * 4λͺ… = 4μ‹œκ°„
  • 클린 μ½”λ“œ ( μœ„ μ½”λ“œλ₯Ό κ°œλ°œμžκ°€ μ’€ 더 곡듀여 λ§Œλ“¦ )
    • 개발자 2μ‹œκ°„ μ½”λ”©
    • λ„€ λͺ…μ˜ ν˜‘μ—…μžκ°€ μ½”λ“œ 이해 : 0.5μ‹œκ°„ * 4λͺ… = 2μ‹œκ°„

ν•™μŠ΅λ²•

  1. 일단, ν΄λ¦°μ½”λ“œ 책을 읽어본닀.
  2. 직접 μ μš©ν•΄λ³΄κΈ°
    1. λ‚΄κ°€ λ‹΄λ‹Ήν•œ ν”„λ‘œμ νŠΈμ—μ„œ λ‚˜μœ μ½”λ“œλ₯Ό λ°œκ²¬ν•˜κ³  λ¦¬νŒ©ν† λ§ν•΄λ³΄κΈ°
    2. μƒˆλ‘œ λ§Œλ“œλŠ” μ½”λ“œλ₯Ό clean code 룰에 맞좰 λ§Œλ“€μ–΄λ³΄κΈ°
    3. ν”„λ‘œμ νŠΈμ— λ§žλŠ” clean code 룰을 λ§Œλ“€μ–΄λ³΄κΈ°
  3. 쒋은 μ½”λ“œ 읽어보기
    1. λ‹΄λ‹Ήν•˜κ³  μžˆλŠ” ν”„λ‘œμ νŠΈμ—μ„œ 쒋은 μ½”λ“œλ₯Ό 찾아보기
    2. μ˜€ν”ˆ μ†ŒμŠ€λ‘œ μ œκ³΅ν•˜λŠ” μ½”λ“œμ—μ„œ 쒋은 μ½”λ“œλ₯Ό 찾아보기

😎 리뷰 볡슡

λ‚˜μœ μ½”λ“œ

μ„±λŠ₯이 λ‚˜μœ μ½”λ“œ

λΆˆν•„μš”ν•œ 연산이 λ“€μ–΄κ°€μ„œ κ°œμ„ μ˜ 여지가 μžˆλŠ” μ½”λ“œ

μ˜λ―Έκ°€ λͺ¨ν˜Έν•œ μ½”λ“œ

  • μ΄ν•΄ν•˜κΈ° μ–΄λ €μš΄ μ½”λ“œ
  • 넀이밍과 κ·Έ λ‚΄μš©μ΄ λ‹€λ₯Έ μ½”λ“œ

μ€‘λ³΅λœ μ½”λ“œ

  • λΉ„μŠ·ν•œ λ‚΄μš©μΈλ° μ€‘λ³΅λ˜λŠ” μ½”λ“œλ“€μ€ 버그λ₯Ό λ‚³λŠ”λ‹€.

λ‚˜μœ μ½”λ“œκ°€ λ‚˜μœ 이유

깨진 유리창 법칙

λ‚˜μœ μ½”λ“œλŠ” 깨진 유리창처럼 계속 λ‚˜μœ μ½”λ“œκ°€ μžλΌλ‚˜λ„λ‘ ν•œλ‹€.

생산성 μ €ν•˜

λ‚˜μœ μ½”λ“œκ°€ μŒ“μΌμˆ˜λ‘ κΈ°μˆ λΆ€μ±„κ°€ μŒ“μ΄κΈ° λ•Œλ¬Έμ— 생산성을 ꡉμž₯히 λ–¨μ–΄λœ¨λ¦°λ‹€.

κ²°κ΅­μ—λŠ”, μƒˆλ‘œμš΄ μ‹œμŠ€ν…œμ„ λ§Œλ“€μ–΄μ•Ό ν•œλ‹€.

ν˜„μž¬μ‹œμŠ€ν…œμ„ μœ μ§€λ³΄μˆ˜ν•˜λ©° λŒ€μ²΄ν•  μƒˆλ‘œμš΄ μ‹œμŠ€ν…œ κ°œλ°œμ€ ν˜„μ‹€μ μœΌλ‘œ 맀우 μ–΄λ ΅λ‹€.

(μ˜¬λ“œμ‹œμŠ€ν…œκ³Ό 뉴 μ‹œμŠ€ν…œμ΄ 같은 μš”κ΅¬μ‚¬ν•­μ„ μˆ˜λ ΄ν•˜λ©΄μ„œ, μƒˆλ‘œμš΄ 뉴 μ‹œμŠ€ν…œμœΌλ‘œ λ‚˜μ•„κ°€λŠ”κ²Œ μ§„μ§œ 쉽지 μ•Šλ‹€.)

λ‚˜μœ μ½”λ“œλ₯Ό μ§œλŠ” 이유?

일정이 μ΄‰λ°•ν•΄μ„œ

ν•˜μ§€λ§Œ... λ‚˜μœ μ½”λ“œλŠ” 생산성을 μ €ν•˜ν•˜κΈ° λ•Œλ¬Έμ— 였히렀 일정을 λͺ»λ§žμΆ˜λ‹€.

영ν–₯ λ²”μœ„κ°€ λ„“μ–΄μ„œ

생각보닀 영ν–₯ λ²”μœ„κ°€ λ„“μ–΄μ„œ κ±΄λ“œλ Έλ‹€κ°€ λ‹€λ₯Έ 뢀뢄에 버그가 λ°œμƒν• κΉŒλ΄ (μ‚¬μ΄λ“œ μ΄νŽ™νŠΈ)

ν•˜μ§€λ§Œ... 기술 λΆ€μ±„λŠ” λΆ€λ©”λž‘μ²˜λŸΌ μš°λ¦¬μ—κ²Œ λŒμ•„μ˜¨λ‹€.