ํด๋น ์ฃผ์ ๋ ๊ฐํจ๋ฆญ๋ํ๊ต GDSC์์ ์งํ๋๋ ํ ์ฝํก ์ธ์ ์ ์ฃผ์ ๋ก ํ์ฉ๋์์ต๋๋ค.
ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์
ํน์ ๊ด์ ๊ณผ ์ ๊ทผ ๋ฐฉ์์ ๋ฐ๋ฅธ ๊ฐ๋ฐ์์ ์ฝ๋ฉ ๋ฐฉ์
์ด๋ ๋ถ์ผ์ด๊ฑด ๊ด์ ์ ๋ฐ๋ฅธ ์ฌ๋ฌ ๋ฐฉ๋ฒ๋ก ์ด๋ ์ฒด๊ณ๋ค์ด ๋ถ๋ช
ํ ์กด์ฌํ๋ค. ๋น์ฐํ ํ๋ก๊ทธ๋๋ฐ ๋ถ์ผ์์๋ "์ด๋ป๊ฒ ํ๋ก๊ทธ๋๋ฐ์ ํ ๊ฒ์ธ๊ฐ?" ๋ผ๋ ์ง๋ฌธ์ ๋ํ ์ฌ๋ฌ ์๊ฒฌ๋ค์ด ๋ชจ์ฌ ์ด๋ก ์ ํ(ํจ๋ฌ๋ค์)์ด ์๊ฒจ๋๊ณ ๊ฐ๋ฐ์๋ค์ ํจ๋ฌ๋ค์์ ๋ฐํ์ผ๋ก ํ๋ก๊ทธ๋๋ฐํ๋ ค๊ณ ๋
ธ๋ ฅํ๋ ๊ฒ์ด ์ค์ํ๋ค. ์ฆ, ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ ๊ฒ์๋ง ๋ชฉ์ ์ฑ์ ๋์ง ๋ง๊ณ ํ๋ก๊ทธ๋จ ์คํ, ๊ทธ ์ด์์ ๊ฒ์ ์ํด ํจ๋ฌ๋ค์์ ๋ฐํ์ผ๋ก ํ๋ก๊ทธ๋๋ฐํ๋ ๊ฒ์ด ์ค์ํ๋ค๋ ์๋ฏธ์ด๋ค.
ํ๋ก๊ทธ๋จ ์คํ, ๊ทธ ์ด์์ ๊ฒ?
์คํ๊ฒํฐ ์ฝ๋๋ ์ ์์ ์ผ๋ก ๋์ํ์ง๋ง, ์ฌ๋์ด ์ฝ๋๋ฅผ ์ฝ์ผ๋ฉด์ ๊ทธ ์ฝ๋์ ์๋์ ํ์
ํ๊ธฐ๋ ์ด๋ ค์ด ์ฝ๋๋ฅผ ์๋ฏธํ๋ค. ์ข๊ฒ ๋งํ๋ฉด ๊ฐ๋
์ฑ์ด ๋ฎ์ ์ฝ๋ ๋ ๋์๊ฐ ์ฌ์ฌ์ฉ์ฑ, ํ์ฅ์ฑ์ด ๋ฎ์ ์ฝ๋๋ฅผ ์๋ฏธํ๊ณ , ๋์๊ฒ ๋งํ๋ฉด ๊ฐ์ด ์ผํ๊ธฐ ์ซ์ ์ฝ๋๋ฅผ ์๋ฏธํ ๊ฒ์ด๋ค.
ํ๋ก๊ทธ๋๋ฐ ๊ฒฝํ์ด ์ ์ ์ฌ๋๋ค์ด ๊ฐ์ฅ ๋ง์ด ํ๋ ์๊ฐ์ด์ ์ค์๋ "์ ๋๋ก ๋์๊ฐ๋ ๊ฑฐ ๋ณด๋ ํด์น์ ๊ตฐ... ํํ..." ์ผ ๊ฒ์ด๋ค. ์ด๋ ๊ฒ ํ๋ก๊ทธ๋๋ฐ ์คํ ๊ฒฐ๊ณผ์ ์ด์ ์ ๋ง์ถ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ค๋ฉด ๊ทธ ์ด์์ ๊ฒ์ ๋ณด์ง ๋ชปํ๊ฒ ๋๊ณ , ์คํ๊ฒํฐ ์ฝ๋ ๊ฐ๋ฐ์๊ฐ ๋ ์ฌ์ง๊ฐ ์ถฉ๋ถํ๋ค.
ํ๋ก๊ทธ๋จ ์คํ, ๊ทธ ์ด์์ ๊ฒ์ธ ๊ฐ๋
์ฑ, ์ฌ์ฌ์ฉ์ฑ, ํ์ฅ์ฑ์ด ๋์ ์ฝ๋๋ฅผ ์ง๊ณ ์ถ๋ค๋ฉด ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ ๋ํด ์ฃผ๋ชฉํด ๋ณด์. ์ด์ ๋ถํฐ ๊ฐ๋
์ฑ, ์ฌ์ฌ์ฉ์ฑ, ํ์ฅ์ฑ, ์ฆ ์ ์ง๋ณด์ ์ธก๋ฉด์์ ๋ฐ๋ผ๋ณธ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ ๋ํด ์ค๋ช
์ ํ ๊ฒ์ด๋ ์ฐธ๊ณ ํด ์ฃผ๊ธธ ๋ฐ๋๋ค.
ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ ๋ฑ์ฅ
๋๋ถ๋ถ์ ์ฌ๋๋ค์ ์์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ด ์งํํ๋ฉด์ ๋ฑ์ฅํ๋ค๊ณ ์๊ณ ์์ ๊ฒ์ด๋ค. ํ์ง๋ง, ๋ฑ์ฅ ์์๋ ์ด์ ์ ๋ฐ๋๋ก ํจ์ํ ํ๋ก๊ทธ๋๋ฐ -> ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ -> ์ ์ฐจ์ ํ๋ก๊ทธ๋๋ฐ์ด๋ค. ์ฐ๋ฆฌ๊ฐ ์๊ณ ์๋ ํจ๋ฌ๋ค์์ ์์๋ ๋ฑ์ฅ ์์๊ฐ ์๋ ํด๋น ํจ๋ฌ๋ค์์ด ๊ฐ๊ด๋ฐ์ ์์ ์ด๋ค. ์ ๋ฑ์ฅ ์์์ ๊ฐ๊ด๋ฐ์ ์์ ์ด ๋ค๋ฅด๊ฒ ๋์๋์ง๋ ์๋ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ์.
ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ ๋จ์ํ ์งํ๋ก ์ ๊ด์ ์์ ์ฐ์ด์ ํ๋จํ๋ ์์๊ฐ ์๋๋ค. ์ ๊ทผ ๋ฐฉ์๊ณผ ์ฌ์ฉ ํ๊ฒฝ์ ๋ฐ๋ผ ์ ๋์ ์ผ๋ก ํ์ฉ๋๋ ๊ฒ์ผ ๋ฟ ์ด๋ ํจ๋ฌ๋ค์์ด ์ข๊ณ ๋์๊ณ ๋ฅผ ๋ฐ์ง ์ ์๋ค๋ ์ ์์๋๊ณ ์ด ๊ธ์ ๋ด์คฌ์ผ๋ฉด ํ๋ค.
๋ช ๋ นํ ํ๋ก๊ทธ๋๋ฐ / ์ ์ธํ ํ๋ก๊ทธ๋๋ฐ
ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ ๋ฐฉ๋ฒ๊ณผ ๋ชฉ์ ์ ๋ฐ๋ผ ํฌ๊ฒ ๋ช
๋ นํ ํ๋ก๊ทธ๋๋ฐ๊ณผ ์ ์ธํ ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ๋ถ๋ฅ๋๋ค. ๋ช
๋ นํ ํ๋ก๊ทธ๋๋ฐ์ ๊ฐ๋ฐ์๊ฐ ์ง์ ์ด๋ค ์์
์ ์ฒ๋ฆฌ ๊ณผ์ ์ ๋ํ ๊ตฌ์ฒด์ ์ธ ๋ฐฉ๋ฒ์ ๋ช
๋ นํ๋ ๋ฐฉ์์ผ๋ก ํ๋ก๊ทธ๋๋ฐ๋๋ค. ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ฅผ ํ ๋์ ํ๋ก๊ทธ๋๋ฐ์ ์๊ฐํ๋ฉด ์ดํดํ๊ธฐ ์ฌ์ธ ๊ฒ์ด๋ค.
๋ฐ๋ฉด, ์ ์ธํ ํ๋ก๊ทธ๋๋ฐ์ ๊ฐ๋ฐ์๊ฐ ์ผ์ผ์ด ๋ช
๋ นํ๋ ๊ฒ์ด ์๋๋ผ ์ํ๋ ์์
์ ๊ฒฐ๊ด๊ฐ์ ์ ์ธํ๋ ๋ฐฉ์์ ํ๋ก๊ทธ๋๋ฐ์ด๋ค. ์ ๋ง ๋ฌํํ๊ฒ ๋งํ๋ฉด, ๊ฐ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ง์ํด ์ฃผ๋ ์์ ํจ์๋ค์ ์ ๊ทน ์ฌ์ฉํ์ฌ ํ๋ก๊ทธ๋๋ฐํ๋ ๋ฐฉ์์ด๋ค.
์ด ์ ๋์ ๋ฐฐ๊ฒฝ ์ง์์ ๊ฐ์ง๊ณ ๊ฐ ํจ๋ฌ๋ค์์ ๋ํด ์์ธํ๊ฒ ์์๋ณด์.
์ ์ฐจ์งํฅ ํ๋ก๊ทธ๋๋ฐ? ์ ์ฐจ์ ํ๋ก๊ทธ๋๋ฐ!
์ ์ฐจ์ ํ๋ก๊ทธ๋๋ฐ์ ๋ช
๋ นํ ํ๋ก๊ทธ๋๋ฐ์ ๋ํ์ ์ธ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ด๋ค. ๋๋ถ๋ถ์ ์ฌ๋๋ค์ด ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ๊ณผ ์ฎ์ด ์๊ฐํ์ฌ ์ ์ฐจ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด๋ผ๊ณ ์๊ณ ์์ ํ
๋ฐ, ์ด๋ ํ๊ตญ์ด๋ก ๋ฒ์ญํ ๋ ์๊ธด ์๋ชป๋ ์ฉ์ด์ด๋ค.
์ ์ฐจ์ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ ํ๋ก์์ (Procedure)๋ฅผ ํธ์ถํจ์ผ๋ก์จ, ์ถ์ํ์ ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ ๋ชฉํ๋ก ํ๋ ํจ๋ฌ๋ค์์ ์๋ฏธํ๋ค. ์ด๋, Procedure๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก๊ทธ๋๋ฐํ๋ค๊ณ ํ์ฌ Procedural Programming์ด๋ผ๋ ์ด๋ฆ์ด ๋ถ์ฌ์ก๊ณ ์ด๋ฅผ ํ๊ตญ์ด๋ก ๋ฒ์ญํ๋ ค๊ณ ์ ์ฐจ์ ํ๋ก๊ทธ๋๋ฐ์ด ๋์ด๋ฒ๋ ค์ ๋๋ถ๋ถ์ ์ฌ๋๋ค์ด ํ๋ก์์ ๊ฐ ์๋ ์ด๋ฆ ๊ทธ๋๋ก ์์์ ์๋๋ก ํ๋ฌ๊ฐ๋ "์ ์ฐจ"์๋ง ์ง์คํ๊ฒ ๋๋ ํคํ๋(?)์ด ๋ฒ์ด์ง ๊ฒ์ด๋ค.
ํ๋ก์์ ๋ ๊ณง ์ฐ๋ฆฌ๊ฐ ํ๋ก๊ทธ๋๋ฐํ๋ฉด์ ์์ฃผ ์ฌ์ฉํ๋ "ํจ์"๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค. ์ฆ, ํฐ ๊ธฐ๋ฅ(๋ชฉํ)์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์์ ๋จ์์ ๊ธฐ๋ฅ(ํจ์)์ ๋ง๋ค์ด ๋ชจ๋ํ ํ๋ฉด์ ํ๋ก๊ทธ๋๋ฐํ๋ ๊ฒ์ด๋ค. ๋ชจ๋ํ๋ ๋ฐ๋ณตํ์ฌ ํ์ฉ๋ ๊ฐ๋ฅ์ฑ์ด ์๋ ๊ธฐ๋ฅ(ํจ์)์ ๋ฌถ์ด ์ฌํ์ฉํ ์ ์๊ฒ ํ๋ ๊ฒ์ ์๋ฏธํ๋ค. ๋ ๋์๊ฐ, ๋ชจ๋ํ ํ ํจ์๋ฅผ ํ๋ก๊ทธ๋จ์ ์์์ ํ๋ฆ์ ๋ง๋ ์ ์ ํ ์์น์ ํธ์ถํ๋ฉด์ ์ ์ฒด์ ์ธ ํ๋ก๊ทธ๋จ์ด ์ ๊ธฐ์ ์ผ๋ก ์ฐ๊ฒฐ๋๊ฒ ํ๋ก๊ทธ๋๋ฐํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
์ ๋ง ๋ฌํํ๊ฒ ๋งํ์๋ฉด, ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ฅผ ํ๋ค๊ฐ ์ฝ๋ ์ค์ด ๋๋ฌด ๊ธธ์ด์ ธ ์์๋ณด๊ธฐ ์ฝ๊ฒ ํน์ ๋ก์ง์ ํจ์๋ก ๋ง๋ค์ด ๋นผ๋๊ณ ๊ทธ ์๋ฆฌ์ ํจ์๋ฅผ ํธ์ถํ๋ค๋๊ฐ, ํ์
์ค์ ๋๋ฃ ๊ฐ๋ฐ์๋ค๊ณผ ๊ฐ์ด ์์ฃผ ์ฌ์ฉํ ๋งํ ์ ํธ๋ฆฌํฐ ๊ธฐ๋ฅ์ ํ๋ ํจ์๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด ํ์ํ ๋ ์ ์ ํ ์์น์ ํธ์ถํ๋ฉฐ ํ๋ก๊ทธ๋๋ฐํ๋ ๊ฒ๊ณผ ๊ฐ๋ค.
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๋ช
๋ นํ ํ๋ก๊ทธ๋๋ฐ์ ๊ฝ์ด๋ผ๊ณ ํ ์ ์๋ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ด๋ค. ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ ์ฐจ์ ํ๋ก๊ทธ๋๋ฐ์ ํ๊ณ์ ์ ๊ทน๋ณตํ ์ ์๋ ํจ๋ฌ๋ค์์ผ๋ก ์ฃผ๋ชฉ๋ฐ์๋ค.
์ ์ฐจ์ ํ๋ก๊ทธ๋๋ฐ์ ๋ก์ง์ ์ธ ๋ถ๋ถ์ ๋ชจ๋ํ๊ฐ ๊ฐ๋ฅํ์์ง๋ง, ๋ฐ์ดํฐ ๊ทธ ์์ฒด๋ ๋ชจ๋ํ๊ฐ ๋์ง ๋ชปํ๋ค. ๋ฐ์ดํฐ ๊ทธ ์์ฒด๋ ๋ชจ๋ํ๊ฐ ๋์ง ๋ชปํ๋ค๋ ๋ง์ด ๋ฌด์จ ์๋ฏธ์ผ๊น?
์คํํฌ๋ํํธ์ ๊ฐ ์ ๋๋ค์ ์ ์ฐจ์ ํ๋ก๊ทธ๋๋ฐ์ ์ฌ์ฉํด์ ํ๋ก๊ทธ๋๋ฐํ๋ค๊ณ ๊ฐ์ ํด ๋ณด์. ๊ณต๊ฒฉ, ์น๋ฃ, ์ด๋ ๋ฑ์ ๊ธฐ๋ฅ์ ํ๋ ํจ์๋ค์ ๋ชจ๋ํ๊ฐ ๊ฐ๋ฅํ ์ง ๋ชจ๋ฅด์ง๋ง, ๊ฐ ์ ๋ ์์ฒด๋ฅผ ๋ชจ๋ํ ํ ์ ์๊ฒ ๋๊ฐ? ์ ์ฌ์ง์ฒ๋ผ ๋ง์ ์ ๋๋ค์ ๋ ๋๋ง ํ๊ธฐ ์ํด์ Dictionary๋ Map ๊ฐ์ Key-Value ํ์
์ ๋ณ์๋ก ์ ์ธํ๋ค๊ณ ๊ฐ์ ํด ๋ณด์. ์๋ก ๋ค๋ฅธ ์ข
๋ฅ์ ์ ๋์ด๋ผ๋ ์ฒด๋ ฅ์ด๋ ์ข
์กฑ ๊ฐ์ ๊ณตํต์ Key ๊ฐ์ ๊ฐ์ง ์ ์์ ๊ฒ์ด๋ค. ์ด๋, ๊ตณ์ด ๊ณตํต์ Key ๊ฐ์ ๋ํด ๋ฐ๋ณต์ ์ผ๋ก ์ ์ธ์ ํด์ค ํ์ ์์ด ํจ์์ ๋งค๊ฐ ๋ณ์๋ก ๋๊ฒจ์ฃผ๋ฏ์ด Value ๊ฐ๋ง ๋๊ฒจ์ฃผ๋ฉด ํด๋น Key์ ๋ํ Value ๊ฐ์ผ๋ก ์ ์ฉ๋ ์ ์๊ฒ ๋ชจ๋ํ ํ๋ฉด ์ ์ง๋ณด์ ์ธก๋ฉด์์ ์ผ๋ง๋ ์ข์๊น?
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ด๋ ๊ฒ ๋ฐ์ดํฐ ๊ทธ ์์ฒด๋ฅผ ๋ชจ๋ํ ํ์ง ๋ชปํ๋ ์ ์ฐจ์ ํ๋ก๊ทธ๋๋ฐ์ ํ๊ณ์ ์ "๊ฐ์ฒด"๋ผ๋ ๋ชจ๋ํ ๋ ๋ฐ์ดํฐ์ ๊ฐ๋
์ ๋์
ํ์ฌ ํด๊ฒฐํ์๋ค.
์ ๊ทธ๋ฆผ์ฒ๋ผ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํ๊ฒ ๋๋ค๋ฉด ๋ง์น ์ค๊ณ๋์ ๋ง๊ฒ ์ ํ์ ์ฐ์ด๋ด๋ ๊ณต์ฅ์ฒ๋ผ ํ ๋ฒ์ ์ค๊ณ๋ก ์๋ง์ ๋ค์ํ ๊ฐ์ฒด๋ค์ ์์ฑํ ์ ์๋ค.
์ด๋ฌํ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๊ฐ๋ตํ๊ฒ ์ ๋ฆฌํ์๋ฉด "๋ฐ์ดํฐ(ํ๋กํผํฐ)์ ํ์(๋ฉ์๋)๊ฐ ๋ด๊ธด ๊ฐ์ฒด ๊ฐ์ ๊ด๊ณ๋ฅผ ํตํด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ์์ ํ๋ก๊ทธ๋๋ฐ"๋ผ๊ณ ํ ์ ์๋ค.
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๊ฐ๋
๊ณผ ํน์ง์ ๋ํด ์์ธํ๊ฒ ์ค๋ช
ํ๋ฉด ํ๋ ๋๋ ์์ด์ง๊ธฐ ๋๋ฌธ์ ์ค์ ํค์๋ ์ ๋๋ง ์ธ๊ธ๋ง ํ๊ณ ๋์ด๊ฐ๊ฒ ๋ค.
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ค์ ํค์๋
1) ํด๋์ค, ์ธ์คํด์ค, ์ธํฐํ์ด์ค
2) ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ 4๊ฐ์ง ํน์ง - ์ถ์ํ, ์บก์ํ(์๋ํ), ์์์ฑ, ๋คํ์ฑ
3) ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ค๊ณ์์น - SOLID ์์น
4) GoF ๋์์ธ ํจํด - ์์ฑ ํจํด, ๊ตฌ์กฐ ํจํด, ํ์ ํจํด
๋ฌด์กฐ๊ฑด ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ๋ชจ๋ํ๋ฅผ ํ๋ค๊ณ ํด์ ์ ์ง๋ณด์ํ๊ธฐ ์ข์ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ ๊ฒ์ด ์๋๋ฏ๋ก ๊ผญ ์์ ์ค์ ํค์๋๋ฅผ ๊ณต๋ถํด ๋ณด๊ณ ์์ ์ ์ฝ๋์ ์ ์ฉํด ๋ณด๊ธฐ ๋ฐ๋๋ค.
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์ ์ธํ ํ๋ก๊ทธ๋๋ฐ์ ๋ํ์ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ด๋ค. ์ ์ฐจ์ ํ๋ก๊ทธ๋๋ฐ์ด๋ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ฒ๋ผ ์ฝ๋์ ๊ตฌ์กฐ์ ์ธ ๋ถ๋ถ์ ์๊ฐํ๋ ํจ๋ฌ๋ค์์ด ์๋๋ผ ์ฝ๋ ์คํ์ผ์ ๊ด๋ จ๋ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ด๋ค.
๋ค์์ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ๊ณผ ๋ช
๋ นํ ํ๋ก๊ทธ๋๋ฐ์ ์ฐจ์ด๋ฅผ ์ ์ ์ผ๋ก ๋ณด์ฌ์ฃผ๋ ์์ ์ฝ๋์ด๋ค. ๋ฐฐ์ด์์ ์ง์๋ฅผ ํํฐ๋งํ๊ณ , ํด๋น ์ง์๋ค์ ์ ๊ณฑํ ํ ์ผ์ ๊ฐ์๋ง ์ถ์ถํ์ฌ ๋ชจ๋ ๋ํ ๊ฒฐ๊ด๊ฐ์ ์ถ๋ ฅํ๋ ์ฝ๋๋ฅผ ๊ฐ๊ฐ ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ผ๋ก ๊ตฌํํ ๊ฒ์ด๋ค.
// ๋ช
๋ นํ ํ๋ก๊ทธ๋๋ฐ
const numbers = [1, 2, 3, 4, 5, 6];
const filteredNumbers = [];
for (let i = 0; i < numbers.length; i++) {
if (numbers[i] % 2 === 0) {
filteredNumbers.push(numbers[i]);
}
}
const squaredNumbers = [];
for (let i = 0; i < filteredNumbers.length && squaredNumbers.length < 3; i++) {
squaredNumbers.push(filteredNumbers[i] ** 2);
}
let sum = 0;
for (let i = 0; i < squaredNumbers.length; i++) {
sum += squaredNumbers[i];
}
console.log(sum);
// ํจ์ํ ํ๋ก๊ทธ๋๋ฐ
const numbers = [1, 2, 3, 4, 5, 6];
const result = numbers
.filter(num => num % 2 === 0)
.map(num => num ** 2)
.slice(0, 3)
.reduce((acc, curr) => acc + curr);
console.log(result);
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์์ ์ฝ๋์์ ๋ณผ ์ ์๋ฏ์ด ์ํ๋ ์์
์์ฒด๋ฅผ ํจ์๋ก "์ ์ธ"๋ง ํด์ฃผ๋ฉด ๊ฐ ์ธ์ด๋ง๋ค ๊ตฌํ๋์ด ์๋ ๋ด์ฅ ํจ์๋ค์ด ๋์ ์ฒ๋ฆฌํด ์ค๋ค. ์ด์ ๋๋ถ์ด ์ฝ๋์ ์์ด ํ์ฐํ๊ฒ ์ค์ด๋ค๊ณ ๊ฐ๋
์ฑ์ด ํฌ๊ฒ ์ฌ๋ผ๊ฐ๋ค. ๊ทธ๋ ๋ค๋ฉด ๋ด๊ฐ ์ฌ์ฉํ๊ณ ์๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ง์ํ๋ ํจ์๋ฅผ ์ ๊ทน ์ด์ฉํด์ ํ๋ก๊ทธ๋๋ฐํ๋ฉด ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ํ๊ณ ์๋ ๊ฒ์ผ๊น?
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ๊ฐ์ฅ ์ฃผ์ํ ํน์ง์ ์์ ํจ์์ ์ฌ์ฉ์ด๋ค.
์์ ํจ์๋?
๋์ผํ ์ ๋ ฅ์ ๋ํด ํญ์ ๋์ผํ ์ถ๋ ฅ์ ๋ฐํํ๋ฉฐ, ๋ถ์์ฉ(Side Effect) ์ด ์๋ ํจ์๋ฅผ ๋งํ๋ค.
์ฆ, ํจ์์ ์คํ์ ์ค์ง ์ธ์์๋ง ์์กดํ๊ณ ์ธ๋ถ ์ํ๋ฅผ ๋ณ๊ฒฝํ์ง ์๋๋ค.
์์ ํจ์์ ์์ ํจ์๊ฐ ์๋ ํจ์์ ์ฐจ์ด๋ฅผ ๋ณด์ฌ์ฃผ๋ ์์ ์ฝ๋๋ฅผ ๋ณด์
var a: [Int] = [2, 3, 1, 4, 5]
let b = a.sort()
var c: [Int] = [2, 3, 1, 4, 5]
let d = c.sorted()
print("๊ฒฐ๊ณผ: ", a, b, c, d)
// ๊ฒฐ๊ณผ: [1, 2, 3, 4, 5] () [2, 3, 1, 4, 5] [1, 2, 3, 4, 5]
๊ฒฐ๋ก ๋ถํฐ ๋งํ์๋ฉด, sorted()๋ ์์ ํจ์์ด๊ณ sort() ํจ์๋ ์์ ํจ์๊ฐ ์๋๋ค. sorted()๋ ์ธ๋ถ ์ํ, ์ฆ c์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊พธ์ง ์๋๋ค. ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ๋ฐ์ดํฐ์ ๋ถ๋ณ์ฑ์ ์งํฅํ๋ค. ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊พธ๋ ํ์๋ ๊ทธ๋ก ์ธํด ์๋ํ์ง ์์ ๊ฒฐ๊ณผ(Side Effect)๋ฅผ ์ด๋ํ ์ ์๋ค. ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์์ ํจ์์ ์ฌ์ฉ์ผ๋ก ์ด๋ฌํ Side Effect๊ฐ ๋ฐ์ํ ์ฌ์ง์กฐ์ฐจ ์ฃผ์ง ์๊ฒ ๋ค๋ผ๋ ์ปจ์
์ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ธ ๊ฒ์ด๋ค. ๋ ๋์๊ฐ, Side Effect๊ฐ ์ด๋๋์ง ์์ผ๋ ์์ธก ๊ฐ๋ฅํ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฅ๋ฐ์ ์ ์๋ค.
์ด๋ฌํ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ๊ธฐ์ ์ ๋ฐ๋ฌ๋ก ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์์ ์์
์ด ๋น๋ฒํ๊ฒ ๋ฐ์ํ๋ ์์ฆ ๊ฐ์ ์๋์ ์ ํฉํ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ด๋ผ๊ณ ํ ์ ์๋ค. ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์์ ํ๋ก๊ทธ๋๋ฐ, ์ฆ ๋์์ฑ ํ๋ก๊ทธ๋๋ฐ์ ๊ฐ์ฅ ํฐ ์ ์ ๊ฐ์ด ๋ณํ๋ ๋ฐ์ดํฐ, ์ฆ ๋ณ์์ด๋ค. ๋ ์ค๋ ๋๊ฐ ๋์ผํ ๋ณ์์ ๊ฐ์ ํ๋๋ +1, ํ๋๋ -1์ ์ํฉ์ด ๋ฐ์ํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น? ๋น์ฐํ Side Effect๊ฐ ๋ฐ์ํ ์๋ฐ์ ์๋ค. ๋ฐ๋ผ์, ์ด๋ฌํ Side Effect๊ฐ ์๊ธฐ์ง ์๋ ํ๋ก๊ทธ๋๋ฐ์ ์งํฅํ๋ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ด ๊ฐ๊ด๋ฐ๊ณ ์๋ ๊ฒ์ด๋ค.
๋๊ธ