์˜ˆ์ „์— ์ทจ๋ฏธ๋กœ ์•ˆ๋“œ๋กœ์ด๋“œ ๊ณต๋ถ€ํ•ด์„œ ์ž๋ฐ”๋กœ ์–ดํ”Œํ•˜๋‚˜ ๋งŒ๋“ค์–ด ์˜ฌ๋ฆฐ ์ ์ด ์žˆ์—ˆ๋‹ค.

๋„ˆ๋ฌด ์—…๋ฐ์ดํŠธ๋ฅผ ์•ˆํ•ด์„œ ๊ตฌ๊ธ€์ •์ฑ…์— ์œ„๋ฐฐ๋˜์–ด ํ•ด๋‹น ์–ดํ”Œ์ด ๋‚ด๋ ค๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ ๊ทธ๊ฒƒ๋„ ๋ชจ๋ฅด๊ณ  ๋†”๋‘๊ณ  ์žˆ์—ˆ๋‹ค.

์ตœ๊ทผ์— ์ˆ˜์ •ํ•ด์„œ ๋‹ค์‹œ ์˜ฌ๋ฆฌ๋Š” ์ž‘์—…์„ ํ–ˆ๋Š”๋ฐ, ์ถ”๊ฐ€๋กœ ๊ฐœ๋ฐœํ•˜๋Š” 1์ธ ํ”„๋กœ์ ํŠธ๋“ค์€ ์ฝ”ํ‹€๋ฆฐ์œผ๋กœ ํ•ด๋ณด๊ณ  ์‹ถ์€ ๋งˆ์Œ์ด ์ƒ๊ฒผ๋‹ค.

์•„์ง ์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐœ๋ฐœ์˜ ๋ฉ”์ธ์–ธ์–ด๋Š” ์ž๋ฐ”์ธ ๊ฒƒ ๊ฐ™๊ธด ํ•œ๋ฐ, ์ฝ”ํ‹€๋ฆฐ์€ IntelliJ IDE๋ฅผ ๊ฐœ๋ฐœํ•œ JetBrain์‚ฌ์—์„œ ์ž๋ฐ”์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๊ฐœ๋ฐœํ•œ ์–ธ์–ด๋กœ ์ž๋ฐ”์ฒ˜๋Ÿผ JVM์œ„์—์„œ ๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ๊ณ , ์•ˆ๋“œ๋กœ์ด๋“œ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€๋„ ์‰ฝ๊ฒŒ ์—ฐ๋™ํ•  ์ˆ˜ ์žˆ๊ณ  ๋„ค์ดํ‹ฐ๋ธŒ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ๋„๋ก ๊ฐœ๋ฐœ๋˜์—ˆ๋‹ค๊ณ  ํ•œ๋‹ค. (๋” ์ž์„ธํ•œ ์ •๋ณด๋Š” ์ฝ”ํ‹€๋ฆฐ ๊ณต์‹์‚ฌ์ดํŠธ FAQ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.)

 

๋‚˜๋Š” ์šฐ์„  ์ž๋ฐ” ๊ฐœ๋ฐœ์ž์ด๊ธฐ ๋•Œ๋ฌธ์— Kotlin/JVM ์œผ๋กœ ์ฝ”ํ‹€๋ฆฐ์„ ์—ฐ์Šตํ•ด๋ณด๋ ค ํ•œ๋‹ค. (Kotlin/JS๋ฅผ ์ด์šฉํ•˜๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๊ฐœ๋ฐœ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค)

์ฝ”ํ‹€๋ฆฐ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค์–ด์„œ Hello World ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ์˜ˆ์ œ๋Š” ์ฝ”ํ‹€๋ฆฐ ๊ณต์‹์‚ฌ์ดํŠธ์—์„œ ํ™•์ธํ•˜๊ธฐ ๋ฐ”๋ž€๋‹ค.

 

