๐Ÿ—‚ WIL/๐Ÿ“ Etc

ํ”„๋ก ํŠธ์—”๋“œ ์•„ํ‚คํ…์ฒ˜ - How to Write Shy Code

nalong 2025. 1. 12. 21:22

์š”์ฆ˜ ํšŒ์‚ฌ์—์„œ ํ”„๋ก ํŠธ์—”๋“œ ์•„ํ‚คํ…์ฒ˜ ๊ด€๋ จํ•ด์„œ ์Šคํ„ฐ๋””๋ฅผ ํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ๋‚ด๊ฐ€ ๋ฐœํ‘œ ๋งก์€  How to Write Shy Code์— ๋Œ€ํ•ด ์ •๋ฆฌํ•˜์˜€๋‹ค.

Shy Code

๋‹ค๋ฅธ ๋ชจ๋“ˆ์— ๋ถˆํ•„์š”ํ•œ ๊ฒƒ์„ ๋“œ๋Ÿฌ๋‚ด์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ๋ชจ๋“ˆ์˜ ๊ตฌํ˜„์— ์˜์กดํ•˜์ง€ ์•Š๋Š” ๋ชจ๋“ˆ

( ++ ์ด์ „์— ์ฝ์€ ์˜ค๋ธŒ์ ํŠธ์™€ ๋™์ผํ•œ ์ฃผ์ œ : ๊ฐ ๊ฐ์ฒด๊ฐ€ ์ž์‹ ์˜ ์ฑ…์ž„์„ ์ž์œจ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋„๋ก ์„ค๊ณ„ํ•˜๋ฉด, ํ˜‘๋ ฅ ์‹œ ๋‚ด๋ถ€ ๊ตฌ์กฐ ๋…ธ์ถœ์ด ์ตœ์†Œํ™”๋œ๋‹ค. )

Orthogonality

x, y, z ์ขŒํ‘œ๋Š” ์ง๊ตํ•œ๋‹ค. ์ฆ‰, ํ•œ ์ถ•์„ ๊ฐ€๋กœ์งˆ๋Ÿฌ ์ด๋™ํ•ด๋„ ๋‹ค๋ฅธ ๋‘ ์ถ•์—๋Š” ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋Š”๋‹ค.

์†Œํ”„ํŠธ์›จ์–ด์—์„œ๋Š” '๋ชจ๋“ˆ ๊ฐ„์— ์˜ํ–ฅ์ด ์ตœ์†Œํ™”๋œ ๋…๋ฆฝ์„ฑ'์„ ์˜๋ฏธํ•จ.

The Law of Demeter

ํ•ด๋‹น ๋ฒ•์น™์€ ์˜ค์ง ๋‹น์‹ ์˜ ์นœ๊ตฌ์—๊ฒŒ๋งŒ ๋งํ•˜๋ผ(Only talk to your friends)๋ผ๋Š” ๊ตฌ์ ˆ๋กœ ์š”์•ฝ๋œ๋‹ค.

= ๊ฒฐ๊ตญ ์ตœ์†Œํ•œ์˜ ๋…๋ฆฝ์„ฑ์„ ๊ฐ€์ ธ๊ฐ€๋ผ๋Š” ๋œป๊ณผ ๋™์ผ.

“Thou shalt speak only to thy closest companions, for reaching into the depths of a stranger’s soul shall bring chaos to thy code as surely as I bring the winter when my tests flake on the release pipe lines.”

 

์˜ˆ๋ฅผ ๋“ค์–ด ๊ณ ๊ฐ ์ง€์› ์‹œ์Šคํ…œ์— ์•„๋ž˜์ฒ˜๋Ÿผ ์„ธ ๊ฐ€์ง€ ๋ชจ๋“ˆ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด์ž.

์ด์ œ ๊ณ ๊ฐ์˜ ๊ฐ€์žฅ ์ตœ๊ทผ ๋Œ€ํ™”์—์„œ ๊ฐ€์žฅ ์ตœ๊ทผ ๋ฉ”์‹œ์ง€๋ฅผ ๊ฐ€์ ธ์™€์„œ ์–ด๋–ค ์‹์œผ๋กœ๋“  ์ฒ˜๋ฆฌํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด์ž.

 

