๋Œ€์™ธ ํ™œ๋™/๋ถ€์ŠคํŠธ์ฝ”์Šค ์„œํฌํ„ฐ์ฆˆ 3๊ธฐ

[๋ถ€์ŠคํŠธ์ฝ”์Šค] 01. ์ฝ”ํ‹€๋ฆฐ ์†Œ๊ฐœ, ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์น˜

๋…ธ๋ฃจ๋ฃฝ 2021. 1. 29. 20:16

์ฝ”ํ‹€๋ฆฐ์ด๋ž€?

์ฝ”ํ‹€๋ฆฐ์˜ ํŠน์ง•

  1. IDE(Android Studio์˜ ๋ชจ์ฒด)๋กœ ์œ ๋ช…ํ•œ JetBrains์—์„œ ๊ฐœ๋ฐœํ•˜๊ณ  ๋ณด๊ธ‰.
  2. ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•˜๊ณ  ๋‹ค์žฌ๋‹ค๋Šฅํ•˜๋ฉฐ ํ˜ธํ™˜์„ฑ์ด ๋†’๋‹ค.
  3. ๋ฌธ์žฅ ๋์— ์„ธ๋ฏธ์ฝœ๋ก ์€ ์˜ต์…˜์ด๋‹ค. (์•ˆ ๋ถ™์—ฌ๋„ ๋œ๋‹ค.)
  4. Android Studio์—์„œ ์•ˆ๋“œ๋กœ์ด๋“œ ๊ณต์‹ ์–ธ์–ด๋กœ ์ถ”๊ฐ€.
  5. ๋ณ€์ˆ˜๋Š” Nullable(๋„ ๊ฐ’ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)๊ณผ NotNull๋กœ ๋‚˜๋‰˜๋Š”๋ฐ, ๋ณ€์ˆ˜ ์„ ์–ธ ์‹œ '?'๋ฅผ ๋ถ™์—ฌ Nullable๋กœ ๋งŒ๋“ค ์ˆ˜  ์žˆ๋‹ค.
    • Null ๊ฐ’์ด ๊ฐ€๋Šฅ ํ•œ์ง€, ์•ˆ ํ•œ ์ง€ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ.
    • ์˜ˆ์™ธ ์ฒ˜๋ฆฌํ•  ํ•„์š” ์—†๋‹ค.

 

์ฝ”ํ‹€๋ฆฐ์˜ ์šฉ๋„(์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ”Œ๋žซํผ)

  1. Kotlin/JVM
    • ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹  ์ƒ์—์„œ ๋™์ž‘ํ•˜๋Š” ์•ฑ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. → ์•ˆ๋“œ๋กœ์ด๋“œ๋„ ๊ฐ€๋Šฅ!
  2. Kotlin/JS
    • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์— ์˜ํ•ด ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ž‘ํ•˜๋Š” ์•ฑ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
  3. Kotlin/Native
    • LLVM ๊ธฐ๋ฐ˜์˜ ๋„ค์ดํ‹ฐ๋ธŒ ์ปดํŒŒ์ผ์„ ์ง€์›ํ•ด ์—ฌ๋Ÿฌ ํƒ€๊นƒ์˜ ์•ฑ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
    • ARM, x86๋“ฑ ํ•˜๋“œ์›จ์–ด ์•„ํ‚คํ…์ฒ˜์— ์ƒ๊ด€์—†์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋œป!

์šฐ๋ฆฌ๋Š” ์ฃผ๋กœ JVM์—์„œ ๋งŒ๋“ค ์˜ˆ์ •์ด๋‹ค.

 

์ฝ”ํ‹€๋ฆฐ์˜ ์žฅ์ 

  1. ์ž๋ฃŒํ˜•์— ๋Œ€ํ•œ ์˜ค๋ฅ˜๋ฅผ ๋ฏธ๋ฆฌ ์žก์„ ์ˆ˜ ์žˆ๋Š” ์ •์  ์–ธ์–ด(Statically typed)
    • ์ •์  ์–ธ์–ด == ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ฏธ๋ฆฌ ์˜ค๋ฅ˜๋ฅผ ์žก์•„์ฃผ๋Š” ์–ธ์–ด
  2. ๋„ ํฌ์ธํ„ฐ๋กœ ์ธํ•œ ํ”„๋กœ๊ทธ๋žจ์˜ ์ค‘๋‹จ์„ ์˜ˆ๋ฐฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    • NPE(Null Pointer Exception)์—์„œ ์ž์œ ๋กญ๋‹ค.
  3. ๋ฐ์ดํ„ฐํ˜• ์„ ์–ธ ์‹œ ๋„ ๊ฐ€๋Šฅํ•œ ํ˜•์‹๊ณผ ๋ถˆ๊ฐ€๋Šฅํ•œ ํ˜•์‹ ์ง€์›.
  4. ์ž๋ฐ”์™€ ์™„๋ฒฝํ•˜๊ฒŒ ์ƒํ˜ธ์šด์˜์ด ๊ฐ€๋Šฅํ•˜๋‹ค!!๐Ÿ‘
  5. ์•„์ฃผ ๊ฐ„๊ฒฐํ•˜๊ณ  ํšจ์œจ์ .
  6. ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๋ชจ๋‘ ๊ฐ€๋Šฅ.
  7. ์„ธ๋ฏธ์ฝœ๋ก ์„ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค. (๋„˜๋‚˜ ํŽธํ•œ ๊ฒƒ..๐Ÿฅฐ)

 

๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์น˜

์ž๋ฐ” JDK

์ฝ”ํ‹€๋ฆฐ์„ JVM์—์„œ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”.

๊ธฐ์กด ์ž๋ฐ”์™€ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ์ž๋ฐ” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

Java๋ผ๋Š” ์–ธ์–ด๋Š” ๋ฌด๋ฃŒ์ง€๋งŒ, ๊ทธ  ์•ˆ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋ฌด๋ฃŒ๊ฐ€ ์•„๋‹ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ‘‰ ์ œํ•œ ์—†์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ Open JDK ๊ธฐ๋ฐ˜์ธ Zulu ๋ฐฐํฌํŒ์„ ์‚ฌ์šฉ!

 

www.azul.com/downloads/azure-only/zulu/?version=java-8-lts&architecture=x86-64-bit&package=jdk

www.jetbrains.com/ko-kr/idea/download/

 

๋‹ค์šด๋กœ๋“œ IntelliJ IDEA: ์šฐ์ˆ˜์„ฑ๊ณผ ์ธ์ฒด ๊ณตํ•™์ด ๋‹ด๊ธด JetBrains Java IDE

์ตœ์‹  ๋ฒ„์ „ ๋‹ค์šด๋กœ๋“œ: IntelliJ IDEA (Windows, macOS, Linux)

www.jetbrains.com

์œ„์˜ ๋‘ ๋งํฌ๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœํ™˜๊ฒฝ์„ ์„ค์น˜ํ•ด์ค์‹œ๋‹ค.

(+) ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ • ์žŠ์ง€ ๋ง๊ธฐ!!!

 

ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

์ด ๋ถ€๋ถ„์€ ๊ฐ•์˜์™€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค!!!!!!

Intell J๊ฐ€ 2020๋…„ ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜์–ด์„œ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค,,,๐Ÿ’ฆ

Java๋กœ ๋“ค์–ด๊ฐ€ ์ฃผ์„ธ์š”. ๋ฐ‘์— Kotlin ใ„ดใ„ด....

New Project - Java - Kotlin/JVM

 

JDK ์ œ๋Œ€๋กœ ์„ค์ •ํ•ด ์ค์‹œ๋‹น

Project SDK์— JAVA_HOME์˜ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์„ค์ •ํ•ด์คฌ๋˜ Zulu์˜ ๊ฒฝ๋กœ๋ฅผ ์ถ”๊ฐ€ํ•ด์ค๋‹ˆ๋‹ค.

JDK๊ฐ€ 1.8๋กœ ์ž˜ ๋ณ€๊ฒฝ๋๋Š”์ง€ ํ™•์ธํ•˜๊ณ , Project์˜ ์ด๋ฆ„์„ ์„ค์ •ํ•ด์ฃผ๋ฉด ๋!

 

HelloKotlin ํŒŒ์ผ ์ƒ์„ฑ

Alt + Insert: src ํด๋” ํ•˜๋ถ€์— ๊ฐ์ข… ํŒŒ์ผ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋‹จ์ถ•ํ‚ค.

HelloKotlin.kt ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด ์ค์‹œ๋‹ค.

์ฝ”ํ‹€๋ฆฐ์˜ ํ™•์žฅ์ž๋Š” kt (์Œ..?)

 

๐Ÿฏ ๊ฟ€ํŒ

๋”๋ณด๊ธฐ
  • main + Enter → mainํ•จ์ˆ˜ ์ž๋™ ์ž‘์„ฑ
  • pln + Enter  println ์ž๋™ ์ž‘์„ฑ

 

fun main() { // ์‹คํ–‰ ์ง„์ž…์ 
    println("Hello Kotlin!") // ์ถœ๋ ฅ๋ฌธ
}

์ถœ๋ ฅ ์™„๋ฃŒ!

์ฒซ ์ฝ”ํ‹€๋ฆฐ ํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑ ์™„๋ฃŒ! ์ง์ง์ง๐Ÿ‘๐Ÿ‘

 