๊ทธ ์ฒซ ๋ฒˆ์งธ ์‹œ๊ฐ„์œผ๋กœ ์ฝ”ํ‹€๋ฆฐ ํŒŒ์ผ์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ƒ๊ฒผ๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ๋ณ€์ˆ˜ ์ •์˜๋Š” ์–ด๋–ป๊ฒŒ ํ•˜๋Š”์ง€ ์ž๋ฐ”์™€ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ์ง€ ์‚ดํŽด๋ณด์•˜๋‹ค.

 

1. ์ฝ”ํ‹€๋ฆฐ ํŒŒ์ผ ๊ตฌ์กฐ

์ฝ”ํ‹€๋ฆฐ ํ—ฌ๋กœ์›”๋“œ

- ์ฝ”ํ‹€๋ฆฐ ํŒŒ์ผ์€ .kt ํ™•์žฅ์ž๋ฅผ ๊ฐ–๋Š”๋‹ค.

- ์ž๋ฐ”๋Š” class ๋ธ”๋Ÿญ ๋‚ด์— main๋ฉ”์„œ๋“œ๊ฐ€ ์กด์žฌํ•˜์ง€๋งŒ ์ฝ”ํ‹€๋ฆฐ์˜ ๋ฉ”์ธํ•จ์ˆ˜๋Š” ํด๋ž˜์Šค ๋ธ”๋Ÿญ๋‚ด์— ์กด์žฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค.

- package ์„ ์–ธ๋ถ€ ๋ฐ import ๋ฌธ์€ ์ž๋ฐ”์™€ ๋™์ผํ•˜๋‹ค.

- ์ฝ”ํ‹€๋ฆฐ์—์„œ ํ•จ์ˆ˜๋Š” function์˜ ์ถ•์•ฝ์–ด์ธ fun ์œผ๋กœ ์‹œ์ž‘ํ•˜๊ณ  ๋ฆฌํ„ดํƒ€์ž…์€ ํ•จ์ˆ˜๋ช…() ๋’ค์ชฝ์— ์œ„์น˜ํ•œ๋‹ค.

- ์ฝ”ํ‹€๋ฆฐ์—์„œ๋Š” statement๋ฅผ ์„ธ๋ฏธ์ฝœ๋ก ์œผ๋กœ ์ข…๋ฃŒํ•˜์ง€ ์•Š๋Š”๋‹ค.

2. ๋ณ€์ˆ˜์˜ ํƒ€์ž…, ์ •์˜ ๋ฐ ์ดˆ๊ธฐํ™”

์ฝ”ํ‹€๋ฆฐ์—์„œ ๋ณ€์ˆ˜์˜ ํƒ€์ž…์€ ์ž๋ฐ”์˜ ๊ทธ๊ฒƒ๊ณผ ๋™์ผํ•˜์ง€๋งŒ ์ •์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋‹ค๋ฅด๋‹ค.

๋ฐ์ดํ„ฐ ํƒ€์ž…์— ๊ด€๊ณ„์—†์ด ์ƒ์ˆ˜๋Š” val, ๋ณ€์ˆ˜๋Š” var๋กœ ์„ ์–ธํ•œ๋‹ค.

๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ๋ช…์‹œํ•ด์ฃผ์ง€ ์•Š์•„๋„ ํ• ๋‹นํ•ด์ฃผ๋Š” ๊ฐ’์— ๋”ฐ๋ผ ์ž๋™์œผ๋กœ ๊ฒฐ์ •๋œ๋‹ค.

์ฝ”ํ‹€๋ฆฐ์—์„œ๋Š” val์„ read-only variable๋กœ ์„ค๋ช…์„ ํ•œ๋‹ค.

์ผ๋ฐ˜์ ์ธ ๋ณ€์ˆ˜๋Š” var๋ฅผ ์ด์šฉํ•˜๊ณ  read-only ๋ณ€์ˆ˜๋Š” val์„ ์‚ฌ์šฉํ•œ๋‹ค

val์€ ์ž๋ฐ”์˜ final๊ณผ ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ๊ฐ’์„ ์žฌํ• ๋‹น ํ•˜๋ คํ•  ๊ฒฝ์šฐ ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

val ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜์— ๋‹ค๋ฅธ ๊ฐ’์„ ์žฌํ• ๋‹น ํ•˜๋ คํ•  ๊ฒฝ์šฐ ์ปดํŒŒ์ผ ์˜ค๋ฅ˜ ๋ฐœ์ƒ

var ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธํ•œ ๋ณ€์ˆ˜์˜ ๊ฒฝ์šฐ ํƒ€์ž…์ด ํ•œ๋ฒˆ ์ •ํ•ด์ง€๋ฉด ๋‹ค๋ฅธ ํƒ€์ž…์„ ํ• ๋‹นํ•  ์ˆ˜ ์—†๋‹ค.

ํƒ€์ž…์ด ์ •ํ•ด์ง„(Int) var ํ‚ค์›Œ๋“œ๋กœ ์ •์˜ํ•œ ๋ณ€์ˆ˜์— ๋‹ค๋ฅธ ํƒ€์ž…(String)์˜ ๊ฐ’ ์žฌํ• ๋‹น ์‹œ๋„ ์‹œ ์ปดํŒŒ์ผ ์˜ค๋ฅ˜ ๋ฐœ์ƒ

 

2-1. ๋ณ€์ˆ˜ ์ •์˜

์ฝ”ํ‹€๋ฆฐ์—์„œ ๋ณ€์ˆ˜์˜ ์ •์˜(define)์€ ์•„๋ž˜์™€ ๊ฐ™์ด ํ•œ๋‹ค. ์ดˆ๊ธฐํ™”๋ฅผ ํ•˜์ง€ ์•Š๊ณ  ์ •์˜๋งŒ ํ•  ๊ฒฝ์šฐ ํƒ€์ž…์„ ํ•„์ˆ˜๋กœ ๋ช…์‹œํ•ด์ค˜์•ผ ํ•œ๋‹ค.

    fun main() {
        var i:Int
        var s:String
        var l:Long
        var f:Float
        var d:Double
    }

 

2-2. ๋ณ€์ˆ˜ ์ดˆ๊ธฐํ™”

๋ณ€์ˆ˜์˜ ์ดˆ๊ธฐํ™”๋Š” ๊ฐ ๋ณ€์ˆ˜์˜ ํƒ€์ž…์— ๋งž๋Š” ๊ฐ’์„ ํ• ๋‹นํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

    fun main() {
        var i:Int
        var s:String
        var l:Long
        var f:Float
        var d:Double

        i = 10
        s = "string"
        l = 10L
        f = 10.2F
        d = 10.5

        var v = "string variable"	// String ํƒ€์ž… ๋ณ€์ˆ˜
        var n = 123		// Int ํƒ€์ž… ๋ณ€์ˆ˜
    }

 

 

3. ํ•จ์ˆ˜ ์ •์˜

๋‘ ๊ฐœ์˜ Intํƒ€์ž… ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ „๋‹ฌ๋ฐ›์•„ Int ํƒ€์ž…์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜

    fun sum(a: Int, b: Int): Int { return a + b}

 

์ง์ ‘ ๊ฐ’์„ ํ• ๋‹นํ•ด์ฃผ๋Š” ํ•จ์ˆ˜ (์œ„ ํ•จ์ˆ˜์™€ ๋™์ผํ•œ ํ•จ์ˆ˜์ด๋‹ค)

    fun sum(a: Int, b: Int) = a + b

 

๋ฆฌํ„ด๊ฐ’์ด ์—†๋Š” ํ•จ์ˆ˜๋Š” Unit (์ž๋ฐ”์˜ void) ์œผ๋กœ ์ •์˜

    fun printSum(a: Int, b: Int): Unit { println("sum of $a and $b is ${a + b}")}

 

Unit ๋ฆฌํ„ดํƒ€์ž…์€ ์•ˆ์จ์ค˜๋„ ๋œ๋‹ค.

    fun printSum(a: Int, b: Int) { println("sum of $a and $b is ${a + b}")}

 