customer์—์„œ conversations ๋ฐฐ์—ด์„ ์ง์ ‘ ๊บผ๋‚ด์„œ ๋งˆ์ง€๋ง‰ ๋Œ€ํ™”๋ฅผ ์ฐพ๊ณ , ๊ทธ ๋Œ€ํ™” ๊ฐ์ฒด์—์„œ ๋˜ messages ๋ฐฐ์—ด์„ ๊บผ๋‚ด ๊ฐ€์žฅ ์ตœ์‹  ๋ฉ”์‹œ์ง€๋ฅผ ์ฐพ๊ณ  ์žˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ๊ฒฐํ•ฉ๋„๊ฐ€ ์˜ฌ๋ผ๊ฐ€๊ณ , ๋‚ด๋ถ€ ๊ตฌํ˜„์„ ๋ฐ”๊ฟ€ ๋•Œ๋งˆ๋‹ค ์—ฌ๋Ÿฌ ๊ตฐ๋ฐ๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•œ๋‹ค.

 

๊ฒฐ๊ตญ ์œ„์—์„œ ์„ค๋ช…ํ•œ ๋””๋ฏธํ„ฐ ๋ฒ•์น™์„ ์œ„๋ฐ˜ํ•˜๊ณ  ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

์‹ค์ œ๋กœ๋Š” ์„ธ ๋ชจ๋“ˆ ๋ชจ๋‘์™€ ๋ฐ€์ ‘ํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋˜์–ด ์žˆ์Œ.

๊ทธ๋Ÿผ ๋””๋ฏธํ„ฐ์˜ ๋ฒ•์น™์— ์ถฉ์กฑํ•˜๊ธฐ ์œ„ํ•ด ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋ถ„๋ฆฌํ•ด ๋ณด์ž.

๊ณ ๊ฐ(Customer) ๊ฐ์ฒด๊ฐ€ "๊ฐ€์žฅ ์ตœ์‹  ๋ฉ”์‹œ์ง€๋ฅผ ์ฐพ์•„์ฃผ๋Š”(findMostRecentMessage)" ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•˜๋ฉด, ์™ธ๋ถ€์—์„œ๋Š” ์•„๋ž˜์ฒ˜๋Ÿผ ํ•˜๋‚˜์˜ ํ•จ์ˆ˜๋งŒ ํ˜ธ์ถœํ•˜๋„๋ก ์„ค๊ณ„ ๊ฐ€๋Šฅํ•˜๋‹ค.

๋‚ด๋ถ€์ ์œผ๋กœ Customer๊ฐ€ Conversations๋‚˜ Messages์— ์–ด๋–ป๊ฒŒ ์ ‘๊ทผํ•˜๊ณ , ์–ด๋–ป๊ฒŒ ๋‚ ์งœ๋ฅผ ๋น„๊ตํ•ด ์ตœ์‹  ๋ฉ”์‹œ์ง€๋ฅผ ์ฐพ๋Š”์ง€๋Š” ๋“œ๋Ÿฌ๋‚˜์ง€ ์•Š์Œ.

ํ•ด๋‹น ์˜ˆ์‹œ๋Š” "Tell, Don’t Ask" ๋ผ๋Š” ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์›์น™์„ ๋ณด์—ฌ์ฃผ๋Š”๋ฐ, ๊ฐ์ฒด์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌป๊ณ  ์ง์ ‘ ์ฒ˜๋ฆฌํ•˜๊ธฐ๋ณด๋‹ค, ๊ฐ์ฒด๊ฐ€ ํ•ด์•ผ ํ•  ์ผ์„ ์ง€์‹œํ•˜๋Š” ๊ฒƒ์ด ๋‚ซ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋Š” ์ฝ”๋“œ๋ฅผ ์ˆ˜์ค๊ฒŒ ์œ ์ง€ํ•˜๋Š” ํ›Œ๋ฅญํ•œ ๋ฐฉ์‹์ด๊ณ , ํ•จ์ˆ˜๋‚˜ UI ์ปดํฌ๋„ŒํŠธ, React ํ›… ๋“ฑ ์–ด๋””๋“  ์ ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ํ•œ๋‹ค.
๋‹ค๋งŒ ์ด๋ฅผ ๊ทน๋‹จ์ ์œผ๋กœ ์ ์šฉํ•ด "๋ฉ”์„œ๋“œ ์ฒด์ด๋‹์„ ์•„์˜ˆ ํ•˜์ง€ ๋ง์ž" ๋ผ๊ณ  ๋ณด๋Š” ๊ฑด ๋„ˆ๋ฌด ์ง€๋‚˜์น˜๋‹ค๊ณ  ํ•œ๋‹ค. ๋งŒ์•ฝ ๊ฐ™์€ ๊ฐ์ฒด ์†Œ์† ๋ฉ”์„œ๋“œ๋“ค์ด๋ผ๋ฉด ์ฒด์ด๋‹ํ•ด๋„ ๋ฌด๋ฐฉํ•˜์ง€๋งŒ, ์ค‘์š”ํ•œ ๊ฑด  ์ฝ”๋“œ๊ฐ€ ๋ช‡ ๊ฐœ์˜ ์ถ”์ƒํ™” ๊ณ„์ธต์„ ํ†ต๊ณผํ•˜๋А๋ƒ ์ธ๋ฐ , ํ•œ ๊ฐœ๋Š” ์ด์ƒ์ ์ด๊ณ  ๋‘ ๊ฐœ๋Š” ๊ดœ์ฐฎ์œผ๋ฉฐ, ์„ธ ๊ฐœ ์ด์ƒ์ด๋ผ๋ฉด ์ฝ”๋“œ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์€ ๊ฒƒ์„ ์•„๋Š” ์ƒํƒœ์ผ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์„ ์œ ์˜ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. 

 

