티스토리 뷰

728x90

조건문

 

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

자바의 삼항 연산자가 없는 대신 if 문을 식으로 사용할 수 있다.

 

 

    2.  when 문

if 문을 중첩하여 사용하기 보다 when 문을 통해 조건을 순차적으로 검사한다.

fun hexDigit(n: Int): Char {
    when {
      n in 0..9 -> return '0' + n
      n in 10..15 -> return 'A' + n - 10
      else -> return '?'
    }
}
 
  • 여러 개의 조건 -> 문, 하나의 else -> 문으로 이루어질 수 있다.  
  • 자바의 switch와 비슷하지만 값을 선택하는 것이 아닌 임의의 조건을 검사한다. (또한 자바의 폴스루를 지원하지 않음)
  • 하나의 변수만을 비교한다면 when (변수명) {} 로 쓸 수 있다.

 

 

    3.  범위, 진행

  • .. 연산자
    • 'a' .. 'h' 
    • 10 .. 99
    • 0.0 .. 1.0
  •  

위의 연산처럼 범위를 만들 수 있다. 

.. 연산자의 범위는 닫혀있기 대문에 시작 값과 끝 값이 범위에 포함된다.

(until → 끝 값보다 1 작은 값의 반만 닫힌 범위를 만드는 연산)

 

 

  • in 연산
    • num in 10..99

어떤 값이 범위 안에 들어있는지 알 수 있다.

(↔ !in)

 

 

  • downTo 연산
    • 10 downTo 1
  •  

아래로 내려가는 진행을 만들 수 있다.

 

 

  • step
    • 1 .. 10 step 3
    • 15 downTo 8 step 2
  •  

진행의 간격을 지정할 수 있다.

 

 

 

 

루프

 

  1. for 루프
fun main() {
    val a = IntArray(10) { it * it }
    var sum = 0

    for (x in a) {
      sum += x
    }

    println("Sum: $sum")
}
 
  • 변수 x는 이터레이션 변수에 해당하며 val이나 var을 붙이지 않는 불변 변수다.
  • Iterable 인스턴스가 for 루프에 들어갈 수 있다. (배열, 리스트, 집합 → Iterable)
  • 자바의 for 루프처럼 선언, 초기화, 검사의 구조가 없다.
  • 문자열과 배열의 인덱스 범위를 제공하는 indices 프로퍼티를 사용

 

 

    2.  꼬리 재귀 함수

함수에 tailrec 키워드를 붙이면 컴파일러가 재귀 함수를 비재귀적인 코드로 자동 변환해준다.

→ 재귀 함수의 간결함, 비재귀 함수의 성능.

tailrec 키워드는 재귀 호출 다음에 아무 동작도 수행하지 않는 꼬리 재귀인 경우에만 동작한다.

 

 

 

 

예외 처리

 

fun readInt(default: Int) = try {
    readLine()!!.toInt()
} catch(e: NumberFormatException) {
    default
}
 
  • try 문을 식으로 표현할 수 있다. 식의 값은 try 블록의 값 or 예외를 처리한 catch 블록의 값이다.
  • 자바와 다르게 하나의 catch 블록 안에서 여러 예외를 처리할 수 없다. 

 

728x90
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함