๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“’ ๊ฐœ๋ฐœ ์„œ์ /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) : ํด๋ผ์ด์–ธํŠธ์— ๋ฐ€์ ‘ํ•˜๊ฒŒ ์ž‘๊ฒŒ ์ชผ๊ฐœ์ง„ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์œ ์ง€ํ•œ๋‹ค. 

๋Œ“๊ธ€