반응형

4. 조건문(if / when)

코틀린에는 조건문으로 if문과 when문이 존재한다.

// 두 수를 받아 더 큰 수를 반환하는 함수
fun maxBy(a : Int, b : Int) : Int{
    if (a > b){
        return a
    }
    else {
        return b
    }
}

 다른 언어에서 봤던 if문과 아주 유사하게 생겼다. 하지만 코틀린에서는 보다 간편한 방식으로 if문을 작성할 수 있다.

fun maxBy2(a : Int, b : Int) = if(a>b) a else b 
// 반환값 인트는 생략되어있음 (자동 타입 추론)

 코드가 아주 아주 간소화 되었다. 위의 두 함수(maxBy, maxBy2)는 전적으로 동일한 기능을 하는 함수이다.

단, 코틀린은 return (a>b) ? a : b와 같은 삼항 연산자가 존재하지 않는다.

 코틀린은 다른 언어들의 switch문과 유사한 when문이 있다.

fun checkNum(score : Int){
    when(score) {
        0 -> println("this is 0") // score가 0 이면 
        1 -> println("this is 1") // score가 1 이면
        2,3 -> println("this is 2 or 3") // score가 2 혹은 3이면 (복수로도 가능)
        else -> println("I don't know") // score가 위(0,1,2,3)에 해당하지 않는다면
        // 이 when은 statement이기 때문에 else는 생략이 가능하다.
    }
    // when은 이렇게 expression으로 사용이 가능하다
    // 하지만 이경우에는 else를 반드시 사용해야한다.
    var b = when(score){
        1 -> 1 // score가 1이라면 b값은 1
        2 -> 2 // score가 2라면 b값은 2
        else -> 3 // score가 1, 2 둘다 아니라면 b값은 3 (else 생략 불가)
    }

    println("b : ${b}")
		// score 가 1이라면 "b : 1" 출력
		// score 가 2이라면 "b : 2" 출력
		// 그 외의 경우라면 "b : 3" 출력
		
    when(score){
        in 90..100 -> println("you are genius") // score가 90 ~ 100인 경우
        in 10..80 -> println("not bad") // score가 10 ~ 80인 경우
        else -> println("okay") // 10 ~ 80도 아니고 90 ~ 100도 아닌 경우 (else 생략 가능)
    }
}

위의 코드에서 첫번째와 세번째 when은 else가 생략이 가능하고 두번째 when은 else가 생략이 불가능하다고 되어있는데 그 이유는 첫번째, 세번째 when은 statement이고 두번째 when은 expression이기 때문이다.

Expression은 ‘식’ 혹은 ‘표현식’이라고 불리고 Statement는 ‘문장’ 혹은 ‘상태’라고 불린다. 간단히 설명하자면 어떠한 값을 만드는(반환) 경우에는 Expression(식)이고 단순히 어떤 것들을 실행하도록 만드는 것은 Statement(문장)이다. 참고로 코틀린의 모든 함수는 Expression이다. 반환값이 없는 함수 또한 사실은 Unit을 반환하기 때문이다.

자바에서 void 함수는 statement이다. 자바에서 if문은 statement로만 사용이 가능했지만 코틀린에서는 expression, statement 둘 다 가능하다. when도 마찬가지이다. 


5. Array vs List

Array는 정해져있는 사이즈가 있다. 메모리가 할당이되어서 나오기 때문에 처음에 크기를 지정해 주어야한다. 

List는 크게 두가지로 나뉘는데 (Imutable)List와 MutableList가 있다. 편의상 ImutableList는 그냥 List라고 하겠다. 큰 차이점은 List는 수정이 불가능하고 MutableList는 수정이 가능하다.

fun array(){
    val array = arrayOf(1,2,3) // arrayOf로 어레이 초기화
    val list = listOf(1,2,3) // listOf로 리스트 초기화

    //하나의 타입으로만 할 필요는 없다.
    val array2 = arrayOf(1, 'd', 3.4f) // Any타입으로 자동 추론
    val list2 = listOf(1, 'd', 11L) // Any타입으로 자동 추론

    // 일반적으로 array는 Mutable이다 값을 변경하는것이 가능하다는 소리 
    // 사이즈를 변경하지만 않는다면
    array[0] = 3 // array = (3,2,3)로 변경
    // 그냥 리스트(List)는 읽기전용이라 원소의 값을 변경하는 것이 불가능하다.
    // (array랑 다르게 Interface)
    list[0] = 3 // No set method providing array access 에러 발생

    var result = list.get(0) // 값을 가져올 수는 있다.

    // MutableList 중 하나인 arrayList를 사용
    val arrayList = arrayListOf<Int>() // 초기화
    arrayList.add(10) // arrayList에 10 추가
    arrayList.add(20) // arrayList에 20 추가

}

6. 반복문(for / while)

 다른 언어들과 마찬가지로 코틀린에는 반복문으로 for문과 while문이 있다.

fun forAndWhile(){

    // 1부터 10까지 더해주는 함수
    var sum = 0
    for (i in 1..10){
        sum += i
    }
    println(sum) // 55를 출력

    // 1부터 10까지 더하는데
    // 2씩 증가 1, 3, 5, 7, 9(step)
    sum = 0
    for (i in 1..10 step 2){
        sum += i
    }
    println(sum) // 25를 출력

    // 10부터 1까지 더하는 함수(downTo)
    sum = 0
    for (i in 10 downTo 1){
        sum += i
    }
    println(sum) // 55를 출력

    // 1부터 9까지를 더하는 함수(until)
    // until을 사용하면 마지막 값은 포함X
    sum = 0
    for (i in 1 until 10){
        sum += i
    }
    println(sum) // 45를 출력

    val students = arrayListOf("joyce","james","jennny","jenifer")
    for (name in students){
        println("${name}")
    }
    // joyce
    // james
    // jenny
    // jenifer 순차적으로 출력

    for ((index, name) in students.withIndex()){
        println("${index+1}번째 학생 : ${name}")
    }
    // 1번째 학생 : joyce
    // 2번째 학생 : james
    // 3번째 학생 : jennny
    // 4번째 학생 : jenifer 순차적으로 출력

    var index = 0
    while (index < 10){
        println("current index = ${index}")
        index++
        /*
        current index = 0
        current index = 1
        current index = 2
        current index = 3
        current index = 4
        current index = 5
        current index = 6
        current index = 7
        current index = 8
        current index = 9 순차적으로 출력
         */
    }

 for문과 while문 둘 다 다른 언어들과 유사하면서 보다 편리하여 익히기 쉬운 것 같다.


위에 작성된 코드 및 설명들은

코틀린 3강으로 끝내기 - 1편 기본 문법

에서 코틀린 강의 영상을 보며 정리한 내용입니다.

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기