본문 바로가기
언어/Kotlin

Java와 비교하는 Kotlin - 조건문과 반복문

by 개발짜 2022. 11. 5.

조건문 if~else 와 표현식

fun main() {
    var data = 10
    if(data > 0) {
        println("data > 0")
    } else {
        println("data <= 0")
    }
}

[실행 결과]
data > 0
  • 명시한 조건에 만족하면 if 문 실행 그렇지 않으면 else 부분 실행

 

// 표현식으로 사용 예시
fun some() {
    var data = 10
    val result = if (data > 0) {
        println("data > 0")
        true // 참일 때 반환값
    } else {
        println("data <= 0")
        false // 거짓일 때 반환값
    }
    println(result)
}

[실행 결과]
data > 0
true
  • 표현식이란 결괏값을 반환하는 계산식
  • if~else 문을 표현식으로 사용하려면 else 문을 생략할 수 없음

자바와 차이점

Boolean ifState(int data) {
    if(data > 0) {
        System.out.println("data > 0");
        return true;
    } else {
        System.out.println("data <= 0");
        return false;
    }
}

void main() {
    int data = 10;
    Boolean result = ifState(data);
    System.out.println(result);
}
  • if~else 문은 자바와 큰 차이가 없으나 표현식이라는 개념이 없음
  • 위 코틀린 코드를 자바 코드로 변형 한다면 다음과 같이 작성할 수 있다.

조건문 when 

fun whenExample() {
    val data = 10
    when(data) {
        10 -> println("data is 10")
        20 -> println("data is 20")
        else -> {
            println("data is not valid data")
        }
    }
}

[실행 결과]
data is 10
  • when 키워드 다음 소괄호 () 안에 넣은 데이터가 조건이 되고 값에 따라 구문이 실행됨
  • when 문의 조건으로는 정수가 아닌 다른 타입의 데이터를 지정할 수도 있다.

 

// 문자열 타입을 조건으로 사용
fun whenExample2() {
    val data:Any = "Hello"
    when(data) {
        is String -> println("data is String")
        20 -> println("data is 20")
        in 1..10 -> println("data is 1..10")
        else -> println("data is not valid data")
    }
}

[실행 결과]
dats is hello
  • 여러 개의 타입인지 확인하려면 data 타입을 Any로 선언해야함

 

// when문을 표현식으로 사용
fun whenExample3() {
    val data:Int = 10
    val result = when(data) {
    	is String -> println("data is String") // data가 문자열 타입이면
        20, 30 -> println("data is 20 or 30") // data가 20 또는 30이면
        in 1..10 -> println("data is 1..10") // data가 1~10의 값이면
        else -> println("data is not valid")
    }
    println(result)
}

[실행 결과]
data is 1...10
  • when 문을 표현식으로 사용할 때는 else 문을 생략할 수 없다.

 

// 조건만 명시한 예
fun whenExample4 {
    var data = 10
    when { // 데이터를 명시하지 않음
        data <= 0 -> println("data is <= 0")
        data > 100 -> println("data is > 100")
        else -> println("data is valid")
    }
}

[실행 결과]
dats is valid

자바와 차이점

void switchCaseState2() {
    int data = 10;
    switch (data) {
        case 1:
        case 2:
        case 3:
        case 4: 
        case 5:
            System.out.println("data in 1...5");
            break;
        case 10:
            System.out.println("data is 10");
            break;
        case 100:
            System.out.println("data is 100");
            break;
        default:
            System.out.println("data is not 1...5 or 10 or 100");
    }
}
  • 코틀린의 when 문은 자바의 switch~case 문과 유사하다.
  • 그러나 자바의 switch 조건문에 들어갈 수 있는 입력 변수의 타입은 byte, short, char, int만 가능하다
  • 연산자 in 은 case 1 ~ case 5 까지로 구현할 수 있다.
  • when 문의 else 조건식은 switch~case의 default 조건식과 유사하다.

반복문 for와 while

fun forExample() {
    var sum: Int = 0
    for(i in 1..10) {
        sum += i
    }
    println(sum)
}

[실행 결과]
55
  • 코틀린에서 반복문은 for, while을 제공한다.
  • for문은 제어 변숫값을 증감하면서 특정 조건이 참일 때까지 구문을 반복해서 실행
  • for문의 조건에는 주로 범위 연산자인 in 을 사용한다.
fun forExample2() {
    for(i in 1..10) { // => java: i=1; i<=10; i++
        // 1부터 10까지 1씩 증가
    }
    for(i in 1 until 10) { // => java: i=1; i<10; i++
        // 1부터 9까지 1씩 증가
    }
    for(i in 2..10 step 2) { // => java: i=2; i<=10; i+=2
        // 2부터 10까지 2씩 증가
    }
    for(i in 10 downTo 1) { // => java: i=10; i>=1; i--
        // 10부터 1까지 1씩 감소
    }
}

 

// 반복 조건에 컬렉션 타입 활용
fun forExample3() {
    var data = arrayOf<Int>(10, 20, 30)
    for (i in data.indices) { // indices는 컬렉션 타입의 인덱스값
        print(data[i])
        if(i !== data.size -1) print(",")
    }
}

[실행 결과]
10,20,30
  • indices는 컬렉션 타입의 인덱스값을 의미하므로 for문을 반복하면서 0, 1, 2 값을 i에 대입

 

// 인덱스와 데이터를 가져오는 withIndex() 함수
fun forExample4() {
    var data = arrayOf<Int>(10, 20, 30)
    for ((index, value) in data.withIndex()) {
        print(value)
        if(index !== data.size -1) print(",")
    }
}

[실행 결과]
10,20,30
  • 인덱스와 실제 데이터를 함께 가져옴
fun whileExample() {
    var x = 0
    var sum1 = 0
    while(x < 10) {
        sum1 += ++x
    }
    println(sum1)
}

[실행 결과]
55
  • while 문은 조건이 참이면 중괄호로 지정한 영역을 반복해서 실행한다.

자바와 차이점

void forExample() {
    int sum = 0;
    for(int i=0; i<10; i++) {
        sum += i;
    }
    System.out.println(sum);
}
void whileExample() {
    int i = 0;
    var sum = 0;
    while (i<10) {
        sum += ++i;
    }
    System.out.println(sum);
}
  • 코틀린과 큰 차이는 없다.

댓글