๋ฐํ์ : ์ก์์
๋ฐํ์ฃผ์ : ์ฝํ๋ฆฐ
๋ฐํ๋ ์ง : 2018.07.13
[TOC]
Kotlin IN ACTION [๋๋ฏธํธ๋ฆฌ ์ ๋ฉ๋กํ, ์ค๋ฒ ํธ๋ผ๋ ์ด์ฌ์ฝ๋ฐ ์ง์ / ์คํ์ ์ฎ๊น]
๊นก์์ ์ฝํ๋ฆฐ ํ๋ก๊ทธ๋๋ฐ [๊ฐ์ฑ์ค ์ง์]
์ฐจ์ธ๋ ์๋๋ก์ด๋ ๊ฐ๋ฐ์๋ฅผ ์ํ ์ปค๋์ ์ฝํ๋ฆฐ [๊นํํธ ์ง์]
[inlining] https://stackoverflow.com/questions/3924995/what-is-method-inlining
[์คํฐํ๋ผ์ด์ฆ ์ ํ๋ฆฌ์ผ์ด์ ] https://scroogy.atlassian.net/wiki/spaces/SPRING/pages/8847424
[ํธ๋ ์ด๋์คํ] https://zetawiki.com/wiki/ํธ๋ ์ด๋์คํ
์ฝํ๋ฆฐ์ ์๋ฐ ํ๋ซํผ์์ ๋์๊ฐ๋ ์๋ก์ด ํ๋ก๊ทธ๋๋ฐ ์ธ์ด
์ฝํ๋ฆฐ์ ๊ฐ๊ฒฐํ๊ณ ์ค์ฉ์ ์ด๋ฉฐ, ์๋ฐ ์ฝ๋์์ ์ํธ์ด์ฉ์ฑ์ ์ค์
๋ํ์ ์ผ๋ก ์๋ฒ ๊ฐ๋ฐ, ์๋๋ก์ด๋ ์ฑ ๊ฐ๋ฐ ๋ฑ์ ๋ถ์ผ์์ ์ฝํ๋ฆฐ์ ์
์ฝํ๋ฆฐ์ด ๊ฐ์ฅ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ์์ญ์ ์๋ฒ์์ ์ฝ๋(ํนํ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฑ์๋), ์๋๋ก์ด๋ ๋๋ฐ์ด์ค์์ ์คํ๋๋ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ค. ํ์ง๋ง ์ฝํ๋ฆฐ์ ๋ค๋ฅธ ํ๊ฒฝ์์๋ ์ ์๋ํ๋ค.
-
์ธํ ์ ๋ฉํฐOS ์์ง์ ์ฌ์ฉํ๋ฉด ์ฝํ๋ฆฐ์ iOS๋๋ฐ์ด์ค์์ ์คํํ ์ ์๋ค.
-
๋ฐ์คํฌํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฑํ๊ณ ์ถ๋ค๋ฉด ์ฝํ๋ฆฐ๊ณผ ํ ๋ค์ด๋FX, ์๋ฐFX ๋ฑ์ ํจ๊ป ์ฌ์ฉํ ์ ์๋ค.
-
์๋ฐ๋ฟ ์๋๋ผ ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ฝํ๋ฆฐ์ ์ปดํ์ผํ ์ ์๋ค => ์ฝํ๋ฆฐ ์ฝ๋๋ฅผ ๋ธ๋ผ์ฐ์ ๋ ๋ ธ๋์์ ์คํ๊ฐ๋ฅ
-
2017๋ 3์ 1์ผ์ ๋ฐํ๋ ์ฝํ๋ฆฐ 1.1๋ถํฐ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๊ณต์์ ์ผ๋ก ์ง์ํ๋ค.
์๋ฐ์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ฝํ๋ฆฐ๋ *์ ์ ํ์ ์ง์ ์ธ์ด๋ค.
๋์ ํ์ ์ง์ ์ธ์ด์์๋ ํ์ ๊ณผ ๊ด๊ณ์์ด ๋ชจ๋ ๊ฐ์ ๋ณ์์ ๋ฃ์ ์ ์๊ณ , ๋ฉ์๋๋ ํ๋ ์ ๊ทผ์ ๋ํ ๊ฒ์ฆ์ด ์ํ ์์ ์ ์ผ์ด๋๋ฉฐ, ๊ทธ์ ๋ฐ๋ผ ์ฝ๋๊ฐ ๋ ์งง์์ง๊ณ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๋ ์ ์ฐํ๊ฒ ์์ฑํ๊ณ ์ฌ์ฉํ ์ ์๋ค. ํ์ง๋ง ๋ฐ๋๋ก ์ด๋ฆ์ ์๋ชป ์ ๋ ฅํ๋ ๋ฑ์ ์ค์๋ ์ปดํ์ผ ์ ๊ฑธ๋ฌ๋ด์ง ๋ชปํ๊ณ ์คํ ์์ ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
ํํธ ์๋ฐ์ ๋ฌ๋ฆฌ ์ฝํ๋ฆฐ์์๋ ๋ชจ๋ ๋ณ์์ ํ์ ์ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ง์ ๋ช ์ํ ํ์๊ฐ ์๋ค. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ฝํ๋ฆฐ ์ปดํ์ผ๋ฌ๊ฐ ๋ฌธ๋งฅ์ผ๋ก๋ถํฐ ๋ณ์ ํ์ ์ ์๋์ผ๋ก ์ ์ถํ ์ ์๊ธฐ ๋๋ฌธ์ ํ๋ก๊ทธ๋๋จธ๋ ํ์ ์ ์ธ์ ์๋ตํด๋ ๋๋ค.
var x = 1
์ฌ๊ธฐ์๋ ๋ณ์๋ฅผ ์ ์ํ๋ฉด์ ์ ์ ๊ฐ์ผ๋ก ์ด๊ธฐํํ๋ค. ์ฝํ๋ฆฐ์ ์ด ๋ณ์์ ํ์ ์ด Int์์ ์๋์ผ๋ก ์์๋ธ๋ค. ์ด๋ ๊ฒ ์ปดํ์ผ๋ฌ๊ฐ ๋ฌธ๋งฅ์ ๊ณ ๋ คํด ๋ณ์ ํ์ ์ ๊ฒฐ์ ํ๋ ์ด๋ฐ ๊ธฐ๋ฅ์ ํ์ ์ถ๋ก ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
-
์ฑ๋ฅ
์คํ ์์ ์ ์ด๋ค ๋ฉ์๋๋ฅผ ํธ์ถํ ์ง ์์๋ด๋ ๊ณผ์ ์ด ํ์ ์์ผ๋ฏ๋ก ๋ฉ์๋ ํธ์ถ์ด ๋ ๋น ๋ฅด๋ค.
-
์ ๋ขฐ์ฑ
์ปดํ์ผ๋ฌ๊ฐ ํ๋ก๊ทธ๋จ์ ์ ํ์ฑ์ ๊ฒ์ฆํ๊ธฐ ๋๋ฌธ์ ์คํ ์ ํ๋ก๊ทธ๋จ์ด ์ค๋ฅ๋ก ์ค๋จ๋ ๊ฐ๋ฅ์ฑ์ด ๋ ์ ์ด์ง๋ค.
-
์ ์ง ๋ณด์์ฑ
์ฝ๋์์ ๋ค๋ฃจ๋ ๊ฐ์ฒด๊ฐ ์ด๋ค ํ์ ์ ์ํ๋์ง ์ ์ ์๊ธฐ ๋๋ฌธ์ ์ฒ์ ๋ณด๋ ์ฝ๋๋ฅผ ๋ค๋ฃฐ ๋๋ ๋ ์ฝ๋ค.
-
๋๊ตฌ ์ง์
์ ์ ํ์ ์ง์ ์ ํ์ฉํ๋ฉด ๋ ์์ ํ๊ฒ ๋ฆฌํฉํ ๋ง ํ ์ ์๊ณ , ๋๊ตฌ๋ ๋ ์ ํํ ์ฝ๋ ์์ฑ ๊ธฐ๋ฅ์ ์ ๊ณตํ ์ ์์ผ๋ฉฐ, IDE์ ๋ค๋ฅธ ์ง์ ๊ธฐ๋ฅ๋ ๋ ์ ๋ง๋ค ์ ์๋ค.
์ฝํ๋ฆฐ์ ํ์ ์์คํ ์ ์ดํด๋ณด๋ฉด ํด๋์ค, ์ธํฐํ์ด์ค, ์ ๋ค๋ฆญ์ค๋ ๋ชจ๋ ์๋ฐ์ ๋น์ทํ๊ฒ ์๋ํ๋ค. ๋ฐ๋ผ์ ์๋ฐ์ ๋ํด ์๋ ๋ด์ฉ์ ์ฝํ๋ฆฐ์์๋ ์ฝ๊ฒ ์ ์ฉํ ์ ์๋ค. ํ์ง๋ง ๋ช ๊ฐ์ง ์๋ก์ด ์ ์ด ์๋ค.
-
์ฝํ๋ฆฐ์ด ๋์ด ๋ ์ ์๋ ํ์ ์ ์ง์ํ๋ค. ๋์ด ๋ ์ ์๋ ํ์ ์ ์ง์ํจ์ ๋ฐ๋ผ ์ปดํ์ผ ์์ ์ ๋ ํฌ์ธํฐ ์์ธ๊ฐ ๋ฐ์ํ ์ ์๋์ง ์ฌ๋ถ๋ฅผ ๊ฒ์ฌํ ์ ์์ด์ ์ข ๋ ํ๋ก๊ทธ๋จ์ ์ ๋ขฐ์ฑ์ ๋์ผ ์ ์๋ค.
-
์ฝํ๋ฆฐ์ ํ์ ์์คํ ์ ์๋ ๋ค๋ฅธ ์๋ก์ด ๋ด์ฉ์ผ๋ก๋ ํจ์ ํ์ ์ ๋ํ ์ง์์ ๋ค ์ ์๋ค.
*์ ์ ํ์ ์ง์ ๋ชจ๋ ํ๋ก๊ทธ๋จ ๊ตฌ์ฑ ์์์ ํ์ ์ ์ปดํ์ผ ์์ ์ ์ ์ ์๊ณ ํ๋ก๊ทธ๋จ ์์์ ๊ฐ์ฒด์ ํ๋๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ๋ ๋ง๋ค ์ปดํ์ผ๋ฌ๊ฐ ํ์ ์ ๊ฒ์ฆํด์ค๋ค.
- *์ผ๊ธ ์๋ฏผ์ธ ํจ์
ํจ์๋ฅผ ์ผ๋ฐ ๊ฐ์ฒ๋ผ ๋ค๋ฃฐ ์ ์๋ค. ํจ์๋ฅผ ๋ณ์์ ์ ์ฅํ ์ ์๊ณ , ํจ์๋ฅผ ์ธ์๋ก ๋ค๋ฅธ ํจ์์ ์ ๋ฌํ ์ ์์ผ๋ฉฐ, ํจ์์์ ์๋ก์ด ํจ์๋ฅผ ๋ง๋ค์ด์ ๋ฐํํ ์ ์๋ค.
- ๋ถ๋ณ์ฑ
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์์๋ ์ผ๋จ ๋ง๋ค์ด์ง๊ณ ๋๋ฉด ๋ด๋ถ ์ํ๊ฐ ์ ๋๋ก ๋ฐ๋์ง ์๋ ๋ถ๋ณ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ค.
- ๋ถ์ ํจ๊ณผ ์์
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์์๋ ์ ๋ ฅ์ด ๊ฐ์ผ๋ฉด ํญ์ ๊ฐ์ ์ถ๋ ฅ์ ๋ด๋๊ณ ๋ค๋ฅธ ๊ฐ์ฒด์ ์ํ๋ฅผ ๋ณ๊ฒฝํ์ง ์์ผ๋ฉฐ, ํจ์ ์ธ๋ถ๋ ๋ค๋ฅธ ๋ฐ๊นฅ ํ๊ฒฝ๊ณผ ์ํธ์์ฉํ์ง ์๋ **์์ ํจ์*๋ฅผ ์ฌ์ฉํ๋ค.
-
๊ฐ๊ฒฐ์ฑ
ํจ์ํ ์ฝ๋๋ ๊ทธ์ ์์ํ๋ ๋ช ๋ นํ ์ฝ๋์ ๋นํด ๋ ๊ฐ๊ฒฐํ๋ฉฐ ์ฐ์ํ๋ค. ํจ์๋ฅผ ๊ฐ์ฒ๋ผ ํ์ฉํ ์ ์์ผ๋ฉด ๋ ๊ฐ๋ ฅํ ์ถ์ํ๋ฅผ ํ ์ ์๊ณ ๊ฐ๋ ฅํ ์ถ์ํ๋ฅผ ์ฌ์ฉํด ์ฝ๋ ์ค๋ณต์ ๋ง์ ์ ์๋ค.
-
๋ค์ค ์ค๋ ๋๋ฅผ ์ฌ์ฉํด๋ ์์
๋ค์ค ์ค๋ ๋ ํ๋ก๊ทธ๋จ์์๋ ์ ์ ํ ๋๊ธฐํ ์์ด ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋ณ๊ฒฝํ๋ ๊ฒฝ์ฐ ๊ฐ์ฅ ๋ง์ ๋ฌธ์ ๊ฐ ์๊ธด๋ค. ๋ถ๋ณ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๊ณ ์์ ํจ์๋ฅผ ๊ทธ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ์ ์ฉํ๋ค๋ฉด ๋ค์ค ์ค๋ ๋ ํ๊ฒฝ์์ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋ณ๊ฒฝํ ์ ์๋ค. ๋ฐ๋ผ์ ๋ณต์กํ ๋๊ธฐํ๋ฅผ ์ ์ฉํ์ง ์์๋ ๋๋ค.
-
ํ ์คํธํ๊ธฐ ์ฝ๋ค.
๋ถ์ ํจ๊ณผ๊ฐ ์๋ ํจ์๋ ๊ทธ ํจ์๋ฅผ ์คํํ ๋ ํ์ํ ์ ์ฒด ํ๊ฒฝ์ ๊ตฌ์ฑํ๋ ์ค๋น ์ฝ๋๊ฐ ๋ฐ๋ก ํ์ํ์ง๋ง, ์์ ํจ์๋ ๊ทธ๋ฐ ์ค๋น ์ฝ๋ ์์ด ๋ ๋ฆฝ์ ์ผ๋ก ํ ์คํธํ ์ ์๋ค.
์ฝํ๋ฆฐ์ ์ฒ์๋ถํฐ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ถํ๊ฒ ์ง์ํด ์๋ค. ๊ทธ๋ฐ ์ง์์ ๋ค์๊ณผ ๊ฐ๋ค
- ํจ์ ํ์ ์ ์ง์ํจ์ ๋ฐ๋ผ ์ด๋ค ํจ์๊ฐ ๋ค๋ฅธ ํจ์๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ๊ฑฐ๋ ํจ์๊ฐ ์๋ก์ด ํจ์๋ฅผ ๋ฐํํ ์ ์๋ค.
- ๋๋ค ์์ ์ง์ํจ์ ๋ฐ๋ผ ๋ฒ๊ฑฐ๋ก์ด ์ค๋น ์ฝ๋๋ฅผ ์์ฑํ์ง ์์๋ ์ฝ๋ ๋ธ๋ก์ ์ฝ๊ฒ ์ ์ํ๊ณ ์ฌ๊ธฐ์ ๊ธฐ ์ ๋ฌํ ์ ์๋ค.
- ๋ฐ์ดํฐ ํด๋์ค๋ ๋ถ๋ณ์ ์ธ ๊ฐ ๊ฐ์ฒด๋ฅผ ๊ฐํธํ๊ฒ ๋ง๋ค ์ ์๋ ๊ตฌ๋ฌธ์ ์ ๊ณตํ๋ค.
- ์ฝํ๋ฆฐ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๊ฐ์ฒด์ ์ปฌ๋ ์ ์ ํจ์ํ ์คํ์ผ๋ก ๋ค๋ฃฐ ์ ์๋ API๋ฅผ ์ ๊ณตํ๋ค.
์ฝํ๋ฆฐ์ ํจ์ํ ์คํ์ผ๋ก ํ๋ก๊ทธ๋จ์ ์งค ์ ์๊ฒ ์ง์ํ์ง๋ง ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ์คํ์ผ์ ๊ฐ์ ํ์ง๋ ์๋๋ค. ๋ช ๋ นํ ๋ฐฉ์์ด ๋ ์ ํฉํ ๊ฒฝ์ฐ๋ผ๋ฉด ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ๋ฒ๊ฑฐ๋กญ๊ฒ ์ฝ๋๋ฅผ ์์ฑํ ํ์ ์์ด ์ง์ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ฐ์ดํฐ์ ๋ถ์ ํจ๊ณผ๋ฅผ ํ์ฉํ๋ ํจ์๋ฅผ ์ฌ์ฉํด๋ ๋๋ค.
*์ผ๊ธ ์๋ฏผ์ธ ํจ์(์ผ๊ธ ๊ฐ์ฒด) ํจ์๊ฐ ํ๋ก๊ทธ๋จ์ ์ต์์ ๊ตฌ์ฑ์์๋ผ๋ ์๋ฏธ. ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์์๋ ํด๋์ค๊ฐ ์ผ๊ธ ๊ฐ์ฒด์ ๋๋ค.
*์์ ํจ์ ๋ถ์ํจ๊ณผ๊ฐ ๋ฐ์ํ์ง ์๋ ํจ์. ๋ถ์ํจ๊ณผ๊ฐ ๋ฐ์ํ์ง ์๋๋ค๋ ๊ฒ์ ๊ฐ์ ์ธ์๋ฅผ ์ ๋ฌํด์ ํจ์๋ฅผ ํธ์ถํ๋ฉด ํญ์ ๊ฐ์ ๊ฒฐ๊ด๊ฐ์ ๋ฐํํ๋ค๋ ์๋ฏธ.
์ฝํ๋ฆฐ ์ธ์ด์ ์ปดํ์ผ๋ฌ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ์ฝํ๋ฆฐ๊ณผ ๊ด๋ จ๋ ๋ชจ๋ ๋๊ตฌ๋ ์คํ์์ค๋ฉฐ, ์ด๋ค ๋ชฉ์ ์๋ ๋ฌด๋ฃ๋ก ์ฌ์ฉํ ์ ์๋ค. ์ฝํ๋ฆฐ์ ์ํ์น2 ๋ผ์ด์ ์คํ์ ์ ๊ณต๋๋ค.
์ฝํ๋ฆฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๊ณ ์ถ์ ๊ฒฝ์ฐ ์ธํ ๋ฆฌJ ์์ด๋์ด ์ปค๋ฎค๋ํฐ ์๋์ , ์๋๋ก์ด๋ ์คํ๋์ค, ์ดํด๋ฆฝ์ค ๊ฐ์ ์คํ์์ค IDE๋ฅผ ํ์ฉํ ์ ์๋ค.
์ ํ์ ์ธ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํ์ ์ธ **์ํฐํ๋ผ์ด์ฆ ์ ํ๋ฆฌ์ผ์ด์ *๊ณผ ์์ฃผ ๋ง์ด ๋ค๋ฅด๋ค. ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํฐํ๋ผ์ด์ฆ ์ ํ๋ฆฌ์ผ์ด์ ๋ณด๋ค ๋ ์๊ณ ๊ธฐ์กด ์ฝ๋ ๊ธฐ๋ฐ๊ณผ ์ ์ฝ๋๋ฅผ ํตํฉํ ํ์๋ ๋ ์ ๋ค. ๋ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณดํต ๋ ๋ค์ํ ๋๋ฐ์ด์ค์ ๋ํด ์๋น์ค์ ์ ๋ขฐ์ฑ์ ๋ณด์ฅํ๋ฉด์ ๋ ๋น ๋ฅด๊ฒ ๋ฐฐํฌํ ํ์๊ฐ ์๋ค.
์ฝํ๋ฆฐ ์ธ์ด์ ํน์ฑ๊ณผ ์๋๋ก์ด๋ ํ๋ ์์ํฌ์ ํน๋ณํ ์ปดํ์ผ๋ฌ ํ๋ฌ๊ทธ์ธ ์ง์์ ์กฐํฉํ๋ฉด ์๋๋ก์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์์ฐ์ฑ์ ๋ ๋์ด๊ณ ๊ฐ๋ฐ์ ์ฆ๊ฑฐ์์ ๋ํ ์ ์๋ค.
์ปจํธ๋กค์ ๋ฆฌ์ค๋๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ๋ ์ด์์ ์์๋ฅผ ํ๋์ ๋ฐ์ธ๋ฉํ๋ ๋ฑ์ ํํ ์๋๋ก์ด๋ ๊ฐ๋ฐ ์์ ์ ํจ์ฌ ๋ ์ ์ ์ฝ๋๋ก ๋ฌ์ฑํ ์ ์๊ณ , ๋๋ก๋ ์ ํ ์ฝ๋๋ฅผ ์์ฑํ์ง ์๊ณ ๊ทธ๋ ๊ฒ ํ ์๋ ์๋ค(์ปดํ์ผ๋ฌ๊ฐ ์๋์ผ๋ก ํ์ํ์ฝ๋๋ฅผ ์์ฑ).
์ฝํ๋ฆฐ ํ์ด ๋ง๋ ์์ฝ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์๋ง์ ์๋๋ก์ด๋ API์ ๋ํ ์ฝํ๋ฆฐ ์ด๋ํฐ๋ฅผ ์ ๊ณต๋ฐ์ ์ ์์ด์ ์๋๋ก์ด๋ ํ๋ก๊ทธ๋๋ฐ ๊ฒฝํ์ ๋ ๊ฐ์ ํ ์ ์๋ค.
-
์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๋ขฐ์ฑ์ด ๋ ๋์์ง๋ค
์๋๋ก์ด๋ ์ฑ์ ๊ฐ๋ฐํด๋ณธ ์ฌ๋์ด๋ผ๋ฉด 'ํ๋ก์ธ์ค๊ฐ ์ค๋จ๋จ(Process Has Stopped)' ๋ํ์์๋ฅผ ๋ณธ ์ผ์ด ๋ง์ ๊ฒ์ด๋ค. ๊ทธ ๋ํ์์๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฒ๋ฆฌ๋์ง ์์ ์์ธ(์ฃผ๋ก NullPointerException)๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ์ ํ์๋๋ค. ์ฝํ๋ฆฐ ํ์ ์์คํ ์ null ๊ฐ์ ์ ํํ ์ถ์ ํ๋ฉฐ ๋ ํฌ์ธํฐ๋ก ์ธํด ์๊ธฐ๋ ๋ฌธ์ ๋ฅผ ์ค์ฌ์ค๋ค. ์๋ฐ์์ NullPointerException์ ์ผ์ผํค๋ ์ ํ์ ์ฝ๋๋ ๋๋ถ๋ถ ์ฝํ๋ฆฐ์์๋ ์ปดํ์ผ๋ ๋์ง ์๋๋ค. ๋ฐ๋ผ์ ๊ฐ๋ฐ ์ค์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฌ์ฉ์์๊ฒ ์ ๋ฌ๋๊ธฐ ์ ์ ๋ ํฌ์ธํฐ ๊ด๋ จ ์ค๋ฅ๋ฅผ ์์ ํ ์ ์๋ค.
-
์ฝํ๋ฆฐ์ ์๋ฐ 6๊ณผ ์์ ํ ํธํ๋๋ค
๋ฐ๋ผ์ ํธํ์ฑ๊ณผ ๊ด๋ จํ ์๋ก์ด ๋ฌธ์ ๋ฅผ ์ผ๊ธฐํ์ง ์๋๋ค. ์ฝํ๋ฆฐ์ด ์ ๊ณตํ๋ ์๋กญ๊ณ ๋ฉ์ง ์ธ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํด ํ๋ก๊ทธ๋จ์ ์์ฑํด๋ ์ฌ์ฉ์์ ๋๋ฐ์ด์ค์์ ๊ทธ ํ๋ก๊ทธ๋จ์ ์คํํ ์ ์๋ค. ์ฌ์ฉ์์ ๋๋ฐ์ด์ค์ ์ต์ ์๋๋ก์ด๋๊ฐ ํ์ฌ๋์ง ์์ ๊ฒฝ์ฐ์๋ ๋ง์ด๋ค.
-
์ฝํ๋ฆฐ์ ์ฌ์ฉํ๋๋ผ๋ ์ฑ๋ฅ ์ธก๋ฉด์์ ์๋ฌด ์ํด๊ฐ ์๋ค
์ฝํ๋ฆฐ ์ปดํ์ผ๋ฌ๊ฐ ์์ฑํ ๋ฐ์ดํธ์ฝ๋๋ ์ผ๋ฐ์ ์ธ ์๋ฐ ์ฝ๋์ ๋๊ฐ์ด ํจ์จ์ ์ผ๋ก ์คํ๋๋ค. ์ฝํ๋ฆฐ์ ๋ฐํ์ ์์คํ ์ ์๋นํ ์๊ธฐ ๋๋ฌธ์ ์ปดํ์ผ ํ ํจํค์งํ ์ ํ๋ฆฌ์ผ์ด์ ํฌ๊ธฐ๋ ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋นํด ๊ทธ๋ฆฌ ๋ง์ด ๋์ด๋์ง ์๋๋ค. ๋ํ ๋๋ถ๋ถ์ ์ฝํ๋ฆฐ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์๋ ์ธ์๋ก ๋ฐ์ ๋๋ค ํจ์๋ฅผ *์ธ๋ผ์ด๋ ํ๋ค. ๋ฐ๋ผ์ ๋๋ค๋ฅผ ์ฌ์ฉํด๋ ์๋ก์ด ๊ฐ์ฒด๊ฐ ๋ง๋ค์ด์ง์ง ์์ผ๋ฏ๋ก ๊ฐ์ฒด ์ฆ๊ฐ๋ก ์ธํด ๊ฐ๋น์ง ์ปฌ๋ ์ ์ด ๋์ด๋์ ํ๋ก๊ทธ๋จ์ด ์์ฃผ ๋ฉ์ถ๋ ์ผ๋ ์๋ค.
*์ํฐํ๋ผ์ด์ฆ ์ ํ๋ฆฌ์ผ์ด์ ๊ธฐ์ ๊ณผ ์กฐ์ง์ ๋น์ฆ๋์ค๋ฅผ ์ฒ๋ฆฌํด์ฃผ๋ ์์คํ ์ ์๋ฏธ
*์ธ๋ผ์ด๋ Java Just-In-Time ์ปดํ์ผ๋ฌ๊ฐ ์ํํ๋ ์ต์ ํ
-
์ฝํ๋ฆฐ์ ์ค์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ง๋ค์ด์ง ์ค์ฉ์ ์ธ ์ธ์ด๋ค.
์ฝํ๋ฆฐ ์ค๊ณ๋๋๊ท๋ชจ ์์คํ ์ ๊ฐ๋ฐํด๋ณธ ๋ค๋ ๊ฐ์ IT์ ๊ณ ๊ฒฝํ์ ๋ฐํ์ผ๋ก ์ด๋ค์ก์ผ๋ฉฐ, ์๋ง์ ์ํํธ์จ์ด ๊ฐ๋ฐ์๋ค์ ์ฌ์ฉ์ ์ ๋ค์ด๋ง์ ์ ์๊ฒ ์ฃผ์ ๊น๊ฒ ์ธ์ด ํน์ฑ์ ์ ํํ๋ค. ๋ ๋์๊ฐ ์ ฏ๋ธ๋ ์ธ์ค๋ ์ฝํ๋ฆฐ ์ปค๋ฎค๋ํฐ ๋ด๋ถ์ ๊ฐ๋ฐ์๋ค์ด ๋ค๋ ๊ฐ ์ฝํ๋ฆฐ ์ด๊ธฐ ๋ฒ์ ์ ์ฌ์ฉํ๋ฉด์ ์ ๋ฌํ ํผ๋๋ฐฑ์ด ํ์ฌ ๋ฐํ๋ ์ต์ข ์ฝํ๋ฆฐ ๋ฒ์ ์ ๋ฐ์๋ผ ์๋ค.
-
์ฝํ๋ฆฐ์ ์ฐ๊ตฌ๋ฅผ ์ํ ์ธ์ด๊ฐ ์๋๋ค.
์ฝํ๋ฆฐ์ ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ์ฑํํ ์ด๋ฏธ ์ฑ๊ณต์ ์ผ๋ก ๊ฒ์ฆ๋ ํด๋ฒ๊ณผ ๊ธฐ๋ฅ์ ์์กดํ๋ค.
-
์ฝํ๋ฆฐ์ ์ด๋ ํน์ ํ๋ก๊ทธ๋๋ฐ ์คํ์ผ์ด๋ ํจ๋ฌ๋ค์์ ์ฌ์ฉํ ๊ฒ์ ๊ฐ์ ๋ก ์๊ตฌํ์ง ์๋๋ค.
-
์ค์ฉ์ฑ์ ์์ด ์ฝํ๋ฆฐ์ ๋ค๋ฅธ ์ธก๋ฉด์ ๋๊ตฌ๋ฅผ ๊ฐ์กฐํ๋ค๋ ์ ์ด๋ค.
์ฝํ๋ฆฐ์ ๊ฒฝ์ฐ ์ธํ ๋ฆฌJ ์์ด๋์ด์ ๊ฐ๋ฐ๊ณผ ์ปดํ์ผ๋ฌ์ ๊ฐ๋ฐ์ด ๋ง๋ฌผ๋ ค ์ด๋ค์ ธ ์๋ค. ๊ทธ๋ฆฌ๊ณ ์ฝํ๋ฆฐ ์ธ์ด์ ํน์ฑ์ ํญ์ ๋๊ตฌ์ ํ์ฉ์ ์ผ๋์ ๋๊ณ ์ค๊ณ๋ผ ์๋ค.
-
์ฝํ๋ฆฐ์ ์ฌ๋ฌ ํน์ฑ์ ๋ฐฐ์ธ ๋๋ IDE์ ์ฝํ๋ฆฐ ์ธ์ด ์ง์์ด ์ค์ํ ์ญํ ์ ํ๋ค.
ํํ ์ฐ์ด์ง๋ง ๋ ๊ฐ๊ฒฐํ ๊ตฌ์กฐ๋ก ๋ฐ๊ฟ ์ ์๋ ๋๋ถ๋ถ์ ์ฝ๋ ํจํด์ ๋๊ตฌ๊ฐ ์๋์ผ๋ก ๊ฐ์งํด์ ์์ ํ๋ผ๊ณ ์ ์ํ๋ค. ์ด๋ฐ ์๋ ์์ ์๋ด๋ฅผ ์ดํด๋ณด๋ฉด์ ์ฝํ๋ฆฐ ์ธ์ด์ ํน์ฑ์ ์ ์ดํดํ๋ฉด ์์ ์ ์ฝ๋์ ๊ทธ๋ฐ ํน์ฑ์ ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ธ ์ ์๋ค.
์ฝํ๋ฆฐ์ ๊ฒํฐ, ์ธํฐ, ์์ฑ์ ํ๋ผ๋ฏธํฐ๋ฅผ ํ๋์ ๋์ ํ๊ธฐ ์ํ ๋ก์ง ๋ฑ ์๋ฐ์ ์กด์ฌํ๋ ์ฌ๋ฌ ๊ฐ์ง ๋ฒ๊ฑฐ๋ก์ด ์ค๋น ์ฝ๋๋ฅผ ์ฝํ๋ฆฐ์ ๋ฌต์์ ์ผ๋ก ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ์ฝํ๋ฆฐ ์์ค์ฝ๋๋ ๊ทธ๋ฐ ์ค๋น ์ฝ๋๋ก ์ธํด ์ง์ ๋ถํด์ง๋ ์ผ์ด ์๋ค.
๋ค๋ฅธ ์ต์ ์ธ์ด์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ฝํ๋ฆฐ์ ๊ธฐ๋ฅ์ด ๋ค์ํ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ๋ฐ๋ณต๋๊ฑฐ๋ ๊ธธ์ด์ง ์ ์๋ ์ฝ๋๋ฅผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์ ํธ์ถ๋ก ๋์นํ ์ ์๋ค. ์ฝํ๋ฆฐ์ ๋๋ค๋ฅผ ์ง์ํ๊ธฐ ๋๋ฌธ์ ์์ ์ฝ๋ ๋ธ๋ก์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์์ ์ฝ๊ฒ ์ ๋ฌํ ์ ์๋ค. ๋ฐ๋ผ์ ์ผ๋ฐ์ ์ธ ๊ธฐ๋ฅ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ ์บก์ํํ๊ณ ์์ ์ ๋ฐ๋ผ ๋ฌ๋ผ์ ธ์ผ ํ๋ ๊ฐ๋ณ์ ์ธ ๋ด์ฉ์ ์ฌ์ฉ์๊ฐ ์์ฑํ ์ฝ๋ ์์ ๋จ๊ฒจ๋ ์ ์๋ค.
- java ์ฝ๋
package com.example.kotlinlab.ch1;
import java.util.ArrayList;
class User {
private int no;
private String name;
private String email;
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
public class JavaClass {
public static void main(String[] args) {
ArrayList<User> list = new ArrayList<>();
User user1 = new User();
user1.setNo(1);
user1.setname("kkang");
user1.setEmail("[email protected]");
list.add(user1);
User user2 = new User();
user2.setNo(1);
user2.setName("kkang");
user2.setEmail("[email protected]");
list.add(user2);
//ArrayList ํญ๋ชฉ ๊ฐ์ ์ถ๋ ฅ
System.out.println("List Size : " + list.size());
//user1 ๊ฐ์ฒด์ user2 ๊ฐ์ฒด์ ๋ฐ์ดํฐ๊ฐ ๋์ผํ ๋ฐ์ดํฐ์ธ์ง ํ๋จ
if(user1.getNo() == user2.getNo() &&
user1.getName().equals(user2.getName()) &&
user1.getEmail().equals(user2.getEmail())) {
System.out.println("user1 == user2");
}else {
System.out.println("user1 != user2");
}
}
}
- kotlin ์ฝ๋
package com.example.kotlinlab.ch1
data class User(val no: Int, val name: String, val email: String)
fun main(args: Array<String>) {
val list = ArrayList<User>()
val user1 = User(1, "kkang", "[email protected]")
list.add(user1)
val user2 = User(1, "kkang", "[email protected]")
list.add(user2)
println("List Size ${list.size}")
if(user1.equals(user2)) {
println("user1 == user2")
}else {
println("user1 != user2")
}
}
์ผ๋ฐ์ ์ผ๋ก ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ์์ ํ๋ค๋ ๋ง์ ํ๋ก๊ทธ๋จ์์ ๋ฐ์ํ ์ ์๋ ์ค๋ฅ ์ค์์ ์ผ๋ถ ์ ํ์ ์ค๋ฅ๋ฅผ ํ๋ก๊ทธ๋จ ์ค๊ณ๊ฐ ์์ฒ์ ์ผ๋ก ๋ฐฉ์งํด์ค๋ค๋ ๋ป์ด๋ค. ๋ ํฐ ์์ ์ฑ์ ์ป๊ธฐ ์ํด์๋ ํ๋ก๊ทธ๋จ์ ๋ ๋ง์ ์ ๋ณด๋ฅผ ๋ง๋ถ์ฌ์ผ ํ๋ฏ๋ก ์์ฐ์ฑ์ด ํ๋ฝํ๋ ๊ฒ์ ๊ฐ์ํด์ผ ํ๋ฉฐ ์์ ์ฑ๊ณผ ์์ฐ์ฑ ์ฌ์ด์๋ *ํธ๋ ์ด๋์คํ ๊ด๊ณ๊ฐ ์ฑ๋ฆฝํ๋ค.
์ฝํ๋ฆฐ์ JVM์์ ์คํํ๋ค๋ ์ฌ์ค์ ์ด๋ฏธ ์๋นํ ์์ ์ฑ์ ๋ณด์ฅํ ์ ์๋ค๋ ๋ป์ด๋ค. ์๋ฅผ ๋ค์ด JVM์ ์ฌ์ฉํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ์์ ์ฑ์ ๋ณด์ฅํ๊ณ , ๋ฒํผ ์ค๋ฒํ๋ก๋ฅผ ๋ฐฉ์งํ๋ฉฐ, ๋์ ์ผ๋ก ํ ๋นํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋ชป ์ฌ์ฉํจ์ผ๋ก ์ธํด ๋ฐ์ํ ์ ์๋ ๋ค์ํ ๋ฌธ์ ๋ฅผ ์๋ฐฉํ ์ ์๋ค.
์ฝํ๋ฆฐ์ ๊ฑฐ๊ธฐ์ ํ๊ฑธ์ ๋ ๋์๊ฐ ์คํ ์์ ์ ์ค๋ฅ๋ฅผ ๋ฐ์์ํค๋ ๋์ ์ปดํ์ผ ์์ ์ฌ์ฌ๋ฅผ ํตํด ์ค๋ฅ๋ฅผ ๋ ๋ง์ด ๋ฐฉ์งํด์ค๋ค. ๊ฐ์ฅ ์ค์ํ ๋ด์ฉ์ผ๋ก ์ฝํ๋ฆฐ์ ํ๋ก๊ทธ๋จ์ NullPointerException์ด ๋ฐ์ํ ์ ์๋ ์ฐ์ฐ์ ์ฌ์ฉํ๋ ์ฝ๋๋ฅผ ๊ธ์งํ๋ค. ์ด๋ค ํ์ ์ด ๋์ด ๋ ์ ์๋์ง ์ฌ๋ถ๋ฅผ ํ์ํ๊ธฐ ์ํด์๋ ? ํ ๊ธ์๋ง ์ถ๊ฐํ๋ฉด ๋๋ค
val s1: String? = null //Null์ด ๋ ์ ์์
val s2: String = "" //Null์ด ๋ ์ ์์
์ฝํ๋ฆฐ์ด ๋ฐฉ์งํด์ฃผ๋ ๋ค๋ฅธ ์์ธ๋ก๋ ClassCastException์ด ์๋ค. ์ด๋ค ๊ฐ์ฒด๋ฅผ ๋ค๋ฅธ ํ์ ์ผ๋ก ์บ์คํธํ๊ธฐ ์ ์ ํ์ ์ ๋ฏธ๋ฆฌ ๊ฒ์ฌํ์ง ์์ผ๋ฉด ClassCastException์ด ๋ฐ์ํ ์๋ ์๋ค. ์ฝํ๋ฆฐ์์๋ ํ์ ๊ฒ์ฌ์ ์บ์คํธ๊ฐ ํ ์ฐ์ฐ์์ ์๋ค์ง๋ค. ์ด๋ค ๊ฐ์ฒด์ ํ์ ์ ๊ฒ์ฌํ๊ณ ๊ทธ ๊ฐ์ฒด๊ฐ ๊ทธ ํ์ ์ ์ํ๋ค๋ฉด ํด๋น ํ์ ์ ๋ฉ์๋๋ ํ๋ ๋ฑ์ ๋ฉค๋ฒ๋ฅผ ๋ณ๋์ ์บ์คํธ ์์ด ์ฌ์ฉํ ์ ์๋ค.
if (value is String) //ํ์
์ ๊ฒ์ฌํ๋ค
println(value.toUpperCase()) //ํด๋น ํ์
์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค
*ํธ๋ ์ด๋์คํ ์ด์จ ๋ฐฐ๋ฐ์ ๊ด๊ณ, ํ์ชฝ์ ์ถ๊ตฌํ๋ฉด ๋ค๋ฅธ ์ชฝ์ ํฌ์๋์ด์ผ ํ๋ ๊ด๊ณ
-
์ฝํ๋ฆฐ์ ๊ธฐ์กด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ด๋ค API๋ฅผ ์ ๊ณตํ๋ ๊ฐ์ ์ฝํ๋ฆฐ์์ ๊ทธ API๋ฅผ ํ์ฉํ ์ ์๋ค. ์๋ฐ ๋ฉ์๋๋ฅผ ํธ์ถํ๊ฑฐ๋ ์๋ฐ ํด๋์ค๋ฅผ ์์ํ๊ฑฐ๋ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ฑฐ๋ ์๋ฐ ์ ๋ ธํ ์ด์ ์ ์ฝํ๋ฆฐ ์ฝ๋์ ์ ์ฉํ๋ ๋ฑ์ ์ผ์ด ๋ชจ๋ ๊ฐ๋ฅํ๋ค.
-
์ฝํ๋ฆฐ์ ํด๋์ค๋ ๋ฉ์๋๋ฅผ ์ผ๋ฐ์ ์ธ ์๋ฐ ํด๋์ค๋ ๋ฉ์๋์ ๋๊ฐ์ด ์ฌ์ฉํ ์ ์๋ค.
๊ธฐ์กด ์๋ฐ ํ๋ก์ ํธ์ ์ฝํ๋ฆฐ์ ๋์ ํ๋ ๊ฒฝ์ฐ ์๋ฐ๋ฅผ ์ฝํ๋ฆฐ์ผ๋ก ๋ณํํ๋ ๋๊ตฌ๋ฅผ ์ฝ๋๋ฒ ์ด์ค ์์ ์๋ ์๋ฐ ํด๋์ค์ ๋ํด ์คํํด์ ๊ทธ ํด๋์ค๋ฅผ ์ฝํ๋ฆฐ ํด๋์ค๋ก ๋ณํํ ์ ์๋ค.
-
๊ธฐ์กด ์๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ๋ฅํ๋ฉด ์ต๋ํ ํ์ฉํ๋ค.
์๋ฅผ ๋ค์ด ์ฝํ๋ฆฐ์ ์์ฒด ์ปฌ๋ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ณตํ์ง ์๋๋ค. ์ฝํ๋ฆฐ์ ์๋ฐ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํด๋์ค์ ์ํด ์์กดํ๋ค. ์ด๋ ์ฝํ๋ฆฐ์์ ์๋ฐ API๋ฅผ ํธ์ถํ ๋ ๊ฐ์ฒด๋ฅผ ๊ฐ์ธ๊ฑฐ๋ ๋ณํํ ํ์๊ฐ ์๊ณ , ์๋ฐ์์ ์ฝํ๋ฆฐ API๋ฅผ ํธ์ถํ ๋๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์๋ฌด๋ฐ ๋ณํ์ด ํ์์๋ค๋ ๋ป์ด๋ค.
-
์ฝํ๋ฆฐ์ด ์ ๊ณตํ๋ ๋๊ตฌ๋ ๋ค์ค ์ธ์ด ํ๋ก์ ํธ๋ฅผ ์์ ํ ์ง์ํ๋ค.
์ฝํ๋ฆฐ์ ์๋ฐ์ ์ฝํ๋ฆฐ ์์ค ํ์ผ์ด ์์๋ก ์์ฌ ์์ด๋ ์ ๋๋ก ํ๋ก๊ทธ๋จ์ ์ปดํ์ผํ ์ ์๋ค. IDE ๊ธฐ๋ฅ๋ ์ธ์ด์ ๊ด๊ณ์์ด ์ ๋๋ก ์๋ํ๋ค. ๋ค์๊ณผ ๊ฐ์ ๋์์ด ๊ฐ๋ฅํ๋ค.
- ์๋ฐ์ ์ฝํ๋ฆฐ ์์ค ํ์ผ์ ์์ ๋กญ๊ฒ ๋ด๋น๊ฒ์ด์ ํ ์ ์๋ค.
- ์ฌ๋ฌ ์ธ์ด๋ก ์ด๋ค์ง ํ๋ก์ ํธ๋ฅผ ๋๋ฒ๊น ํ๊ณ ์๋ก ๋ค๋ฅธ ์ธ์ด๋ก ์์ฑ๋ ์ฝ๋๋ฅผ ์ธ์ด์ ๊ด๊ณ์์ด ํ ๋จ๊ณ์ฉ ์คํํ ์ ์๋ค.
- ์๋ฐ ๋ฉ์๋๋ฅผ ๋ฆฌํฉํ ๋งํด๋ ๊ทธ ๋ฉ์๋์ ๊ด๋ จ ์๋ ์ฝํ๋ฆฐ ์ฝ๋๊น์ง ์ ๋๋ก ๋ณ๊ฒฝ๋๋ค. ์ญ์ผ๋ก ์ฝํ๋ฆฐ ๋ฉ์๋๋ฅผ ๋ฆฌํฉํ ๋งํด๋ ์๋ฐ ์ฝ๋๊น์ง ๋ชจ๋ ์๋์ผ๋ก ๋ณ๊ฒฝ๋๋ค.
- ์ฝํ๋ฆฐ์ ํ์ ์ถ๋ก ์ ์ง์ํ๋ ์ ์ ํ์ ์ง์ ์ธ์ด๋ค. ๋ฐ๋ผ์ ์์ค์ฝ๋์ ์ ํ์ฑ๊ณผ ์ฑ๋ฅ์ ๋ณด์ฅํ๋ฉด์๋ ์์ค์ฝ๋๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ์ ์งํ ์ ์๋ค.
- ์ฝํ๋ฆฐ์ ๊ฐ์ฒด์งํฅ๊ณผ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ์คํ์ผ์ ๋ชจ๋ ์ง์ํ๋ค. ์ฝํ๋ฆฐ์์๋ ์ผ๊ธ ์๋ฏผ ํจ์๋ฅผ ์ฌ์ฉํด ์์ค ๋์ ์ถ์ํ๊ฐ ๊ฐ๋ฅํ๊ณ , ๋ถ๋ณ ๊ฐ ์ง์์ ํตํด ๋ค์ค ์ค๋ ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐ๊ณผ ํ ์คํธ๋ฅผ ๋ ์ฝ๊ฒ ํ ์ ์๋ค.
- ์ฝํ๋ฆฐ์ ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์ ํ์ฉํ ์ ์๋ค. ์ฝํ๋ฆฐ์ ๊ธฐ์กด ์๋ฐ ํ๋ ์์ํฌ๋ฅผ ์๋ฒฝํ๊ฒ ์ง์ํ๋ ํํธ, HTML ์์ฑ๊ธฐ๋ ์์ํ ๋ฑ์ ์ผ๋ฐ์ ์ธ ์์ ์ ์ํ ์๋ก์ด ๋๊ตฌ๋ฅผ ์ ๊ณตํ๋ค.
- ์ฝํ๋ฆฐ์ ์๋๋ก์ด๋์๋ ํ์ฉํ ์ ์๋ค. ์ฝํ๋ฆฐ์ ๋ฐํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํฌ๊ธฐ๊ฐ ์๊ณ , ์ฝํ๋ฆฐ ์ปดํ์ผ๋ฌ๋ ์๋๋ก์ด๋ API๋ฅผ ํน๋ณํ ์ง์ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ฝํ๋ฆฐ์ ๋ค์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์๋๋ก์ด๋์์ ํํ ํ๋ ์์ ์ ์ฌ์ฉํ ์ ์์ผ๋ฉด์ ์ฝํ๋ฆฐ๊ณผ ์ ํตํฉ๋ ์ ์๋ ํจ์๋ฅผ ์ ๊ณตํ๋ค.
- ์ฝํ๋ฆฐ์ ๋ฌด๋ฃ๋ฉฐ ์คํ์์ค๋ค. ๋ํ ์ฃผ์ IDE์ ๋น๋ ์์คํ ์ ์์ ํ ์ง์ํ๋ค.
- ์ฝํ๋ฆฐ์ ์ค์ฉ์ ์ด๋ฉฐ ์์ ํ๊ณ , ๊ฐ๊ฒฐํ๋ฉฐ ์ํธ์ด์ฉ์ฑ์ด ์ข๋ค. ์ด๋ ์ฝํ๋ฆฐ์ ์ค๊ณํ๋ฉด์ ์ผ๋ฐ์ ์ธ ์์ ์ ๋ํด ์ด๋ฏธ ์ ์๋ ค์ง ํด๋ฒ์ ์ฑํํ๊ณ , NullPointerException๊ณผ ๊ฐ์ด ํํ ๋ฐ์ํ๋ ์ค๋ฅ๋ฅผ ๋ฐฉ์งํ๋ฉฐ, ์ฝ๊ธฐ ์ฝ๊ณ ๊ฐ๊ฒฐํ ์ฝ๋๋ฅผ ์ง์ํ๋ฉด์ ์๋ฐ์ ์๋ฌด๋ฐ ์ ์ฝ ์์ด ํตํฉ๋ ์ ์๋ ์ธ์ด๋ฅผ ๋ง๋๋๋ฐ ์ด์ ์ ๋ง์ท๋ค๋ ๋ป์ด๋ค.
-
์ฝํ๋ฆฐ ํ๋ก๊ทธ๋จ์ ํ์ฅ์๊ฐ kt์ธ ํ์ผ์ ์์ฑํ์ฌ ๊ฐ๋ฐํ๋ค.
-
์ฝํ๋ฆฐ ํ์ผ์ ํด๋์ค ํ์ผ์ผ ์๋ ์๊ณ ์ผ๋ฐ ํ์ผ์ผ ์๋ ์๋ค.
์ฝํ๋ฆฐ ์์ฒด์ ๊ท์น์ด๋ผ๊ธฐ๋ณด๋ค๋ IDE์์์ ํธ์๋ฅผ ์ํ ๊ตฌ๋ถ์ด๋ค. ํด๋์ค ํ์ผ์๋ ํด๋์ค๊ฐ ๊ผญ ์์ฑ๋์ด์ผ ํ๊ณ , ์ผ๋ฐ ํ์ผ์๋ ํด๋์ค๋ฅผ ์์ฑํ์ง ๋ชปํ๋ค๋ ๊ท์น์ ์์ผ๋ฉฐ, ํด๋์ค ํ์ผ๋ก ๋ง๋ ํ ํด๋์ค๊ฐ ์๋ ํจ์์ ๋ณ์ ๋ฑ์ผ๋ก๋ง ํ์ผ์ ๊ตฌ์ฑํด๋ ์๊ด์๊ณ , ์ผ๋ฐ ํ์ผ๋ก ๋ง๋ ํ ๊ทธ๊ณณ์ ํด๋์ค๋ฅผ ์ ์ธํด๋ ์๊ด์๋ค.
-
ํ๋์ ํ์ผ์ ํจํค์ง, ์ํฌํธ, ํด๋์ค๋ฅผ ์ ์ธํ ๋จ์ ๊ตฌ์กฐ์ด๋ฉฐ, ๋ค๋ฅธ ๊ฐ์ฒด์งํฅ ์ธ์ด์ ํฐ ์ฐจ์ด๊ฐ ์๋ค.
-
์ฝํ๋ฆฐ ํ์ผ์๋ ํจํค์ง๋ฅผ ์ ์ธํ ์ ์๋๋ฐ, ๋ฐ๋์ ํ์ผ์ ์ฒซ ์ค์ ์ ์ธํด์ผ ํ๋ค.
-
์ฝํ๋ฆฐ ํ์ผ์ ํด๋์ค๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ณ์์ ํจ์๋ก๋ง ๊ตฌ์ฑํ ์๋ ์๋ค.
-
์ฝํ๋ฆฐ์์๋ ๋ชจ๋ ๊ตฌ์ฑ์์๋ฅผ ๊ผญ ํด๋์ค๋ก ๋ฌถ์ง ์์๋ ๋๋ฉฐ, ๋ณ์๋ ํจ์๋ฅผ ํด๋์ค ์ธ๋ถ์ ์ ์ธํ ์ ์๋ค.
-
์ฝํ๋ฆฐ์ ํ์ผ์ ๊ตฌ์ฑ์์์ ๋ํ ๊ท์น์ด ์์ผ๋ฉฐ ๊ฐ๋ฐ์์ ํธ์์ ๋ฐ๋ผ์ ๋ณ์, ํจ์, ํด๋์ค ๋ฑ์ ์์ ๋กญ๊ฒ ์ ์ํ ์ ์๋ค.
Q. ์ฝํ๋ฆฐ์ด JVM์์ ์ํ๋๋ค๊ณ ํ๋๋ฐ ํด๋์ค ์ ์ธ ์์ด ๋ณ์์ ํจ์๋ฅผ ์ ์ํ๋ฉด JVM ์คํ ์ ๋ฌธ์ ๊ฐ ๋ฐ์?
A. ์ฝํ๋ฆฐ์ผ๋ก ์์ฑํ ์ฝ๋๊ฐ ๊ทธ๋๋ก JVM์์ ์คํ๋๋ ๊ฒ ์๋๋ผ, JVM์์ ์คํ๋๋๋ก ์ ์ ํ๊ฒ ๋ณํ๋๋ค. ํ์ผ๋ช ์ "Kt"๊ฐ ์ถ๊ฐ๋๋ ํด๋์ค๊ฐ ์๋์ผ๋ก ๋ง๋ค์ด์ง๋ค.
-
ํด๋์ค ์์ด ์ ์ธ๋ ๋ณ์๋ ํจ์๋ฅผ ์ธ๋ถ์์ ์ด์ฉํ๋ ค๋ฉด ํด๋์ค์ฒ๋ผ ๊ทธ๋๋ก ์ํฌํธํด์ ์ฌ์ฉํ๋ฉด ๋๋ค.
package com.example.ch3.two.sub val threeVal = 10 fun threeFun() { }
์ด ํ์ผ์ ๋ณ์์ ํจ์๋ฅผ ๋ค๋ฅธ ํจํค์ง์ ํ์ผ์์ ์ด์ฉํ๋ ค๋ฉด
package com.example.ch3.two import com.example.ch3.two.sub.threeFun import com.example.ch3.two.sub.threeVal fun main(args: Array<String>) { println(threeVal) threeFun() }
์ด์ฒ๋ผ ๋ณ์๋ ํจ์๋ฅผ ์ง์ ์ํฌํธํ์ฌ ์ด์ฉํ ์ ์๋ ๊ฒ์ ํด๋์ค๋ก ๋ฌถ์ง ์์ ๋ณ์์ ํจ์๋ฅผ ์ต์์ ๋ ๋ฒจ๋ก ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ด๋ค. ์ฆ, ํจํค์ง ๋ด์ ์ ์ธ๋ ์ ์ญ๋ณ์๋ ์ ์ญํจ์์ฒ๋ผ ์ทจ๊ธํ๋ค.
์ฝํ๋ฆฐ์์ ๋ค์์ ํจํค์ง๋ ๋ณ๋์ import ๊ตฌ๋ฌธ ์์ด ์ฌ์ฉํ ์ ์๋ค.
- kotlin.*
- kotlin.annotation.*
- kotlin.collections.*
- kotlin.comparisons.* (since 1.1)
- kotlin.io.*
- kotlin.ranges.*
- kotlin.sequences.*
- kotlin.text.*
- kotlin.lang.*
- kotlin.jvm.*
ํด๋์ค๋ฅผ ์ํฌํธํ ๋ ์ด๋ฆ์ ๋ฐ๊พธ์ด ๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ์ฌ์ฉํ ์๋ ์๋ค.
import java.text.SimpleDateFormat as MySimpleDateFormat
์ํฌํธํ๊ณ ์ ํ๋ ํด๋์ค๋ java.text.SimpleDateFormat์ด๋ค. as๋ผ๋ ์์ฝ์ด๋ฅผ ์ด์ฉํ์ฌ ์ด๋ฆ์ MySimpleDateFormat์ด๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ณ๊ฒฝํ๋ค. ๋ฐ๋ผ์ ์ํฌํธํ ํ์ผ ๋ด์์๋ ์ด์ MySimpleDateFormat์ด๋ผ๋ ์ด๋ฆ์ผ๋ก SimpleDateFormatํด๋์ค๋ฅผ ์ด์ฉํ ์ ์๋ค.
-
ํ์ ์ ๋จผ์ ์ ๊ณ ๊ทธ ๋ค์ ์ด๋ฆ์ ์ ๋ ์๋ฐ์ ๋ฌ๋ฆฌ, ์ฝํ๋ฆฐ์์๋ ์ด๋ฆ์ ๋จผ์ ์ ๊ณ ํ์ ์ ์ ๋๋ค. ํ์ ์ ์ํฉ์ ๋ฐ๋ผ ์๋ต ๊ฐ๋ฅํ๋ค.
// String ํ์ ์ ๊ฐ๋ ๊ฐ a ์ ์ธ val a: String = "foo" // ํ ๋นํ๋ ์๋ฃ์ ํ์ ์ ๋ฐ๋ผ ์๋์ผ๋ก ํ์ ์ ์ถ๋ก ํ๋ฏ๋ก ํ์ ์ ์๋ตํ ์ ์๋ค. val b = "bar" // ์ ์ธ ์ ์๋ฃ๋ฅผ ํ ๋นํ์ง ์์ผ๋ฉด ํ์ ์ ๊ผญ ๋ถ์ฌ์ผ ํ๋ค. val c: String // ์๋ฃ ํ ๋น c = "baz" // ๋ณ์ d ์ ์ธ var d: Int = 0 // ๋ณ์ ๊ฐ ๋ณ๊ฒฝ d += 1
-
val(value)์ **Assign-once ๋ณ์*๋ก ์ ์ธํ๊ณ , var(variable)๋ * Mutable ๋ณ์๋ก ์ ์ธํ๋ค.
*Assign-once ๋ณ์ ํ ๋ฒ ์ด๊ธฐํํ๋ฉด ๋๋ ๋ณ๊ฒฝํ ์ ์๋ค.
*Mutable ๋ณ์ ์ธ์ ๋ ์ง ๋ณ๊ฒฝ ๊ฐ๋ฅ
-
ํจ์๋ ์๋ฐ์ ๋ฉ์๋์ ๋์ํ๋ฉฐ, ๊ฐ ๋ฐ ๋ณ์ ์ ์ธ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฐํ ํ์ ์ ๋ค์ ์ ๋๋ค.
-
์ฝํ๋ฆฐ์์๋ ํจ์๋ฅผ ์ ์ธํ ๋๋ fun์ด๋ผ๋ ์์ฝ์ด๋ฅผ ์ฌ์ฉํ๋ค.
fun greet(name: String) : Unit { println("Hello, $name!") } fun sum(a: Int, b: Int) : Int { return a + b } fun some(a: Int, b: Int): Int = a + b // ๋ฐํ ํ์ ์๋ต fun some(a: Int, b: Int) = a + b
-
ํจ์์ ๋ฐํ๊ฐ์ ์ฌ์ฉํ๋ Unit์ ์๋ฐ์ void์ ์ ์ฌํ๊ฒ ์ฌ์ฉํ๋ฉฐ Unit์ ๋ฐํํ๋ ํจ์๋ ์๋ตํ ์ ์๋ค. ํจ์์ ๋ฐํ ํ์ ์ด ์ ์ธ๋์ง ์์๋ค๋ฉด ๊ธฐ๋ณธ์ผ๋ก Unit์ด ์ ์ฉ๋๋ค.
-
๋จ์ผ ํํ ํจ์๋ ๋ฐํ ํ์ ๊ณผ ์ค๊ดํธ๋ฅผ ์๋ตํ ์ ์๋ค. ๋ฐํ ํ์ ์ ์๋ตํ๋ฉด ์ปดํ์ผ๋ฌ๊ฐ ์ ์ถํด์ ์ ํ๋ค.
ํด๋์ค์ ์ธํฐํ์ด์ค๋ฅผ ์ ์ธํ๋ ๋ฐฉ๋ฒ์ ์๋ฐ์ ํฌ๊ฒ ๋ค๋ฅด์ง ์๋ค. ๋จ, ํด๋์ค์ ์์ฑ์๋ฅผ ์ ์ํ๋ ๋ฐฉ๋ฒ์๋ ๋ค์ ์ฐจ์ด๊ฐ ์๋ค.
์ฝํ๋ฆฐ์์๋ ์์ฑ์๋ฅผ ์ฃผ ์์ฑ์์ ๋ณด์กฐ ์์ฑ์๋ก ๊ตฌ๋ถํ๋ค.
์ฃผ ์์ฑ์
- ํด๋์ค ์ ์ธ ๋ถ๋ถ์ ์์ฑ
- ํ๋์ ํด๋์ค์ ํ๋์ ์ฃผ ์์ฑ์๋ง ์ ์ ๊ฐ๋ฅ
- ๊ผญ ์์ฑํด์ผ ํ๋ ๊ฑด ์๋๋ฉฐ ๋ณด์กฐ ์์ฑ์๊ฐ ์๋ค๋ฉด ์์ฑํ์ง ์์ ์ ์์
๋ณด์กฐ ์์ฑ์
- ํด๋์ค ๋ชธ์ฒด์ constructor ์์ฝ์ด๋ก ์ ์ธ
- ๋ณด์กฐ ์์ฑ์๋ฅผ ์ ์ธํ์ผ๋ฉด ์ฃผ ์์ฑ์๋ ์ ์ธํ์ง ์์๋ ๋จ
// ์ฃผ ์์ฑ์๋ก ์ ์ธ
class User1(name: String, age: Int){
}
// ๋ณด์กฐ ์์ฑ์๋ก ์ ์ธ
class User2{
constructor(name: String, age: Int){}
}
fun main(args: Array<String>){
val user1 = User1("kkang", 30)
val user2 = User2("kkang", 30)
}
- ์ฝํ๋ฆฐ์์๋ ํ์ผ ๋ด์ ํ์ผ๋ช ๊ณผ ๊ฐ์ public ํด๋์ค๋ฅผ ๊ฐ์ ํ์ง ์๋๋ค.
- ์ฝํ๋ฆฐ์๋ new ์ฐ์ฐ์๊ฐ ์๋ค.
- ์ฝํ๋ฆฐ์ ์์ฑ์๋ ์๋ฐ์ ์์ฑ ๋ฐฉ๋ฒ ๋ฐ ๋์ ์๋ฆฌ๊ฐ ๋ง์ด ๋ค๋ฅด๋ค.
- constructor ์์ฝ์ด๋ฅผ ์ด์ฉํด ์์ฑ์ ์ ์ธ
- ์ฃผ ์์ฑ์์ ๋ณด์กฐ ์์ฑ์๋ก ๊ตฌ๋ถ
- ์์ฑ์์ ์ด๊ธฐํ ๋ก์ง์ ์ํด init{} ๊ตฌ๋ฌธ์ ์ฌ์ฉ
- ์ฃผ ์์ฑ์์ ๋งค๊ฐ๋ณ์์ val, var๋ฅผ ์ถ๊ฐํ๋ฉด ํด๋์ค์ **ํ๋กํผํฐ*๊ฐ ๋์ด ํจ์์์๋ ์ฌ์ฉ ๊ฐ๋ฅ
- ์ฝํ๋ฆฐ์์๋ ํจ์ ๋ด์ ์ง์ญ๋ณ์๋ฅผ final๋ก ์ ์ธํ์ง ์์๋ ํจ์ ๋ด์ ์ ์ธํ Nested ํด๋์ค์์ ์ด์ฉ
- ์ฝํ๋ฆฐ์์๋ static์ด๋ผ๋ ์์ฝ์ด๋ฅผ ์ ๊ณตํ์ง ์์
*ํ๋กํผํฐ ์ฝํ๋ฆฐ์์๋ ํด๋์ค์ ๋ณ์๋ฅผ ํ๋กํผํฐ๋ผ ๋ถ๋ฅธ๋ค. var, val๋ก ์ ์ธ๋๋ ๋ณ์๋ค์ด ํ๋กํผํฐ์ด๋ค.
- if - else๋ฌธ์ ์๋ฐ์ ์ฌ์ฉ ๋ฐฉ๋ฒ์ด ๋์ผํ๋ค.
- when๋ฌธ์ ์๋ฐ์ switch์ ๋์ผํ ์ญํ ์ ํ๋ค.
์ธ๋ฑ์ค ๊ธฐ๋ฐ for๋ฌธ๊ณผ for - each๋ฌธ์ ๋ชจ๋ ์ง์ํ๋ ์๋ฐ์ ๋ฌ๋ฆฌ ์ฝํ๋ฆฐ์ for - each๋ฌธ๋ง ์ง์ํ๋ค.
-
๋๋ค์, ๋๋ ๋๋ค ํจ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ฌ์ฉ๋๋ ๊ฐ๋ ์ผ๋ก ์ต๋ช ํจ์๋ฅผ ์ง์นญํ๋ ์ฉ์ด์ด๋ค.
-
๋ง์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ง์ํ๋ฉฐ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ๋ชฉ์ ์ผ๋ก ํ์ง ์๋๋ผ๋ ์ฝ๋์ ๊ฐ๊ฒฐํจ์ ์ฃผ๋ชฉ์ ์ผ๋ก ์์ฃผ ์ด์ฉํ๋ค.
-
๋๋ค ํจ์๋ fun๊ณผ ํจ์์ด๋ฆ์ ๋ช ์ํ์ง ์๊ณ ์ถ์ฝํ์ผ๋ก ์ ์ธํ๋ค.
์ฝํ๋ฆฐ์์ ํจ์ ์ ์
fun ํจ์์ด๋ฆ(๋งค๊ฐ๋ณ์) { ํจ์๋ด์ฉ }
๋๋ค ํจ์
{ ๋งค๊ฐ๋ณ์ -> ํจ์๋ด์ฉ }
-
๋๋ค ํจ์๋ {} ์์ ๋งค๊ฐ๋ณ์์ ํจ์ ๋ด์ฉ์ ์ ์ธํ๋ ํจ์๋ก ๋ค์ ๊ท์น์ ๋ฐ๋ผ ์ ์ํ๋ค.
- ๋๋ค ํจ์๋ ํญ์ {}์ผ๋ก ๊ฐ์ธ์ ํํํด์ผ ํ๋ค.
- {} ์์ -> ํ์๊ฐ ์์ผ๋ฉฐ -> ์ผ์ชฝ์ ๋งค๊ฐ๋ณ์, ์ค๋ฅธ์ชฝ์ ํจ์ ๋ด์ฉ์ด๋ค.
- ๋งค๊ฐ๋ณ์ ํ์ ์ ์ ์ธํด์ผ ํ๋ฉฐ ์ถ๋ก ํ ์ ์์ ๋๋ ์๋ตํ ์ ์๋ค.
- ํจ์์ ๋ฐํ๊ฐ์ ํจ์ ๋ด์ฉ์ ๋ง์ง๋ง ํํ์์ด๋ค.
// ์ผ๋ฐ ํจ์ ์ ์๋ฒ fun sum(x1: Int, x2: Int): Int { return x1 + x2 } // ๋๋ค ํจ์๋ก ์ ์ val sum1 = {x1: Int, x2: Int -> x1 + x2} fun main(args: Array<String>) { val result1 = sum1(10, 20) }
// ๋๋ค ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌ์ค๋ ์ ์ธ Button button = ... // ๋ฒํผ ์ธ์คํด์ค // ๋๋ค ํํ์์ ์ฌ์ฉํ์ฌ ๋ฆฌ์ค๋๋ฅผ ์ ์ธํฉ๋๋ค. button.setOnClickListener((View v) -> doSomething()) // ์ธ์์ ํ์ ์ ์๋ตํ ์ ์๋ค. button.setOnClickListener(v -> doSomething())
-
๋๋ค ํํ์์ ์ฌ์ฉํ๋ฉด, ํจ์๋ฅผ ์ธ์๋ก ๋๊ธธ ์ ์๋ ๊ณ ์ฐจํจ์์ ๋ค์ด๊ฐ ํจ์ํ ์ธ์๋ฅผ ์ฝ๊ฒ ํํํ ์ ์๋ค.
๋๋ค ํํ์์ ์ฌ์ฉํ์ฌ ์์ฑํ ํจ์๋ ์ปดํ์ผ ๊ณผ์ ์์ ์ต๋ช ํด๋์ค๋ก ๋ณํ๋๋ค. ๋ฐ๋ผ์ ์ต๋ช ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ์ฝ๋๋ฅผ ํธ์ถํ ๋๋ง๋ค ๋งค๋ฒ ์๋ก์ด ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ฏ๋ก ์ด๋ฌํ ์ฝ๋๊ฐ ์ฌ๋ฌ๋ฒ ํธ์ถ๋๋ ๊ฒฝ์ฐ ์คํ ์์ ์ ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น๊ฒ ๋๋ค.
์ธ๋ผ์ธ ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด, ํจ์์ ๋งค๊ฐ๋ณ์๋ก ๋ฐ๋ ํจ์ํ ์ธ์์ ๋ณธ์ฒด๋ฅผ ํด๋น ์ธ์๊ฐ ์ฌ์ฉ๋๋ ๋ถ๋ถ์ ๊ทธ๋๋ก ๋์ ํ๋ฏ๋ก ์ฑ๋ฅ ํ๋ฝ์ ๋ฐฉ์งํ ์ ์๋ค. ์ธ๋ผ์ธ ํจ์๋ก ์ ์ธํ๋ ค๋ฉด ํจ์ ์ ์ธ ์์ inline ํค์๋๋ฅผ ์ถ๊ฐํ๋ฉด ๋๋ค.
- ์กํฐ๋นํฐ๋ ํ๋๊ทธ๋จผํธ ๋ฑ ๋ ์ด์์ ํ์ผ์ ์ ์ธ๋ ์ฌ๋ฌ๊ฐ์ ๋ทฐ๋ก ๊ตฌ์ฑ๋ ์๋ฉด์์ ํน์ ๋ทฐ์ ์ธ์คํด์ค๋ฅผ ์ป๊ธฐ์ํด ์ฌ์ฉ๋๋ค.
- ์ด ๋ฉ์๋์์ ๋ฐํํ ๋ทฐ ๊ฐ์ฒด๋ฅผ ์๋ชป๋ ํ์ ์ ๋ทฐ๋ก ์บ์คํ ํ๊ฑฐ๋ ๋ค๋ฅธ ๋ ์ด์์์ ์ ์ธ๋ ID๋ฅผ ์๋ชป ์ฌ์ฉํ๋ฉด ๋ ๊ฐ์ ๋ฐํํ๋ค.
- ํ๋ฉด์ ๊ตฌ์ฑํ๋ ๋ทฐ์ ์ธ์คํด์ค๋ฅผ ์ป๊ธฐ ์ํด ๊ฐ ์ปดํฌ๋ํธ์ ์ด๊ธฐํ ์์ ์ ์ธ์คํด์ค๊ฐ ํ์ํ ๋ทฐ์ ๊ฐ์๋งํผ findViewById() ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
- ๋ณต์กํ ๊ตฌ์กฐ๋ก ๊ตฌ์ฑ๋ ํ๋ฉด์ ๋ค๋ฃจ๋ ๊ฒฝ์ฐ ๋ทฐ ์ธ์คํด์ค๋ฅผ ๋ฐ๋ ์ฝ๋๋ง ๋ช์ญ ์ค์ ์ฐจ์งํ์ฌ ์ฝ๋์ ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๋ค.
์์ ๊ฐ์ findViewById์ ๋ถํธํจ์ ์ฝํ๋ฆฐ ์๋๋ก์ด๋ ์ต์คํ ์ ์ ์ฌ์ฉํ๋ฉด ๋ง๋ํ ํด๊ฒฐ๋๋ค.
์ฝํ๋ฆฐ ์๋๋ก์ด๋ ์ต์คํ ์ ์ ์ฌ์ฉํ๋ ค๋ฉด ์ด๋ฅผ ์ฌ์ฉํ ๋ชจ๋์ ๋น๋์คํฌ๋ฆฝํธ์ kotlin-android-extensions ํ๋ฌ๊ทธ์ธ์ ์ ์ฉํด์ผ ํ๋ค. ์ด ํ๋ฌ๊ทธ์ธ์ ์ ์ฉํ๊ธฐ ์ํด kotlin-android ํ๋ฌ๊ทธ์ธ๋ ํจ๊ป ์ ์ฉํ๋ค.
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
// ์ฝํ๋ฆฐ ์๋๋ก์ด๋ ์ต์คํ
์
์ ์ด ๋ชจ๋์ด ์ ์ฉํ๋ค.
apply plugin: 'kotlin-android-extensions'
android {
...
}
dependencies {
...
compile "org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion}"
}
์ฝํ๋ฆฐ ์๋๋ก์ด๋ ์ต์คํ ์ ์ ํ์ฌ ์กํฐ๋นํฐ, ํ๋๊ทธ๋จผํธ, ๋ฆฌ์ฌ์ดํด๋ฌ๋ทฐ์์ ์ฌ์ฉํ ์ ์๋ค. ์ด๋ค ์ปดํฌ๋ํธ์์ ์ฌ์ฉํ๋ ๋ ์ด์์์ ํฌํจ๋ ๋ทฐ๋ฅผ ํ๋กํผํฐ์ฒ๋ผ ์ฌ์ฉํ ์ ์๋๋ก ์ง์ํ๋ฉฐ, ๊ฐ ๋ทฐ์ ID๋ฅผ ํ๋กํผํฐ ์ด๋ฆ์ผ๋ก ์ฌ์ฉํ๋ค. ๋ ์ด์์ ๋ด ์ ์ธ๋ ๋ทฐ๋ฅผ ํ๋กํผํฐ์ฒ๋ผ ์ฌ์ฉํ๊ธฐ ์ํด, ์ฝํ๋ฆฐ ์๋๋ก์ด๋ ์ต์คํ ์ ์ ์ฌ์ฉํ๋ ์ปดํฌ๋ํธ์์๋ ํน๋ณํ import ๋ฌธ์ ์ถ๊ฐํด์ผ ํ๋ค.
import kotlinx.android.synthetic.{sourceSet}.{layout}.*
// src/main/res/layout/activity_main.xml ๋ ์ด์์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
import kotlinx.android.synthetic.main.activity_main.*
// activity_main ๋ ์ด์์์ ์๋ ๋ทฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ import ๋ฌธ
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// ๋ทฐ ID๋ฅผ ์ฌ์ฉํ์ฌ ์ธ์คํด์ค์ ๋ฐ๋ก ์ ๊ทผํฉ๋๋ค.
btn_submit.setOnClickListener {
tv_message.text = "Hello, " + et_name.text.toString()
}
}
}
Anko๋ ์ฝํ๋ฆฐ ์ธ์ด์ ์ ์์ฌ์ธ ์ ฏ๋ธ๋ ์ธ์์ ์ง์ ์ ์ํ์ฌ ๋ฐฐํฌํ๋ ์ฝํ๋ฆฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, ์๋๋ก์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์ ์ฉํ ์ ํธ๋ฆฌํฐ ํจ์๋ฅผ ์ ๊ณตํ๋ค. Anko์์๋ ์ ํธ๋ฆฌํฐ ํจ์์ ์ฑ๊ฒฉ์ ๋ฐ๋ผ ๋ค์๊ณผ ๊ฐ์ด ๋ค ์ข ๋ฅ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ณตํ๋ค.
- Anko Commons
- Anko Layouts
- Anko SQLite
- Anko Coroutines
Anko Commons์ ์๋๋ก์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฑํ ๋ ์ผ๋ฐ์ ์ผ๋ก ์์ฃผ ๊ตฌํํ๋ ๊ธฐ๋ฅ์ ๊ฐํธํ๊ฒ ์ถ๊ฐํ ์ ์๋ ์ ํธ๋ฆฌํฐ ํจ์๋ฅผ ์ ๊ณตํ๋ค. Anko Commons์ ์ฌ์ฉํ๋ ค๋ฉด ์ด๋ฅผ ์ฌ์ฉํ ๋ชจ๋์ ๋น๋ ์คํฌ๋ฆฝํธ์ ๋ค์๊ณผ ๊ฐ์ด ์์กด์ฑ์ ์ถ๊ฐํ๋ฉด ๋๋ค.
// build.gradle
android {
...
}
dependencies {
// Anko Commons ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ถ๊ฐ
compile "org.jetbrains.anko:anko-commons:0.10.2"
// appcompat-v7์ฉ Anko Commons ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ถ๊ฐ
compile "org.jetbrains.anko:anko-appcompat-v7-commons:0.10.2"
// support-v4์ฉ Anko Commons ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ถ๊ฐ
compile "org.jetbrains.anko:anko-commons:0.10.2"
...
}
// ๋ค์ ์ฝ๋์ ๋์ผํ ์ญํ ์ ํ๋ค.
// Toast.makeText(Context, "Hello, Kotlin!", Toast.LENGTH_SHORT).show();
toast("Hello, Kotlin!")
// Toast.makeText(Context, R.string.hello, Toast.LENGTH_SHORT).show();
toast(R.string.hello)
// Toast.makeText(Context, "Hello, Kotlin!", Toast.LENGTH_LONG).show();
longtoast("Hello, Kotlin!")
arert() ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด AlertDialog๋ฅผ ์์ฑํ ์ ์์ผ๋ฉฐ, ํ ์คํธ์ ๋ง์ฐฌ๊ฐ์ง๋ก Context ํด๋์ค ํน์ ์ด๋ฅผ ์์ํ๋ ํด๋์ค(์กํฐ๋นํฐ, ํ๋๊ทธ๋จผํธ) ๋ด๋ถ์์๋ง ์ฌ์ฉํ ์ ์๋ค.
// ๋ค์ด์ผ๋ก๊ทธ์ ์ ๋ชฉ๊ณผ ๋ณธ๋ฌธ์ ์ง์ ํ๋ค.
alert(title = "Message", message = "Let's learn Kotlin!") {
// AlertDialog.Builder.setPositiveButton()
positiveButton("Yes") {
toast("Yay!")
}
...
}.show()
์ด๋ ๊ฒ Anko Commons ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ธํ ํธ, ๋ก๊ทธ ๋ฉ์์ง, ๋จ์ ๋ณํ๋ฑ ๋ค์ํ ๊ณณ์ ์ ์ฉํ ์ ์๋ค.
Anko Layouts๋ ์์ค ์ฝ๋๋ก ํ๋ฉด์ ๊ตฌ์ฑํ ๋ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์๋ ์ฌ๋ฌ ํจ์๋ค์ ์ ๊ณตํ๋ฉฐ, ์ด๋ฅผ ์ฌ์ฉํ๋ฉด XML ๋ ์ด์์์ ์์ฑํ๋ ๊ฒ์ฒ๋ผ ํธ๋ฆฌํ๊ฒ ์์ค์ฝ๋๋ก๋ ํ๋ฉด์ ๊ตฌ์ฑํ ์ ์๋ค. Anko Layout์ ์ฌ์ฉํ๋ ค๋ฉด ์ด๋ฅผ ์ฌ์ฉํ ๋ชจ๋์ ๋น๋์คํฌ๋ฆฝํธ์ ์์กด์ฑ์ ์ถ๊ฐํ๋ฉด ๋๋ค.
android {
defaultConfig {
// minSdkVersion์ด 15๋ก ์ค์ ๋์ด ์๋ค.
minSdkVersion 15
targetSdkVersion 27
...
}
...
}
dependencies {
// minSdkVersion์ ๋ง์ถ์ด Anko Layouts ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ถ๊ฐํ๋ค.
compile "org.jetbrains.anko:anko-sdk15:0.10.2"
...
}
class MainActivity : AppcompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// AnkoComponent์ ์ ์๋ ๋ทฐ๋ฅผ ์กํฐ๋นํฐ ํ๋ฉด์ผ๋ก ์ค์ ํ๋ค.
MainActivityUI().setContentView(this)
}
}
// MainActivity์ ํ์ํ ํ๋ฉด์ ๊ตฌ์ฑํ๋ค.
class MainActivityUI : AnkoComponent<MainActivity> {
override fun createView(ui: AnkoContext<MainActivity>) = ui.apply {
verticalLayout {
padding = dip(12)
textView("Enter Login Credentials")
editText {
hint = "E-mail"
}
editText {
hint = "Password"
}
button("Submit")
}
}.view
}
์ถ๊ฐ๋ก, ์กํฐ๋นํฐ์์๋ AnkoComponent ์์ด ์ง์ ์กํฐ๋นํฐ ๋ด์์ DSL์ ์ฌ์ฉํ์ฌ ํ๋ฉด์ ๊ตฌ์ฑํ ์ ์๋ค.
Anko SQLite๋ SQLite ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ค๋ฃฐ ๋ ์ ์ฉํ ํจ์๋ฅผ ์ ๊ณตํ๋ค.
์์ธํ ์ ๋ณด >> http://github.com/Kotlin/anko/wiki/Anko-SQLiteย
Anko Coroutines์ ์ฝํ๋ฆฐ ์ฝ๋ฃจํด ๋ผ์ด๋ธ๋ฌ๋ฆฌ(kotlinx.coroutines)์ ํจ๊ป ์ฌ์ฉํ ์ ์๋ ํจ์๋ฅผ ์ ๊ณตํ๋ค.
์์ธํ ์ ๋ณด >> http://github.com/Kotlin/anko/wiki/Anko-Coroutines
include kotlin support ์ฒดํฌ๋ฐ์ค๊ฐ ์ฒดํฌ๋ ์ํ๋ก ์ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๋ฉด ์๋์ผ๋ก ์ฝํ๋ฆฐ ํ์ผ์ด ๋ง๋ค์ด ์ง๋ค.
์ฒดํฌํ์ง ์๊ณ ๋ง๋ค๋๋ผ๋ ์๋์ ๊ฐ์ด ์ค์ ํด์ฃผ๋ฉด ๋๋ค.
// build.gradle(Project ...)
...
dependencies {
classpath 'com.android.tools.build:gradle:3.1.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
...
// build.gradle(Module: app)
...
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
...
dependencies {
...
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
...
}
์ฝํ๋ฆฐ ์ธ์ด ์จ๋ผ์ธ ์ปค๋ฎค๋ํฐ
- ๊ณต์ ์ฝํ๋ฆฐ ํฌ๋ผ https://discuss.kotlinlang.org
- Slack ์ฑํ http://kotlinlang.slack.com (http://kotlinslackin.herokuapp.com ์์ ์ด๋)
- Stack Overflow์ ์ฝํ๋ฆฐ ํ๊ทธ http://stackoverflow.com/questions/tagged/kotlin
- ์ฝํ๋ฆฐ Reddit http://www.reddit.com/r/Kotlin
- ํ์ด์ค๋ถ ํ๊ตญ ์ฝํ๋ฆฐ ์ฌ์ฉ์ ๊ทธ๋ฃน www.facebook.com/groups/kotlinkr/
- ํ๊ตญ ์ฝํ๋ฆฐ ์ฌ์ฉ์ ์ฌ๋ ์ฑํ http://kotlinkr.slack.com/ (https://kotlinkr.herokuapp.com/ ์์ ์ด๋)