4. ์ŠคํŠธ๋ง ํ…œํ”Œ๋ฆฟ

    var a = 1
    // simple name in template:
    val s1 = "a is $a" 

    a = 2
    // arbitrary expression in template:
    val s2 = "${s1.replace("is", "was")}, but now is $a"

์ž๋ฐ”์—์„œ String ํด๋ž˜์Šค๊ฐ€ ๊ฐ–๊ณ ์žˆ๋Š” format ๋ฉ”์„œ๋“œ์™€ ์œ ์‚ฌํ•œ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ๊ฒƒ์œผ๋กœ String์˜ ๋‚ด์šฉ์ด ๊ฐ€๋ณ€์ ์ผ ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

5. ์กฐ๊ฑด๋ฌธ

์กฐ๊ฑด๋ฌธ ์‚ฌ์šฉ๋ฒ•์€ ์ž๋ฐ”์™€ ๋‹ค๋ฅผ๊ฒŒ ์—†๋‹ค.

    fun maxOf(a: Int, b: Int): Int {
        if (a > b) {
            return a
        } else {
            return b
        }
    }

ํ•˜์ง€๋งŒ ์ฝ”ํ‹€๋ฆฐ์—์„œ๋Š” if๋ฌธ์„ ํ•˜๋‚˜์˜ ํ‘œํ˜„์‹์œผ๋กœ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์ ์ด ๋‹ค๋ฅด๋‹ค.

    fun maxOf(a: Int, b: Int) = if (a > b) a else b

if๋ฌธ์˜ ๊ฒฐ๊ณผ๊ฐ’์ด maxOfํ•จ์ˆ˜์˜ ๋ฆฌํ„ด๊ฐ’์ด๋ผ๊ณ  ์ •์˜ํ•œ ๊ฒƒ์œผ๋กœ, ๋ฐ”๋กœ ์œ„์— maxOfํ•จ์ˆ˜์™€ ๋™์ผํ•œ ํ•จ์ˆ˜๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

6. Null

์ฝ”ํ‹€๋ฆฐ์—์„œ ๋ฐ˜ํ™˜๊ฐ’์ด nullable์ธ ๊ฒฝ์šฐ ์•„๋ž˜์™€ ๊ฐ™์ด ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

    fun parseInt(str: String): Int? {
        // ๋ฆฌํ„ดํƒ€์ž…์ด ๊ธฐ๋ณธ์ ์œผ๋กœ Int์ด๋‚˜ null์ผ ์ˆ˜๋„ ์žˆ๋Š” ํ•จ์ˆ˜
    }

๊ทธ๋ฆฌ๊ณ  ์œ„ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๋ณด๋ฉด.

    fun printProduct(arg1: String, arg2: String) {
        val x = parseInt(arg1)
        val y = parseInt(arg2)

        // ์—ฌ๊ธฐ์„œ `x * y` ์—ฐ์‚ฐ์„ ๋ฐ”๋กœ ํ•ด๋ฒ„๋ฆฌ๋ฉด x๋˜๋Š” y๊ฐ€ null์ผ ๊ฒฝ์šฐ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
        // ๋”ฐ๋ผ์„œ null ์ฒดํฌ๋ฅผ ๋จผ์ € ํ•ด์•ผํ•œ๋‹ค.
        if (x != null && y != null) {
            // null ์ฒดํฌ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด x ์™€ y ๋Š” ์ž๋™์œผ๋กœ non-nullable๋กœ ์บ์ŠคํŒ… ๋œ๋‹ค 
            // (์ฝ”ํ‹€๋ฆฐ ๊ณต์‹ ๋ฌธ์„œ์— ์ด๋ ‡๊ฒŒ ๋‚˜์™€์žˆ๋Š”๋ฐ non-nullable๋กœ ์บ์ŠคํŒ… ๋œ๋‹ค๋ผ๋Š”๊ฒŒ ์•„์ง ์ž˜ ์ดํ•ด๋Š” ์•ˆ๋œ๋‹ค. ๊ทธ๋Ÿฐ ํƒ€์ž…์ด ์žˆ๋‹ค๋Š”๊ฑด์ง€..)
            println(x * y)
        }
        else {
            println("'$arg1' or '$arg2' is not a number")
        }    
    }

