ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2. 코틀린에서 코드를 제어하는 방법
    Kotlin/자바 개발자를 위한 코틀린 입문 2023. 7. 6. 14:26

    5. 코틀린에서 제어문을 다루는 방법

    1. if문

    - Java와 동일

    2. Expression과 Statement

    - Java에서 if-else는 Statement이지만, Kotlin에서는 Expression 이다.

        ㆍStatement : 프로그램의 문장, 하나의 값으로 도출되지 않는다.

        ㆍExpression : 하나의 값으로 도출되는 문장

     

    - java : if 문을 하나의 값으로 취급하지 않는다. - Statement

    - java : 삼항 연산자는 하나의 값으로 취급한다. - Expresstion 이면서 Statement

     

    - Kotlin 에서는 if-else를 expression으로 사용할 수 있기 때문에 3항 연산자가 없다.

     

    - 간단한 TIP

        ㆍ어떠한 값이 특정 범위에 포함되어 있는지, 포함되어 있지 않은지

    // java
    if (0 <= score && score <= 100) {
    // kotlin
    if (score in 0..100) {

     

    3. switch와 when

    // kotlin
    when (값) {
        조건부 -> 어떠한 구문
        조건부 -> 어떠한 구문
        else -> 어떠한 구문
    }

     

    - 조건부에는 어떠한 expression이라도 들어갈 수 있다. (ex. is Type)

    fun startsWithA(obj: Any): Boolean {
        return when (obj) {
            is String -> obj.startsWith("A")    // smart cast
            else -> false
        }
    }

     

    - 여러개의 조건을 동시에 검사할 수 있다 (, 로 구분)

    fun judgeNumber(number: Int) {
        when (number) {
            1, 0, -1 -> println("어디서 많이 본 숫자이다.")
            else -> println("1, 0, -1이 아닙니다.")
        }
    }

     

    - 값이 없을 수도 있다 - early return 처럼 동작

    fun judgeNumber2(number: Int) {
        when {
            number == 0 -> println("주어진 숫자는 0입니다.")
            number % 2 == 0 -> println("주어진 숫자는 짝수입니다.")
            else -> println("주어진 숫자는 홀수 입니다.")
        }
    }

     

    - when 은 Enum Class 혹은 Sealed Class 와 함께 사용할 경우, 더욱더 진가를 발휘한다.

     

    정리

    - if / if - else / if - else if - else 모두 Java와 문법이 동일하다

    - 단 Kotlin에서는 Expression으로 취급된다.

        ㆍ때문에 Kotlin에서는 삼항 연산자가 없다.

    - Java의 switch는 Kotlin에서 when으로 대체되었고, when은 더 강력한 기능을 갖는다.

     

    6. 코틀린에서 반복문을 다루는 방법

    1. for-each문

    // java
    List<Long> numbers = Arrays.asList(1L, 2L, 3L);
    for (long number : numbers) {
        System.out.println(number);
    }
    // kotlin
    val numbers = listOf(1L, 2L, 3L)
    for (number in numbers) {
        println(number)
    }

     

    2. 전통적인 for 문

    // java
    // 2.
    for(int i = 1; i <= 3; i++) {
        System.out.println(i);
    }
    for(int i = 3; i >= 1; i--) {
        System.out.println(i);
    }
    
    // 3.
    for (int i = 1; i <= 5; i += 2) {
        System.out.println(i);
    }
    // kotlin
    // 2.
    for (i in 1..3) {
        println(i)
    }
    for (i in 3 downTo 1) {
        println(i)
    }
    
    // 3.
    for (i in 1..5 step 2) {
        println(i);
    }

     

    3. Progression 과 Range

    - .. 연산자 : 범위를 만들어 내는 연산자

        ㆍ1..3 : 1부터 3의 범위

        ㆍ3 downTo 1 : 시작값 3, 끝값 1, 공차가 -1인 등차수열

        ㆍ1..5 step 2 : 시작값 1, 끝값 5, 공차가 2인 등차수열

    - downTo 와 step도 함수이다! (중위 호출 함수)

        ㆍ변수.함수이름(argument) 대신 변수 함수이름 argument

     

    - 한 줄요약 : Kotlin에서 전통적인 for문은 등차수열을 이용한다!

     

    4. while 문

    - while 문과 do-while문은 java와 같다.

     

    정리

    - for each 문에서 Java는 : Kotlin은 in을 사용한다.

    - 전통적인 for문에서 Kotlin은 등차수열과 in을 사용한다.

    - 그 외 for문 문법은 모두 동일하다

    - while 문과 do while 문은 동일하다.

     

    7. 코틀린에서 예외를 다루는 방법

    1. try catch finally 구문

    - try catch 구문은 문법적으로 동일하다!

    - try catch finally 역시 동일하다.

     

    2. Checked Exception 과 Unchecked Exception

    - Kotlin에서는 Checked Exception과 Unchecked Exception을 구분하지 않는다.

        ㆍ모두 Unchecked Exception 이다.

    3. try with resources

    - Kotlin에서는 try with resources 구문이 없다.

        ㆍ대신 use 라는 inline 확장함수를 사용해야 한다.

     

    정리

    - try catch finally 구문은 문법적으로 완전히 동일하다.

        ㆍkotlin에서는 try catch 가 expression이다.

    - kotlin에서 모든 예외는 Unchecked Exception 이다.

    - kotlin에서는 try with resources 구문이 없다. 대신 코틀린의 언어적 특징을 활용해 close를 호출해준다.

     

    8. 코틀린에서 함수를 다루는 방법

    1. 함수 선언 문법

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

    - =을 사용하는 경우 반환 타입 생략가능

    - block {} 을 사용하는 경우에는 반환 타입이 Unit이 아니면, 명시적으로 작성해주어야 한다.

    - 함수는 클래스 안에 있을 수도, 파일 최상단에 있을 수도 있다.

        ㆍ또한, 한 파일 안에 여러 함수들이 있을 수도 있다.

     

    2. default parameter

    fun repeat(
        str: String,
        num: Int = 3,
        useNewLine: Boolean = true
    ) {
        for (i in 1..num) {
            if(useNewLine) {
                println(str)
            }else {
                print(str)
            }
        }
    }

    - 밖에서 파라미터를 넣어주지 않으면 기본값을 사용하자!

     

    repeat("Hello World", useNewLine = false)

    - 매개변수 이름을 통해 직접 지정

        ㆍ지정되지 않은 매개변수는 기본값 사용

     

    3. named argument (parameter)

    printNameAndGender(name = "박현민",gender = "male")

    - builder를 직접 만들지 않고 builder의 장점을 가지게 된다.

    - Kotlin에서 Java 함수를 가져다 사용할 때는 named argument를 사용할 수 없다.

        ㆍ코틀린에서 Java 코드를 쓸 때, JVM 상에서 Java가 바이트 코드로 변환됐을 때  parameter 이름을 보존하고

            있지 않다 보니깐 코틀린에서는 그 이름을 통해서 가져오는 named argument를 쓸 수 없다.

     

    4. 같은 타입의 여러 파라미터 받기 (가변인자)

    fun printAll(vararg strings: String) {
        for (str in strings) {
            println(str)
        }
    }
    printAll("A", "B", "C")
    val array = arrayOf("A", "B", "C")
    printAll(*array)

    - 배열을 바로 넣는 대신 스프레드 연산자(*)를 붙여주어야 한다.

     

    정리

    - 함수의 문법은 Java와 다르다!

    접근지시어 fun 함수이름(파라미터): 반환타입 {
    }

    - 함수의 문법은 Java와 다르다!

    - body가 하나의 값으로 간주되는 경우 block을 없앨 수도 있고 block이 없다면 반환 타입을 없앨 수도 있다.

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

    - 함수 파라미터에 기본값을 설정해줄 수 있다.

    - 함수를 호출할 때 특정 파라미터를 지정해 넣어줄 수 있다.

    - 가변인자에는 vararg 키워드를 사용하며, 가변인자 함수를 배열과 호출할 때는 *를 붙여주어야 한다.

    댓글

Designed by Tistory.