ํ๋ก ํธ์๋ ์ํคํ ์ฒ - How to Write Shy Code
์์ฆ ํ์ฌ์์ ํ๋ก ํธ์๋ ์ํคํ ์ฒ ๊ด๋ จํด์ ์คํฐ๋๋ฅผ ํ๊ณ ์๋๋ฐ, ๋ด๊ฐ ๋ฐํ ๋งก์ How to Write Shy Code์ ๋ํด ์ ๋ฆฌํ์๋ค.
Shy Code
๋ค๋ฅธ ๋ชจ๋์ ๋ถํ์ํ ๊ฒ์ ๋๋ฌ๋ด์ง ์๊ณ ๋ค๋ฅธ ๋ชจ๋์ ๊ตฌํ์ ์์กดํ์ง ์๋ ๋ชจ๋
( ++ ์ด์ ์ ์ฝ์ ์ค๋ธ์ ํธ์ ๋์ผํ ์ฃผ์ : ๊ฐ ๊ฐ์ฒด๊ฐ ์์ ์ ์ฑ ์์ ์์จ์ ์ผ๋ก ์ํํ๋๋ก ์ค๊ณํ๋ฉด, ํ๋ ฅ ์ ๋ด๋ถ ๊ตฌ์กฐ ๋ ธ์ถ์ด ์ต์ํ๋๋ค. )
Orthogonality
์ํํธ์จ์ด์์๋ '๋ชจ๋ ๊ฐ์ ์ํฅ์ด ์ต์ํ๋ ๋ ๋ฆฝ์ฑ'์ ์๋ฏธํจ.
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 ๋ด๋ถ์ ์ปฌ๋ผ ๋ฆฌ์ฌ์ด์ฆ์ ๊ด๋ จ๋ ๋ชจ๋ ๋ก์ง์ด ํฌํจ๋์ด ์์๋ค.
์ค์ ์ฝ๋์์ ๋ฆฌ์ฌ์ด์ฆ ๊ด๋ จ๋ ์ํ๋ widthPercnet, initalX, isResizing์ธ๋ฐ widthPercnet๋ฅผ ์ ์ธํ๊ณ ๋ initalX, isResizing๋ ๋ณ๊ฒฝ๋ ๋๋น ํผ์ผํธ๋ฅผ ๊ณ์ฐํ๊ธฐ ์ํ State์ด๋ค.
ํด๋น ์ปดํฌ๋ํธ์์ ๋ฆฌ์ฌ์ด์ฆ ๊ด๋ จํด์๋ ์ต์ข ์ ์ผ๋ก ๋ณ๊ฒฝ๋ widthPercnet ๊ฐ๋ง ์ค์ํ ๋ฟ, ๋ค๋ฅธ ์ํ๋ค์ ์ ํ์๊ฐ ์๋ค.
๋ฐ๋ผ์ ๋ฆฌ์ฌ์ด์ฆ ๊ด๋ จ๋ ๋ก์ง์ ๋ฐ๋ก ๋ถ๋ฆฌํด์ ํ ์ผ๋ก ๋ง๋ ๊ฒฐ๊ณผ ColumnEdit์ ํ ์ ์ด๋ค ์์ ์ ํด๋ฌ๋ผ (์ปฌ๋ผ ๋ฆฌ์ฌ์ด์ฆ ๋ฑ)๊ณ ๋ช ๋ น๋ง ํ๊ฒ ๋จ์ผ๋ก์จ ๋๋จธ์ง ๊ตฌ์ฒด์ ์ธ ๋ก์ง๋ค์ Shy~ํ๊ฒ ์บก์ํ๋์๋ค.