์ถ์ฒ
https://brunch.co.kr/@wegra/20
https://www.spri.kr/download/22433
https://www.hanbit.co.kr/channel/category/category_view.html?cms_code=CMS4313717600
https://hyojabal.tistory.com/41
Kotlin In Action
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ
ํ๋ก๊ทธ๋๋ฐ์ ์ํ์ผ๋ก ๊ฐ์ฃผํ๋ ๊ฒ. ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ์ํ์ ํจ์์ ๊ณ์ฐ์ผ๋ก ์ทจ๊ธํด ํจ์๋ค์ ์งํฉ์ผ๋ก ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ค.
์ํ ๋ณํ์ ๊ฐ๋ณ ๋ฐ์ดํฐ๋ฅผ ์ง์ํ๋ค. ์ํ๋ฅผ ๋ฐ๊พธ๋ ๊ฒ์ด ์๋๋ผ ํจ์์ ์์ฉ์ ๊ฐ์กฐํ๋ค.
ํ๋ก๊ทธ๋๋ฐ์ ์ํ์ผ๋ก ๊ฐ์ฃผํ๋ค๋ ๊ฒ์ ์๋ฏธ
1. ๋ถ๋ณ์ฑ immutability
i = i+1 # or, more simply
i += 1 # or, even more simply
i++ # C, Java, but not Python or Ruby
์ํ์ ์ผ๋ก ์์ ํํ๋ค์ ๋ง์ด ๋์ง ์๋๋ค. ๋ฑ์์ ๋ ๊ฐ์ ๊ฐ์ ๋ํ ๊ด๊ณ์ "์ฐธ"์ ๋ดํฌํ๊ณ ์๋ ์๋ฏธ๋ฅผ ๋ํ๋ธ๋ค. i๋ ์ค์ง i์ ๊ฐ์ ์ ์๋ค. "i๋ ์ด๋ ํ ๊ฒ๊ณผ ๊ฐ๋ค"๊ณ ์ ์๋ฅผ ๋ด๋ผ๋ฉด, i๋ ๋ค๋ฅธ ์ด๋ ํ ๊ฒ๊ณผ๋ ๊ฐ์ ์ ์๋ค. i์ ๊ฐ์ด ๋ฐ๋๋ ๊ฒ์ด ์๋๋ผ ๋ชจ๋ฅด๋ ๋ถ๋ณ์ ๊ฐ์ธ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ, ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์์ ๋ณ์๋ ๋ฐ์ดํฐ๋ ํ ๋ฒ ํ ๋น๋๋ฉด ๋ณ๊ฒฝ๋์ง ์๋๋ค. ์ฆ, ์ํ ๋ณํ๊ฐ ์๋ค๋ ๊ฒ์ ๋ณด์ฅํ๋ค. ๋ชจ๋ ๋ฐ์ดํฐ๋ ๋ถ๋ณ์ด๋ฉฐ, ๋ณ๊ฒฝ์ด ํ์ํ๋ฉด ๊ธฐ์กด ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ ๊ฒ์ด ์๋๋ผ ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ๋ค.
2. ๊ณ ์ฐจ ํจ์ Higher-Order Function
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์์๋ ํจ์๊ฐ 1๊ธ ์๋ฏผ(First-class Citizen)์ผ๋ก ์ทจ๊ธ๋์ด, ํจ์๊ฐ ๋ณ์์ฒ๋ผ ์ทจ๊ธ๋๊ณ , ํจ์์ ๋งค๊ฐ๋ณ์๋ ๋ฐํ๊ฐ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
3. ์์ ํจ์ Pure Function
๊ฐ์ ์ ๋ ฅ๊ฐ์ ๋ํด ํญ์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค. ๋ถ์์ฉ์ด๋ผ๋ ๊ฒ์ด ์๋ค.
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์ ์ฃผ๋ชฉ๋ฐ๋๊ฐ
๊ธฐ์กด์ ๋์ธ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ ํ๊ณ๋ฅผ ๋ณด์ํ๋ ํจ๋ฌ๋ค์์ผ๋ก ์ฃผ๋ชฉ๋ฐ๊ฒ ๋์๋ค.
๋ช ๋ นํ ํ๋ก๊ทธ๋๋ฐ(์ข๊ฒ๋ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ) -> ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ผ๋ก
๊ธฐ์กด ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์์ ๋ฐ์ํ ์ฃผ์ ๋ฌธ์
1. ์์ธก ๊ฐ๋ฅ์ฑ ๋ถ์กฑ
๊ธฐ์กด ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ธ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๋ณ์์ ๊ฐ, ๊ฐ์ฒด์ ์ํ ๋ฑ์ ํ๋ก๊ทธ๋จ์ ์ํ๊ฐ ๊ณ์ ๋ณํํ๊ณ , ์ด๋ฌํ ์ํ๋ฅผ ์์ ํ๋ ๊ฒ์ด ์ฃผ์ ๋ ผ๋ฆฌ์ ํ๋ฆ์ด๋ค. ์ํ๊ฐ ๋ณํ๊ฐ ๋ง์์ง ์๋ก ์ฝ๋์ ์์ธก ๊ฐ๋ฅ์ฑ์ด ๋จ์ด์ง๊ณ , ํจ์๊ฐ ํจ์ ๋ฐ๊นฅ์ ๋ณ์ ์ํ๋ฅผ ๋ณ๊ฒฝํ ๊ฒฝ์ฐ์๋ ์ํ ์ถ์ฒ์ด ์ด๋ ต๋ค.
2. ๋์์ฑ ๋ฌธ์
์ฌ๋ฌ ์ค๋ ๋๋ ํ๋ก์ธ์ค๊ฐ ๋์์ ๋์ผํ ์์์ ์ ๊ทผํ ๋, ๊ณต์ ๋ ์ํ๊ฐ ์ถฉ๋ํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํด ์ค๋ ๋ ์์ ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํ ๋ณต์กํ ์ฝ๋(๋ฝ, ๋ฎคํ ์ค, ์ธ๋งํฌ์ด ๋ฑ)์ด ํ์ํ๋ค.
3. ๋ณต์ก์ฑ ์ฆ๊ฐ
์ํ์ ํจ์๊ฐ ์ํธ์์ฉ์ด ๋ณต์กํ๊ฒ ์ฝํ์ ํ๋ก๊ทธ๋จ์ ๋ณต์ก๋๊ฐ ์ฆ๊ฐํ๋ค. ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์์๋ ๊ฐ์ฒด ๊ฐ ์ํธ์์ฉ์ ์ํด ํจ์๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด์ ํจ์๋ฅผ ํธ์ถํ๋ฉฐ ์ธ๋ถ ์ธ๊ณ์ ์์กด์ ์ผ๋ก ๋์ํ๊ธฐ์ ์ฌ์ฌ์ฉ์ฑ์ด ๋จ์ด์ง๋ฉฐ ํ๋ก๊ทธ๋จ์ ๋ณต์ก๋๊ฐ ์ฆ๊ฐํ๋ค. ์ด๋ ์ฝ๋ ์ดํด๊ฐ ์ด๋ ค์์ง๊ณ ๋ฒ๊ทธ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ด ๋์ด์ง๋ฉฐ ์ฝ๋์ ์ ์ง๋ณด์๊ฐ ํ๋ค์ด์ง๋ ์ฃผ์ ์ด์ ๊ฐ ๋๋ค.
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์ด ๋ฌธ์ ๋ค์ ์ด๋ป๊ฒ ํด๊ฒฐํ๋๊ฐ
1. ๋ถ๋ณ์ฑ
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์์ ๋ณ์๋ ๋ฐ์ดํฐ๋ ํ ๋ฒ ํ ๋น๋๋ฉด ๋ณ๊ฒฝ๋์ง ์๋๋ค. ๋ชจ๋ ๋ฐ์ดํฐ๋ ๋ถ๋ณ์ด๋ฉฐ, ๋ณ๊ฒฝ์ด ํ์ํ๋ฉด ๊ธฐ์กด ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ ๊ฒ์ด ์๋๋ผ ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ๋ค.
-> ๋์์ฑ ๋ฌธ์ ์์ ์์ ์ฑ์ด ํฌ๊ฒ ํฅ์๋๋ค. ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋์์ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋๋ผ๋ ์ํ ๋ณํ๊ฐ ์์ด์ ์ถฉ๋ํ ์ผ์ด ์๋ค. ๋ค์ค ์ค๋ ๋๋ฅผ ์ฌ์ฉํด๋ ์์ ํ๋ค.
2. ์์ ํจ์ Pure Function
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์์ ํจ์๋ ์ ๋ ฅ์๋ง ์์กดํ๊ณ , ๋ถ์์ฉ ์์ด ์ถ๋ ฅ๋ง์ ๋ฐํํ๋ค. ์ฆ, ๊ฐ์ ์ ๋ ฅ๊ฐ์ ๋ํํด ํญ์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ฉฐ, ์ธ๋ถ ์ํ๋ ๋ณ์์ ์ํฅ์ ์ฃผ์ง ์๋๋ค.
-> ์์ธก ๊ฐ๋ฅ์ฑ์ ๋์ฌ ์ค๋ค. ๋ฒ๊ทธ ์ถ์ ๋ฐ ๋๋ฒ๊น ์ด ์ฌ์์ง๋ค.
-> ํ ์คํธ ํ๊ธฐ ์ฝ๋ค. ๋ถ์ ํจ๊ณผ๊ฐ ์๋ ํจ์๋ ๊ทธ ํจ์๋ฅผ ์คํํ ๋ ํ์ํ ์ ์ฒด ํ๊ฒฝ์ ๊ตฌ์ฑํ๋ ์ค๋น ์ฝ๋(setup code)๊ฐ ๋ฐ๋ก ํ์ํ์ง๋ง, ์์ ํจ์๋ ๊ทธ๋ฐ ์ค๋น ์ฝ๋ ์์ด ๋ ๋ฆฝ์ ์ผ๋ก ํ ์คํธํ ์ ์๋ค.
3. ๊ณ ์ฐจ ํจ์ Higher-Order Function
ํจ์๊ฐ ๋ณ์์ฒ๋ผ ์ทจ๊ธ๋์ด ํจ์์ ๋งค๊ฐ๋ณ์๋ ๋ฐํ ๊ฐ์ผ๋ก ์ฌ์ฉ๋์ด, ํจ์์ ์ฌ์ฌ์ฉ์ฑ์ด ๋์์ง๋ค. ์ฝ๋์ ์ถ์ํ ์์ค๋ ๋์์ง๋ค. ์ฝ๋๊ฐ ํ๊ฒฐ ๊ฐ๊ฒฐํ๋ค.
-> ๊ฐ๋ ฅํ ์ถ์ํ๋ก ์ฝ๋ ์ค๋ณต์ ๋ง์ ์ ์๋ค.
์๋ฅผ ๋ค์ด, ๋น์ทํ ์์ ์์ ์์ฃผ ๋น์ทํ ๋ ๊ฐ์ ์ฝ๋ ์กฐ๊ฐ์ด ์๋ค๋ฉด, ๊ณตํต๋ถ๋ถ์ ๋ฐ๋ก ํจ์๋ก ๋ฝ์๋ด๊ณ , ์๋ก ๋ค๋ฅธ ์ธ๋ถ ์ฌํญ์ ๋๋ค์์ผ๋ก ๋ถ๋ฆฌ๋ ๋ฌด๋ช ํจ์ ๊ตฌ๋ฌธ์ ์ฌ์ฉํด ์ธ์๋ก ์ ๋ฌํ๋ฉด ์ฝ๋๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ํํํ ์ ์๋ค.
fun findAlice() = findPerson { it.name == "Alice" }
fun findBob() = findPerson { it.name == "Bob" }
- findPerson์๋ ์ฌ๋์ ์ฐพ๋ ์ผ๋ฐ ๋ก์ง์ด ๋ค์ด๊ฐ ์๋ค.
- {} ์ค๊ดํธ ์ฌ์ด์ ์๋ ์ฝ๋ ๋ธ๋ก์ ์ฐพ์ผ๋ ค๋ ์ฌ๋์ ์๋ณํ๋ค.
๐ค ๋๋ค์์ด๋
์ต๋ช ํจ์๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ํํํ๋ ๋ฐฉ๋ฒ. ํจ์ ์ ์๋ฅผ ์ด๋ฆ์์ด ๊ฐ๋จํ๊ฒ ์์ฑํ ์ ์๋ค.
๐ค ๋ฌด๋ช ํจ์(์ต๋ช ํจ์)๋
์ด๋ฆ์ด ์๋ ํจ์. ์ผ์์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ํด ์ ์๋ ๊ฐ๋จํ ํจ์
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ๋จ์
๋จ์ํจ์ ๊ฐ์๋ฐ๋๋ค.
๊ฐ์ฒด์งํฅ์์์ ์ํ๋ ๋ถ์์ฉ(ํจ์ ๋ฐ๊นฅ์์ ์ํ ๋ณํ๋ฅผ ๋ง๋ค์ด๋)์ ๋ง๋ค์ง๋ง, ์ธ๋ถ์ ์ธํ ๊ฐ์ฒด์ ๋ณํ๋ฅผ ์ฝ๋๋ก ํํํ๋ ๊ฒ์๋ ์ง๊ด์ ์ด๋ค. ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์ ์ถ๋ ฅ์ ์ผ๊ด์ฑ์ ์ํด์ ์ํ๋ฅผ ํ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ๊ฐ์ ๊ธฐ๋ฅ์๊ตฌํ์ ์ํด ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์์ ๊ณ ๋ คํ ํ์์๋ ๋ค์ํ ํจ์์ ์กฐํฉ์ ๊ณ ์ํด์ผ ํ๋ค.
ํ์ต ๊ณก์
๊ฐ๋ฐ์๊ฐ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ๊ธฐ๋ณธ ์ํคํ ์ฒ์ ๋์์ ์ดํดํ๊ณ ๋ ๊ธฐ๋ฅ์ ์ธ ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ์๊ฐ์ ์ ํํ๋ ๋ฐ ๊ฐํ๋ฅธ ํ์ต ๊ณก์ ์ด ์๋ค.
'๋น ๊ตฌ๋ฉ ์ฑ์ฐ๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] I/O Buffer (1) | 2024.10.14 |
---|---|
[ํ๋ก๊ทธ๋๋ฐ] RPC Remote Procedure Call ์๊ฒฉ ํ๋ก์์ ํธ์ถ (3) | 2024.10.14 |
[ํ๋ก๊ทธ๋๋ฐ] ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์ (0) | 2024.10.11 |
[ํ๋ก๊ทธ๋๋ฐ] ์ ์ ํ์ ์ง์ ์ธ์ด (1) | 2024.10.09 |
[ํ๋ก๊ทธ๋๋ฐ] ์์ญ ํนํ ์ธ์ด, Domain Specific Language (1) | 2024.10.09 |