์ด๋ ‡๊ฒŒ null ์ฒดํฌ๋ฅผ ํ•˜๊ณ ๋‚˜๋ฉด non-nullable๋กœ ์บ์ŠคํŒ…์ด ๋œ๋‹ค๊ณ  ํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ด๋Š” ์ผ๋ฐ˜ ํƒ€์ž…์—์„œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ด๋‹ค.

 

7. Type Check and Automatic Casts

    fun getStringLength(obj: Any): Int? {
        if (obj is String) {
            // ์ด ๋ธ”๋Ÿญ ๋‚ด์—์„œ `obj`๋Š” ์ž๋™์œผ๋กœ String ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜๋˜๋ฉฐ String์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅ
            return obj.length
        }

        // `obj`๋Š” ํƒ€์ž… ์ฒดํฌ ๋ธ”๋Ÿญ ๋ฐ–์—์„œ๋Š” ์—ฌ์ „ํžˆ ์–ด๋–ค ํƒ€์ž…๋„ ๋  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ์ด๋‹ค
        return null
    }

ํƒ€์ž… ์ฒดํฌ ์‹œ ๋ฐ˜๋Œ€๋กœ(not์„ ์ด์šฉ) ํ•  ๊ฒฝ์šฐ 

    fun getStringLength(obj: Any): Int? {
        if (obj !is String) return null

        // ์œ„ if๋ฌธ์—์„œ `obj`๊ฐ€ String์ด ์•„๋‹ˆ๋ฉด null์„ ๋ฆฌํ„ดํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์—ฌ๊ธฐ๋กœ ๋‚ด๋ ค์™”๋‹ค๋ฉด ๋ฌด์กฐ๊ฑด String์ผ ์ˆ˜ ๋ฐ–์— ์—†๋‹ค.
        // ๋”ฐ๋ผ์„œ ์ž๋™์œผ๋กœ String ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜๋˜๋ฉฐ, String์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
        return obj.length
    }

๋˜๋Š” ์ด๋ ‡๊ฒŒ๋„ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค.

    fun getStringLength(obj: Any): Int? {
        // `&&`์—ฐ์‚ฐ์˜ ์˜ค๋ฅธ์ชฝ์—์„œ๋Š” obj๊ฐ€ String์ด๋ผ๋Š” ๊ฒƒ์„ ํ™•์ธํ•œ ๋’ค์ด๋ฏ€๋กœ,
        // String ์œผ๋กœ ์ž๋™ ํ˜•๋ณ€ํ™˜๋˜์–ด String ์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค
        if (obj is String && obj.length > 0) {
            return obj.length
        }

        return null
    }

 

8. For-Loop, While-Loop

loop๋Š” ์–ด๋Š ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋‚˜ ๋‹ค ๋น„์Šทํ•˜๋‹ค. ์ฝ”ํ‹€๋ฆฐ์—์„œ๋„ ์ž๋ฐ”์˜ foreach๋ฌธ ์ฒ˜๋Ÿผ for-loop๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

    val items = listOf("apple", "banana", "kiwifruit")
    for (item in items) {
        println(item)
    }

์ธ๋ฑ์Šค ์ •๋ณด๋ฅผ ์ด์šฉํ•ด์•ผ ๊ฒฝ์šฐ ์•„๋ž˜์ฒ˜๋Ÿผ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค.

    val items = listOf("apple", "banana", "kiwifruit")
    for (index in items.indices) {
        println("item at $index is ${items[index]}")
    }

while-loop๋Š” ์•„๋ž˜์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

    val items = listOf("apple", "banana", "kiwifruit")
    var index = 0
    while (index < items.size) {
        println("item at $index is ${items[index]}")
        index++
    }

 

