λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ“’ 개발 μ„œμ /Clean Code

[클린 μ½”λ“œ] 1μž₯ κΉ¨λ—ν•œ μ½”λ“œ

by nitronium102 2022. 2. 19.

TIL (Today I Learned)

2022.02.19

 

였늘 읽은 λ²”μœ„

μΆ”μ²œμ‚¬ ~ 1μž₯. κΉ¨λ—ν•œ μ½”λ“œ

 

μ±…μ—μ„œ κΈ°μ–΅ν•˜κ³  싢은 λ‚΄μš©

5S 법칙(μΆ”μ²œμ‚¬ xxiv)

- μ •λ ¬ : μ μ ˆν•œ λͺ…λͺ…법 λ“±κ³Ό 같은 방법을 μ‚¬μš©ν•΄ 무엇이 어디에 μžˆλŠ”μ§€ μ•Œμ•„μ•Ό ν•œλ‹€.

- 체계화 : μ½”λ“œλŠ” λˆ„κ΅¬λ‚˜ μ˜ˆμƒν•˜λŠ” μœ„μΉ˜μ— μžˆμ–΄μ•Ό ν•œλ‹€.

- 정리 : μ£Όμ„μœΌλ‘œ μ²˜λ¦¬ν•œ μ½”λ“œλ‚˜ ν”„λ‘œμ νŠΈμ™€ 상관 μ—†λŠ” 주석은 μ§€μš΄λ‹€.

- ν‘œμ€€ν™” : κ·Έλ£Ή λ‚΄μ—μ„œ 일관적인 κ΅¬ν˜„ μŠ€νƒ€μΌκ³Ό 기법을 λ„μž…ν•΄μ•Ό ν•œλ‹€.

- 규율 : κ΄€λ‘€λ₯Ό λ”°λ₯΄κ³ , 자기 μ½”λ“œλ₯Ό 자주 λŒμ•„λ³΄κ³  기꺼이 λ³€κ²½ν•œλ‹€.

 

κΉ¨λ—ν•œ μ½”λ“œλž€?

1) 논리가 κ°„λ‹¨ν•œ μ½”λ“œ(쀑볡이 μ—†λ‹€)

2) μ˜μ‘΄μ„±μ΄ μ΅œμ†Œμ΄λ©° 각 μ˜μ‘΄μ„±μ„ λͺ…ν™•νžˆ μ •μ˜ν•˜λŠ” μ½”λ“œ -> μœ μ§€λ³΄μˆ˜κ°€ μ‰¬μ›Œμ§„λ‹€

3) 였λ₯˜λ₯Ό λͺ…λ°±ν•œ μ „λž΅μ— μ˜κ±°ν•΄ μ² μ €νžˆ μ²˜λ¦¬ν•˜λŠ” μ½”λ“œ

4) ν•œ 가지λ₯Ό μ œλŒ€λ‘œ ν•˜λŠ” μ½”λ“œ

5) λͺ¨λ“  ν…ŒμŠ€νŠΈλ₯Ό 톡과 : λ‹¨μœ„ ν…ŒμŠ€νŠΈμ™€ 인수 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€κ°€ μ‘΄μž¬ν•˜λŠ” μ½”λ“œ

6) μ˜λ―ΈμžˆλŠ” μ΄λ¦„μœΌλ‘œ μ‹œμŠ€ν…œ λ‚΄ λͺ¨λ“  섀계 아이디어λ₯Ό ν‘œν˜„

7) 클래슀, λ©”μ„œλ“œ, ν•¨μˆ˜ 등을 μ΅œλŒ€ν•œ 쀄인닀.

 

λ¬Έμž₯

- 빨리 κ°€λŠ” μœ μΌν•œ 방법은 μ–Έμ œλ‚˜ μ½”λ“œλ₯Ό μ΅œλŒ€ν•œ κΉ¨λ—ν•˜κ²Œ μœ μ§€ν•˜λŠ” μŠ΅κ΄€μ΄λ‹€. (7p)

- ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€κ°€ μ—†μœΌλ©΄ κΉ¨λ—ν•˜μ§€ μ•Šλ‹€. (12p)

- μƒˆ μ½”λ“œλ₯Ό μ§œλ©΄μ„œ μš°λ¦¬λŠ” λŠμž„μ—†μ΄ κΈ°μ‘΄ μ½”λ“œλ₯Ό μ½λŠ”λ‹€. (18p)

 

였늘 읽은 μ†Œκ°

- 빨리 κ°€λŠ” μœ μΌν•œ 방법은 μ–Έμ œλ‚˜ μ½”λ“œλ₯Ό μ΅œλŒ€ν•œ κΉ¨λ—ν•˜κ²Œ μœ μ§€ν•˜λŠ” μŠ΅κ΄€μ΄λ‹€. (7p)

이 λ¬Έμž₯이 정말 곡감됐닀. 사싀 μ‘Έμ—…ν”„λ‘œμ νŠΈλ₯Ό ν•˜λ©΄μ„œ 계속 ν•˜λŠ” 생각이 'μ½”λ“œ λ„ˆλ¬΄ λ”λŸ½λ‹€. 이 κΈ°λŠ₯만 λλ‚˜λ©΄ λœ―μ–΄κ³ μ³μ•Όμ§€'μ˜€λŠ”λ°, λ‚˜μ€‘μ— ν•˜μ§€ 말고 쀑간쀑간에 μ‘°κΈˆμ”© κ³ μ³λ‚˜κ°€λŠ” μŠ΅κ΄€μ„ λ“€μ—¬μ•Όκ² λ‹€. 사싀 μ§€κΈˆλ„ μ½”λ“œ 고치고 μžˆλ‹€...

- ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€κ°€ μ—†μœΌλ©΄ κΉ¨λ—ν•˜μ§€ μ•Šλ‹€. (12p)

사싀 쑰금....μ•„μ£Ό 많이 μ°”λ¦¬λŠ” λ¬Έμž₯. μ§€κΈˆκΉŒμ§€λŠ” μŠ€ν”„λ§μ— μž…λ¬Έν•œ 지 μ–Όλ§ˆ λ˜μ§€ μ•Šμ•˜λ‹€λŠ” ν•‘κ³„λ‘œ ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ₯Ό μž‘μ„±ν•˜μ§€ μ•Šμ•˜λŠ”λ° μ—¬κΈ°μ—μ„œ μ•„μ˜ˆ 'κΉ¨λ—ν•˜μ§€ μ•Šλ‹€'라고 λͺ»λ°•μœΌλ‹ˆκΉŒ 죄책감이 λ“ λ‹€. μ•žμœΌλ‘œ ν•˜λŠ” ν”„λ‘œμ νŠΈμ—λŠ” 무쑰건 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ₯Ό μž‘μ„±ν•΄μ•Όκ² λ‹€.(사싀 일일히 postman으둜 λŒλ¦¬λŠ” 게 νž˜λ“  μ΄μœ λ„ μžˆλ‹€. swagger도 μ’‹μ§€λ§Œ μ–˜λŠ” κ·Έλ ‡κ²Œ λ―ΏμŒμ§μŠ€λŸ½μ§€ μ•Šλ‹€)

- μ˜μ‘΄μ„±μ΄ μ΅œμ†Œμ΄λ©° 각 μ˜μ‘΄μ„±μ„ λͺ…ν™•νžˆ μ •μ˜ν•˜λŠ” μ½”λ“œ -> μœ μ§€λ³΄μˆ˜κ°€ μ‰¬μ›Œμ§„λ‹€

κ°•μ˜ λ“€μœΌλ©΄μ„œ μ ˆμ ˆν•˜κ²Œ λŠλ‚€ 것. μ΄λ²ˆμ— RESTful API κ΄€λ ¨ κ°•μ˜λ₯Ό λ“€μ—ˆλŠ”λ° 1λ…„ μ „ κ°•μ˜λΌ κ·ΈλŸ°μ§€ ν›„λ°˜λΆ€ 50%μ—μ„œ dependency 버전 였λ₯˜κ°€ λŠμž„μ—†μ΄ λ°œμƒν–ˆλ‹€. 그런데 각 μ˜μ‘΄μ„±μ΄ μ–΄λ–€ 역할을 ν•˜λŠ”μ§€ λ‚˜μ™€μžˆμ§€ μ•Šμ•„ 일일히 μ°Ύμ•„λ³΄λŠλΌ νž˜λ“€μ—ˆλ˜ 기얡이 μƒμƒν•˜λ‹€. 이번 μ£Ό 내에 μ˜μ‘΄μ„± κ³΅λΆ€ν•˜κ³  ν•„μš”ν•œ μ• λ“€λ§Œ 골라 써야겠닀.

 

κΆκΈˆν•˜κ±°λ‚˜ 잘 μ΄ν•΄λ˜μ§€ μ•ŠλŠ” λ‚΄μš©

- λ₯΄λΈ”λž‘μ˜ 법칙(leblanc's law) : Later Equals Never

https://yiming.dev/clipping/2019/03/21/le-blanc's-law-a-k-a-later-equals-never/

 

LeBlanc's Law (a.k.a Later Equals Never) - Yiming Chen

LeBlanc's Law (a.k.a Later Equals Never) Suddenly a clever idea strikes you. Maybe it means adding some temporal/implicit dependencies. Maybe it means throwing in a magic string that will only work until January 3 next year. Maybe it means breaking the des

yiming.dev

 

객체지ν–₯ μ„€κ³„μ˜ 5가지 원칙

1) SRP(The Single Responsibility Principle) : ν΄λž˜μŠ€μ—λŠ” ν•œ 가지, 단 ν•œ 가지 λ³€κ²½ 이유만 μ‘΄μž¬ν•΄μ•Ό ν•œλ‹€.

-> λ³€κ²½ μ΄μœ κ°€ 무슨 말인지? 클래슀λ₯Ό μ™œ λ³€κ²½ν•˜λŠ” 건지 잘 λͺ¨λ₯΄κ² λ‹€. 

2) OCP(The Open Closed Principle) : ν΄λž˜μŠ€λŠ” ν™•μž₯에 μ—΄λ € μžˆμ–΄μ•Ό ν•˜λ©° 변경에 λ‹«ν˜€ μžˆμ–΄μ•Ό ν•œλ‹€.

3) LSP(The Liskov Substitution Principle) : 상속받은 ν΄λž˜μŠ€λŠ” 기초 클래슀λ₯Ό λŒ€μ²΄ν•  수 μžˆμ–΄μ•Ό ν•œλ‹€.

4) DIP(The Dependency Inversion Principle) : 좔상화에 μ˜μ‘΄ν•΄μ•Ό ν•˜λ©°, ꡬ체화에 μ˜μ‘΄ν•˜λ©΄ μ•ˆ λœλ‹€.

5) ISP(The Interface Segregation Principle) : ν΄λΌμ΄μ–ΈνŠΈμ— λ°€μ ‘ν•˜κ²Œ μž‘κ²Œ μͺΌκ°œμ§„ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μœ μ§€ν•œλ‹€. 

λŒ“κΈ€