Settings

File-Settings-Editor-General๋กœ ๋“ค์–ด๊ฐ€์„œ 

Ctrl + ๋งˆ์šฐ์Šค ํœ ์„ ์›€์ง์ด๋ฉด ํฐํŠธ ์‚ฌ์ด์ฆˆ ํฌ๊ธฐ๊ฐ€ ๋ฐ”๋€Œ๋Š” ๊ฑธ ์ฒดํฌํ•˜์ž. (ํŽธ๋ฆฌํ•˜๋‹ค!)

 

๋‹จ์ถ•ํ‚ค

  • Messages: Alt + 0 (Cmd + 0)
  • Project: Alt + 1 (Cmd + 1)
  • Favorites: Alt + 2 (Cmd + 2)
  • Run: Alt + 4 (Cmd + 4)
  • Debug: Alt + 5 (Cmd + 5)
  • TODO: Alt + 6 (Cmd + 6)
  • Structure: Alt + 7 (Cmd + 7)
  • Terminal: Alt + F12 (Option + F12)

 

์ฝ”ํ‹€๋ฆฐ main ํ•จ์ˆ˜

main ํ•จ์ˆ˜

์ฝ”ํ‹€๋ฆฐ์˜ main() ํ•จ์ˆ˜ = ์ตœ์ƒ์œ„ ํ•จ์ˆ˜, ์‹คํ–‰ ์ง„์ž…์ .

 

Java์—์„œ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋ ค๋ฉด ์ตœ์†Œ 1๊ฐœ์˜ ํด๋ž˜์Šค์™€ ๊ทธ ์•ˆ์˜ main() ํ•จ์ˆ˜๊ฐ€ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

BUT Kotlin์€ main() ๋ฉ”์„œ๋“œ๊ฐ€ JVM์ƒ์—์„œ ์‹คํ–‰๋  ๋•Œ ์ž๋™์œผ๋กœ ํด๋ž˜์Šค๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.

 

Tools - Kotlin - Show Kotlin ByteCode - Decomplie์„ ์‹คํ–‰.

 

๋„ˆ๋ฌด๋‚˜ ๋ฐ˜๊ฐ‘๊ณ  ์ต์ˆ™ํ•œ!!!!! Java์ฝ”๋“œ๊ฐ€ ๋ณด์ธ๋‹ค.๐Ÿ˜Š

์ด๋ ‡๊ฒŒ ๋ณ€ํ™˜๋ผ์„œ ๋™์ž‘๋˜๋Š”๊ตฌ๋‚˜! ๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ์ƒˆ์‚ผ ์ฝ”ํ‹€๋ฆฐ์ด ์—„์ฒญ ๊ฐ„๊ฒฐํ•œ ์ฝ”๋“œ์ธ ๊ฒƒ์„ ๊นจ๋‹ซ๋Š”๋‹ค.

 

maina ํ•จ์ˆ˜

ํ”„๋กœ๊ทธ๋žจ ์™ธ๋ถ€์—์„œ ์ธ์ž๋ฅผ ๋ฐ›์•„๋“ค์ด๋Š” main ํ•จ์ˆ˜.

fun main(args: Array<String>) {
    println(args[0])
    println(args[1])
    println(args[2])
    println(args[3])
}

์ด ์ฝ”๋“œ๋ฅผ ์‹คํ–‰์‹œ์ผœ๋ณด์ž.

 

๐Ÿฏ ๊ฟ€ํŒ

๋”๋ณด๊ธฐ

Crtl + D: ์ค„ ๋ณต์‚ฌ

 

Edit Configurations๋กœ ใ„ฑใ„ฑ

 

Program arguments์— ์ธ์ž 4๊ฐœ๋ฅผ ๋„ฃ์–ด์คŒ.

์ง !

fun main(args: Array<String>) {
    println("args[0] = ${args[0]}")
}

๋ฌธ์ž์—ด ๋‚ด ๋ณ€์ˆ˜๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ${์‹} ๊ณผ ๊ฐ™์ด ํ‘œํ˜„.

๊ตฟ!

 

์ถœ์ฒ˜

๋ณธ ํฌ์ŠคํŒ…์€ ๋ถ€์ŠคํŠธ์ฝ”์Šค ์„œํฌํ„ฐ์ฆˆ 3๊ธฐ ํ™œ๋™์œผ๋กœ์„œ

'์ฝ”ํ‹€๋ฆฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ณธ 1' ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

www.boostcourse.org/mo132

 

์ฝ”ํ‹€๋ฆฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ณธ 1

๋ถ€์ŠคํŠธ์ฝ”์Šค ๋ฌด๋ฃŒ ๊ฐ•์˜

www.boostcourse.org