관리 메뉴

VivaButton

코틀린(Kotlin) 기본 문법2(#5 - if-else, for, while, when, range, iterate, Collections) 본문

IT/코틀린(Kotlin)

코틀린(Kotlin) 기본 문법2(#5 - if-else, for, while, when, range, iterate, Collections)

비바버튼 2021. 3. 15. 17:58
728x90

오늘은 코틀린의 기본 문법 중에서 조건식, 반복문, 컬렉션을 알아보도록 하겠습니다.

 

1. 조건식(if 표현식)

class EtcBasicSyntax{
    //기본 조건식 if else
    fun maxOf(a: Int, b: Int): Int{
        if(a > b) {
            return a
        } else {
            return b
        }
    }

    //코틀린 if 표현식
    fun maxOfSimple(a: Int, b: Int) = if(a > b) a else b
}

maxOf 펑션은 a가 b보다 크면 a를 return하고, 아니면 b를 리턴하는 펑션이며, 

maxOfSimple은 maxOf과 기능은 동일 하지만, 조금 더 간결하게 작성된 코드 스타일 입니다.

 

 

2. for loop(for문)

class EtcBasicSyntax{
    //for loop (items를 문자열에 모두 더하여 return 합니다.)
    fun forLoop(): String{
        val items = listOf("apple", "banana", "kiwifruit") 
        var itemsStr: String = ""

        for(item in items)
            itemsStr += item

        return itemsStr
    }
    
    //for loop 인덱스 포함
    fun forLoopWithIdx(): String{
        val items = listOf("apple", "banana", "kiwifruit")
        var itemsStr: String = ""

        for(idx in items.indices){
            itemsStr += items[idx]
        }

        return itemsStr
    }
}

 

3. while loop(while문)

while문 예시

 

4. when 표현식 

//when 표현식
fun describe(obj: Any): String {
    return when(obj){
        1           -> "One"            //1일때
        "1"         -> "String One"     //Sting type의 1일때
        "Kotlin"    -> "Greeting"       //문자 Kotlin일때
        is Long     -> "Long"           //Long type일때
        !is String  -> "Not a string"   //문자가 아닐때
        else        -> "Unknown"        //그외
    }
}

//when 표현식 (약식)
fun describeRtEq(obj: Any): String =
    when(obj){
        1           -> "One"            //1일때
        "1"         -> "String One"     //Sting type의 1일때
        "Kotlin"    -> "Greeting"       //문자 Kotlin일때
        is Long     -> "Long"           //Long type일때
        !is String  -> "Not a string"   //문자가 아닐때
        else        -> "Unknown"        //그외
    }

위 when문에서 obj의 type이 Any인데 여러 유형의 데이터 타입을 사용하는 변수를 Any타입으로 지정하여 사용 가능합니다.

 

5. Ranges(범위)

//범위(Ranges) : 입력한 x가 1 ~ 10에 포함되면 출력
fun printRanges(x: Int){
    val y = 9

    if(x in 1..y+1)
        println("fits in range : (x : $x, y : $y)")
}

//범위에 속하는지 return : x가 1 ~ 10에 포함되면 true를 반환 합니다.
fun getRangesResult(x: Int): Boolean{
    val y = 9

    return (x in 1..y+1)
}

//범위 반복
fun printIterateRanges(){
    for(x in 1..10) //1 ~ 10 반복
        print(x)

    println()
}

//범위 반복 2칸 점프
fun printIterateStepTwo(){
    for(x in 1..10 step 2)  //1 ~ 10 반복 2칸 점프
        print(x)

    println()
}

//범위 반복 역순 점프
fun printIterateReverse(){
    for(x in 9 downTo 0 step 3) //9 ~ 0 반복 3칸 점프
        print(x)

    println()
}

//숫자가 범위를 벗어났는지 확인
fun printOutOfRanges(x: Int){
    val list = listOf("a", "b", "c")

}

 

6. Collections

//컬렉션 반복문 (Iterate over a collection.)
fun printIterateCollect(){
    val items = listOf("apple", "banana", "kiwifruit")

    for (item in items)
        println(item)
}

//컬렉션에 in 연산자를 사용하여 개체가 포함되어 있는지 확인(Check if a collection contains an object using in operator.)
fun checkObjectInCollection(item: String): Boolean{
    val items = setOf("apple", "banana", "kiwifruit")

    return when (item) {
        in items -> true
        else -> false
    }
}

//람다식을 사용하여 컬렉션 필터링과 매핑(Using lambda expressions to filter and map collections:)
fun getCollectionFilterMapping(keyWord: String): List<String>{
    val fruits = listOf("banana", "avocado", "apple", "kiwifruit")

    return fruits
        .filter{it.startsWith(keyWord)} //a로 시작하는 키워드만 필터링
        .sortedBy{it}   //내림차순 정렬
        .map{it.toUpperCase()}  //대문자 변환
}

//람다식을 사용하여 컬렉션 필터링과 매핑(Using lambda expressions to filter and map collections:)
fun printCollectionFilterMapping(keyWord: String){
    val fruits = listOf("banana", "avocado", "apple", "kiwifruit")
    fruits
        .filter{it.contains(keyWord)}   //a를 포함하는 키워드 필터링
        .sortedByDescending{it} //오름차순 정렬
        .map{it.toUpperCase()}  //대문자 변환
        .forEach{it -> println(it)} //출력
}

실무에서 많이 쓰이는 코드들 입니다.

익숙해 지는데는 조금 걸리겠지만, 아직까지는 딱히 어렵지 않은듯하네요.