9. when ํ‘œํ˜„์‹

when expression์€ ์ž๋ฐ”์˜ switch-case๋ฌธ๊ณผ ์œ ์‚ฌํ•œ๋ฐ, ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๋งž๊ฒŒ ๋ณ€ํ˜•์‹œ์ผœ๋†“์€ ๊ฒƒ ๊ฐ™๋‹ค

    fun describe(obj: Any): String =
        when (obj) {
            1          -> "One"
            "Hello"    -> "Greeting"
            is Long    -> "Long"
            !is String -> "Not a string"
            else       -> "Unknown"
        }

 

10. Range (๋ฒ”์œ„)

์ž๋ฐ”์—์„œ๋Š” loop๋ฅผ ๋Œ๋ฆด ๋•Œ ์ธ๋ฑ์Šค๋ฅผ ์ด์šฉํ•ด์„œ ์•„๋ž˜์ฒ˜๋Ÿผ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค

    for (int i = 0; i < x; i++) {
        // ...
    }

๊ทธ๋ฆฌ๊ณ  ์ด๋ฅผ ์ฝ”ํ‹€๋ฆฐ์œผ๋กœ ์˜ฎ๊ธฐ๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค

    for (z in 1..10) {
        println(z)
    }

๊ทธ๋Ÿผ ๋งŒ์•ฝ ๋งค loop์‹œ๋งˆ๋‹ค i๊ฐ’์˜ ์ฆ๋ถ„์„ i++๊ฐ€ ์•„๋‹ˆ๋ผ i=i+2 ์ฒ˜๋Ÿผ ์จ์•ผํ•œ๋‹ค๋ฉด??? ์–ด๋–ป๊ฒŒ ์“ธ ์ˆ˜ ์žˆ์„๊นŒ?

    for (x in 1..10 step 2) {
    	// 1๋ถ€ํ„ฐ 10๊นŒ์ง€ 2์”ฉ ์ฆ๊ฐ€์‹œํ‚ค๋ฉด์„œ ์ถœ๋ ฅ
        // ๊ฒฐ๊ณผ: 1~10 ์ค‘์—์„œ ํ™€์ˆ˜ ์ถœ๋ ฅ => 13579
        print(x)
    }
    println()
    for (x in 9 downTo 0 step 3) {
    	// ํฐ ์ˆซ์ž์—์„œ ์ž‘์€ ์ˆซ์ž๋กœ ๋‚ด๋ ค๊ฐ€๋ฉด์„œ loop๋ฅผ ๋„๋Š” ์ผ€์ด์Šค์—์„œ๋Š” downTo ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค
        // ๊ฒฐ๊ณผ: 9๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ 3์”ฉ ๋‚ด๋ ค๊ฐ€๋ฉด์„œ x๊ฐ€ 0๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์„ ๋•Œ ๊นŒ์ง€ ์ˆซ์ž ์ถœ๋ ฅ => 9630
        print(x)
    }

์ด๋ ‡๊ฒŒ ๋’ค์— step ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ์–ผ๋งˆ์”ฉ ์ฆ๊ฐ€์‹œํ‚ฌ ๊ฒƒ์ธ์ง€๋ฅผ ์จ์ฃผ๋ฉด ๋œ๋‹ค.

 

๋˜ํ•œ ์ธ๋ฑ์Šค๊ฐ€ ํŠน์ • ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚ฌ๋Š”์ง€๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ! ์—ฐ์‚ฐ์ž๋ฅผ in๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค

    val list = listOf("a", "b", "c")

    if (-1 !in 0..list.lastIndex) {
        println("-1 is out of range")
    }
    if (list.size !in list.indices) {
        println("list size is out of valid list indices range, too")
    }

 

 

 

 

referene: ์ฝ”ํ‹€๋ฆฐ ๊ณต์‹๋ฌธ์„œ - ๊ธฐ๋ณธ๋ฌธ๋ฒ•

 

Basic Syntax - Kotlin Programming Language

 

kotlinlang.org