์ฝํ๋ฆฐ์ ๋ชจ๋ฐ์ผ ๊ฐ๋ฐ, ํนํ ์๋๋ก์ด๋ ์ฑ ๋ถ์ผ์์ ํ์์ฒ๋ผ ์ฌ์ฉ๋๊ณ ์๋ค.
์ฝํ๋ฆฐ ๊ฐ๋ฐ์๊ฐ ๋๊ธฐ ์ํด์๋ ๋จผ์ ์ฝํ๋ฆฐ ๋ฌธ๋ฒ์ ์ตํ๊ณ , ์ฌ๋ฌ ์ฌ๋ก๋ฅผ ํตํด ์ ์ฉํด๋ณด๋ ์ฐ์ต์ด ํ์ํ๋ค. ์๋๋ก์ด๋ ์ํคํ
์ณ, ์๋ฐ์ ๋ํ ์ดํด๊ฐ ํ์ํ๋ค.
์ฝํ๋ฆฐ์ ์ด์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ๊ฐ์ง๊ณ ์๋ ๋จ์ ์ ๋ง์ด ๊ฐ์ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ, ๋๋ค์ ํํ๊ณผ ๊ฐ์ ํ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๊ธฐ๋ฅ๋ ๋ง์ด ํฌํจํ๊ณ ์๋ค.
C์ธ์ด๋ ์ ์ฐจ ์งํฅ ์ธ์ด๋ก ์๋ฒ ๋๋ ๋ถ์ผ์ ์ ํฉํ ๋ฐ๋ฉด, ์๋ฐ๋ ๊ฐ์ฒด์งํฅ ์ธ์ด๋ก ๋ํ ์ํํธ์จ์ด๋ฅผ ๋ง๋๋๋ฐ์ ์ ํฉํ๋ค.
-๋ชฉ์ : ๋ค์ํ ํ๋ซํผ(์น, ์๋๋ก์ด๋, ios ์ฑ, ๋ฑ)์์ ๊ฐ๋ฐํ ์ ์๋๋ก ํ๋ ๊ฒ.
-ํน์ง:
1) IDE๋ก ์ ๋ช
ํ JetBrains์์ ๊ฐ๋ฐํ๊ณ ๋ณด๊ธ
2) ์ฝ๋๊ฐ ๊ฐ๊ฒฐํ๊ณ ๋ค์ฌ๋ค๋ฅํ์ฌ ํธํ์ฑ์ด ๋๋ค.
3) ๋ฌธ์ฅ ๋์ ์ธ๋ฏธ์ฝ๋ก ์ ์ต์
(์๋ต ๊ฐ๋ฅ)
4) ๋ณ์๋ Nullable๊ณผ NotNull๋ก ๋๋๋๋ฐ, ๋ณ์ ์ ์ธ์ '?'๋ฅผ ๋ถ์ฌ Nuulable๋ก ๋ง๋ค ์ ์๋ค.
-> ๋ ํฌ์ธํฐ๋ก ์ธํ ํ๋ก๊ทธ๋จ์ ์ค๋จ์ ์๋ฐฉํ ์ ์๋ค.
- ์ฝํ๋ฆฐ์ NPE์์ ์์ ๋กญ๋ค.
5) ์๋๋ก์ด๋ ๊ณต์ ์ธ์ด
6) ์๋ฃํ์ ๋ํ ์ค๋ฅ๋ฅผ ๋ฏธ๋ฆฌ ์ก์ ์ ์๋ ์ ์ ์ธ์ด์ด๋ค.
(Statically typed)
์ ์ ํ์: ์ปดํ์ผ๋ฌ๊ฐ ํ์
์ ๊ฒ์ฆํด์ค๋ค.
(๋ค๋ฅธ ์ธ์ด๋ interprete, ์ฝ๋ ๊ฒ์ฌํด์ฃผ์ด์ผ ํจ)
7) ์๋ฐ์ ์๋ฒฝํ๊ฒ ์ํธ์ด์์ด ๊ฐ๋ฅํ๋ค. JVM์์์ ๋ ์ ์์.
(๋ฌธ๋ฒ์ ํน์ง์ ์กฐ๊ธ ๋ค๋ฅด๋ค!)
8) ํจ์ํ ํ๋ก๊ทธ๋๋ฐ๊ณผ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด ๋ชจ๋ ๊ฐ๋ฅํ๋ค.
-๋ค์ํ ํ๋ซํผ(์ฉ๋):
Kotlin/JVM - ์๋ฐ ๊ฐ์ ๋จธ์ ์์์ ๋์ํ๋ ์ฑ์ ๋ง๋ค ์ ์๋ค.
Kotlin/JS - ์๋ฐ์คํฌ๋ฆฝํธ์ ์ํด ๋ธ๋ผ์ฐ์ ์์ ๋์ํ๋ ์ฑ์ ๋ง๋ค ์ ์๋ค.
Kotlin/Native - LLVM๊ธฐ๋ฐ์ ๋ค์ดํฐ๋ธ ์ปดํ์ผ์ ์ง์ํด ์ฌ๋ฌ ํ๊น์ ์ฑ์ ๋ง๋ค ์ ์๋ค. ํน์ ํ๋์จ์ด ์ํคํ
์ณ(์๋๋ก์ด๋, ์๋์ฐ, MacOS, ios, WebAssembly๋ฑ ์ ๊ฐ์ข
ํ๋ก์ธ์๊ฐ ๋ค๋ฅธ ํ๊ฒฝ๋ค)๊ฐ ๋ฌ๋ผ๋, LLVM์ด๋ผ๋ ํน์ ์ค๊ฐ ์ฝ๋๊ฐ ์คํ๋ ์ ์๊ฒ ํด์ค๋ค.
*ํ์ง๋ง ํ์ฌ๊น์ง ์ฐ์ฌ์ง ์ปค๋ฎค๋ํฐ์์๋ ๊ฐ์ฅ ๋ฐ์ ๋ ๊ฒ์ด JVM์ด๋ค
1) ์ฝํ๋ฆฐ์ ํจ์ ๊ตฌํ ๋ฐฉ์์ ๋ค์๊ณผ ๊ฐ๋ค!
2) ์ฝํ๋ฆฐ ์ฝ๋๋ฅผ JVM์์์ ์คํํ๊ธฐ ์ํด์, main ๋ฉ์๋๊ฐ ํ์ผ๋ช
์ ๊ธฐ์ค์ผ๋ก ์๋์ผ๋ก ํด๋์ค๋ฅผ ์์ฑํ๋ค.
[[Tools -> Kotlin -> Show Kotlin Bytecode]]
[[Decompile]] ์ ๋ฉํ๋ฐ์ดํฐ ๋ฟ๋ง ์๋๋ผ ์ค์ ๋ก ์ด๋ค javaํ์ผ๋ก ๋ณํ๋์ด JVM์์์ ์ฌ์ฉํ๊ณ ์๋์ง ๋ณด์ฌ์ค๋ค. ์๋ฆฌ๋ฅผ ๋ค ์ ํ์๋ ์๋ค!
์ฌ์ง์์ ๋ณด์ด๋ ๊ฒ๊ณผ ๊ฐ์ด
class๋ก ์ ์๋์ด ์๊ณ , ๊ทธ ์์ ํ๋์ ๋ฉค๋ฒ ๋ฉ์๋๋ก์จ main์ด ์ ์๋์ด ์๋ค.
HelloKotline์ด ์คํธ๋ง ํํ๋ก ์ ์๋์ด, java ํ์ค์ถ๋ ฅ ๋์ด์๋ค.
์ด์ฒ๋ผ java ์ฝ๋๋ณด๋ค ์ฝํ๋ฆฐ ์ฝ๋๊ฐ ํจ์ฌ ๊ฐ๋จํจ์ ์ ์ ์๋ค!
argument๊ฐ ์๋ main:
maina => fun main(args: Array)
๋ฌธ์ ๋ฐฐ์ด ์ธ์๋ฅผ ์ฌ์ฉํ๋ ๋ฉ์ธ ํจ์!
=> ์ธ์๊ฐ ์๋ ์ํ์์ ๊ทธ๋๋ก ์คํํ์ผ๋ ์ค๋ฅ๊ฐ ๋๋ค!
์ธ์๋ ์คํ Configuration์ ๋ฃ์ด์ฃผ์ด์ผ ํ๋ค.
๊ณต๋ฐฑ์ ๊ธฐ์ค์ผ๋ก ๋ค์๊ณผ ๊ฐ์ด ์ธ์๋ฅผ ๋ฃ์ด๋ณด์
**๊ฟํ: Ctrl+D: ์ค๊ฐ ๋ณต์ฌ!!
ํ์์ ๋ฐ๋ผ ์ถ๋ ฅํด๋ณด๋ฉด,
๋ฌธ์์ด ๋ด์ ๋ณ์๋ฅผ ํํํ๊ธฐ ์ํด ${์}๊ณผ ๊ฐ์ด ํํํ๋ค!
-main()์ ์ต์์ ํจ์๋ก ์คํ ์ง์
์ ์ด๋ค.
์๋ฐ์ ๊ฐ์ ๊ฐ์ฒด ์งํฅ ์ธ์ด๋ ํ๋ก๊ทธ๋จ์ ์คํํ๊ธฐ ์ํด ํด๋์ค์ ๊ทธ ์์ main()์ด ํ์ํ๋ค.
์ฝํ๋ฆฐ์ ํด๋์ค ์์ด main()ํจ์ ํ๋๋ก ์คํ ๊ฐ๋ฅํ๋ค.