๐Ÿ”ฅ ๊ฒฐ๋ก  :  ์ฝ”๋“œ์˜ ์„ค๊ณ„๋ฅผ ๊ฐœ์„ ํ•˜๊ณ  ๋ณ€๊ฒฝ์— ๊ฐ•ํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋ฉด, ์ข€ ๋” ์ˆ˜์ค๊ฒŒ ๋งŒ๋“ค์–ด ๋ณด๋„๋ก ํ•˜์ž. ๐Ÿ”ฅ

 

์ ์šฉ 

ํ•ด๋‹น ๊ธ€์„ ์ฝ๊ณ  ์ง€๊ธˆ ํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์ ํŠธ์˜ ์ฝ”๋“œ๋ฅผ ๊ฐ„๋‹จํžˆ ๋ฆฌํŒฉํ„ฐ๋ง ํ•ด๋ณด์•˜๋‹ค.

 

๊ธฐ์กด์—๋Š” ColumnEdit ๋‚ด๋ถ€์— ์ปฌ๋Ÿผ ๋ฆฌ์‚ฌ์ด์ฆˆ์™€ ๊ด€๋ จ๋œ ๋ชจ๋“  ๋กœ์ง์ด ํฌํ•จ๋˜์–ด ์žˆ์—ˆ๋‹ค.

 

ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ๋Š” ๋ฆฌ์‚ฌ์ด์ฆˆ ๊ธฐ๋Šฅ์„ ์ œ์™ธํ•˜๊ณ ๋„ ๋งŽ์€ ๊ธฐ๋Šฅ์„ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ์–ด state ๊ฐ€ ๋งŽ๋‹ค.

์‹ค์ œ ์ฝ”๋“œ์—์„œ ๋ฆฌ์‚ฌ์ด์ฆˆ ๊ด€๋ จ๋œ ์ƒํƒœ๋Š” widthPercnet, initalX, isResizing์ธ๋ฐ widthPercnet๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” initalX, isResizing๋Š”  ๋ณ€๊ฒฝ๋œ ๋„ˆ๋น„ ํผ์„ผํŠธ๋ฅผ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•œ State์ด๋‹ค.

ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ฆฌ์‚ฌ์ด์ฆˆ ๊ด€๋ จํ•ด์„œ๋Š” ์ตœ์ข…์ ์œผ๋กœ ๋ณ€๊ฒฝ๋œ widthPercnet ๊ฐ’๋งŒ ์ค‘์š”ํ•  ๋ฟ, ๋‹ค๋ฅธ ์ƒํƒœ๋“ค์„ ์•Œ ํ•„์š”๊ฐ€ ์—†๋‹ค.

 

๋”ฐ๋ผ์„œ ๋ฆฌ์‚ฌ์ด์ฆˆ ๊ด€๋ จ๋œ ๋กœ์ง์€ ๋”ฐ๋กœ ๋ถ„๋ฆฌํ•ด์„œ ํ›…์œผ๋กœ ๋งŒ๋“  ๊ฒฐ๊ณผ  ColumnEdit์€ ํ›…์— ์–ด๋–ค ์ž‘์—…์„ ํ•ด๋‹ฌ๋ผ (์ปฌ๋Ÿผ ๋ฆฌ์‚ฌ์ด์ฆˆ ๋“ฑ)๊ณ  ๋ช…๋ น๋งŒ ํ•˜๊ฒŒ ๋จ์œผ๋กœ์จ ๋‚˜๋จธ์ง€ ๊ตฌ์ฒด์ ์ธ ๋กœ์ง๋“ค์€ Shy~ํ•˜๊ฒŒ ์บก์Аํ™”๋˜์—ˆ๋‹ค. 

widthPercent ๋ฅผ ์ œ์™ธํ•œ state ๋“ค์€ ํ›… ์•ˆ์—์„œ ๊ด€๋ฆฌํ•˜๋„๋ก ๋ถ„๋ฆฌ๋˜์—ˆ๋‹ค.