본문 바로가기
개발새발/코틀린

[코틀린/Kotlin] 조건문과 반복문

by 조희우 2025. 8. 11.

조건문

if문

  • 예시
fun main() {
    fun ifTest(arg: Int) {
        if(arg > 10){
            println("arg > 10")
        }else if(arg > 100){
            println("arg > 100")
        }else{
            println("arg <= 10")
        }
    }
    ifTest(arg = 20)
}
// 결과 
// arg > 10
  • kotlin에서 if문은 표현식(expression)
    • 표현식: 결과 값이 발생하며 변수에 if문의 결과 대입 가능
fun main() {
    fun ifTest(arg: Int) {
        val result = if(arg > 10){
            println("arg > 10")
            arg
        }else if(arg > 100){
            println("arg > 100")
            arg
        }else{
            println("arg <= 10")
            arg
        }
        println("result : $result")
    }
    ifTest(arg = 20)
}
// 결과 
// arg > 10
// result : 20
  • 주의 사항
    • 최종 결과값은 if 또는 else if 표현식 내의 마지막 줄에 작성한다.
    • else 문이 필수적으로 있어야한다.
    • kotlin에서는 삼항 연산자가 존재하지 않는다.

when

fun main() {
    // 값으로 분기
    val data1 = "hello"
    when(data1){
        "hello" -> println("data1 is hello")
        "world" -> println("data1 is wrold")
        else -> println("data1 is not hello and world")
    }
    // 결과 : data1 is hello

    // 여러 조건을 한꺼번에 분기
    val data2 = 20
    when(data2){
        10, 20  -> println("data2 is 10 or 20")
        30, 40 -> println("data2 is 30 or 40")
    }
    // 결과 : data2 is 10 or 20

    // 범위로 분기
    val data3 = 30
    when(data3){
        in 10..20  -> println("10 <= data3 <= 20")
        in 21..30 -> println("21 <= data3 <= 30")
    }
    // 결과 : 21 <= data3 <= 30
}
  • if문과 같이 표현식으로 사용 가능
val data4 = 2
val result = when(data4){
	1 -> "1"
	2 -> "2"
	else -> {
		"else"
	}
}
println(result)
// 결과 : 2
  • 주의사항
    • kotlin에서는 witcc-case 문이 없다.

반복문

for

fun main() {
    var sum = 0
    for(i in 1..10){
        sum += i
    }
    println(sum)
}
// 결과 : 55
  • forEach 메소드로 작성 가능
val arr = arrayOf("Apple", "Pear", "Grape", "Orange")
 
arr.forEach {
    println(it)
}
  • 순회 조건 명시
    • for(i in 1..10){…} : 1부터 10까지 숫자를 1씩 증가
    • for(i in 1 until 100){...} : 100은 포함하지 않음
    • for(i in 2..10 step 2){...} : 2씩 증가
    • for(i in 10 downTo 1){...} : 숫자 감소
    • for(i !in 1..10){…}: i가 해당 범위에 불포함
fun isLetter(c: Char) = c in 'a'..'z' || c in 'A'..'Z'
fun isNotDigit(c: Char) = c !in '0'..'9'

fun main(args: Array) {
    println(isLetter('q'))
    println(isNotDigit('x'))
}
  • 컬렉션 순회 방법
fun main() {
    val list = listOf<String>("Hello", "World", "!", "?")
    val sb = StringBuffer()
    for (str in list) {
        sb.append(str)
    }
    println(sb)    
}
// 결과 : HelloWorld!?
  • indices를 사용하여 컬렉션에서 인덱스 이용 방법: 0 until 식별자의 크기
fun main() {
    val list = listOf<String>("Hello", "World", "!", "?")
    val sb = StringBuffer()
    for (i in list.indices) {
        print("${list[i]} ")
    }
}
// 결과 : Hello World ! ?
  • withIndex()를 사용하여 컬렉션에서 인덱스와 값 모두 이용하는 방법
fun main() {
    val list = listOf<String>("Hello", "World", "!", "?")
    val sb = StringBuffer()
    for ((index, value) in list.withIndex()) {
        println("$index is $value")
    }
}
//결과 
//0 is Hello
//1 is World
//2 is !
//3 is ?

while문

  • kotlin에서는 swith-case문이 없다.
fun main() {
    var x = 0
    var sum = 0
    while(true){
        sum += ++x
        if(x == 10) break
    }
    println(sum)
}
// 결과 : 55
  • do-while문 사용 가능
// 처음에 x가 음수면 실행하지 않음
while (x >= 0) {
    x--
}
// 처음에 x가 음수여도 1번은 실행
do {
    x--
} while (x >= 0)
  • 주의사항
    • case없이 비교할 값만 입력하고 →를 이용하여 실행 문장을 작성
      • 실행문장이 두줄 이상일 경우 중괄호를 이용하여 감싸기
    • break문을 사용하지 않아도 된다.
    • 조건에 범위를 지정할 수 있다.
      • in: 해당 범위에 값이 속하는지
      • 1..9: 1 이상 9 이하
      • n in 1..9: n≥1 && 1≤9
    • else가 swith-case의 default를 대체한다.

repeat

  • 문법이 아닌 내부에 정의 되어있는 함수
  • 파라미터로 반복할 횟수를 전달하면 코드 블럭의 내용을 파라미터로 전달된 횟수만큼 반벅
  • 내부적으로는 for문을 호출하는 것으로 구현되어 있음
repeat(3) {
    println("${it}번 반복중...")
}

label(라벨)

  • 특정 위치를 마은대로 이름을 정하고 continue문이나 break문에서 지정한 반복문을 벗어나게 함
  •  
fun main() {
    aaa@ for(i in 1..3){
        for (j in 1..3) {
            if(j > 1) break@aaa
            println("i: $i , j: $j")
        }
    }
}
// 결과 : i: 1 , j: 1

예제 복습

  1. 90점 이상이면 A, 80 이상이면 B, 그 외는 F를 출력하는 코드

[If문]

fun ifTest(score: Int) {
        if(score > 90){
            println("A")
        }else if(score > 80){
            println("B")
        }else{
            println("F")
        }
    }
}

-> 오답 노트: "이상"이므로 score>=90, score>=80으로 정확하게 표현하기

 

[when문]

fun ifTest(score: Int) {
	println(when(score){
		in 100..90 -> "A"
		in 90..80 -> "B"
		else -> "F"
	})
}

-> 오답 노트: when에서 범위는 작은수에서 큰수로 표현 -> in 90..100, in 80..90

 

2. 1부터 10까지의 짝수만 출력하기

for(i in 1..10){
	if(i%2==0){
		println(i)
	}
}
var i=1
while(i<=10){
	if(i%2==0){
		println(i)
	}
	i++
}

 

3. while을 이용하여 3의 배수를 30까지 출력

var i=1
while(i<=30){
	if(i%3==0){
		println(i)
	}
	i++
}

미니 퀴즈

1. 아래 when 문에서 score가 85일때 출력 결과는?

val score = 85
val grade = when(score) {
    in 90..100 -> "A"
    in 80..89 -> "B"
    else -> "F"
}
println(grade)

답: B

 

2. 아래 코드를 실행했을 때 출력되는 값은?

var sum = 0
for (i in 1..5) {
    sum += i
}
println(sum)

답: 15

 

3. if문에서 else는 필수일까? 그 이유와 함께 서술하시오.

답: 필수가 아니다. if 문 단독으로 사용이 가능하며 else-if문을 사용할 경우 else가 필요하다.

4. 다음 중 Kotlin에서 변수 선언이 올바른 것을 모두 고르시오.

a) val name: String = "Hope"

b) var age = 25

c) name = "Joy"

d) var score: Int

 

답: a, b

 

5. 아래 코드에서 에러가 발생하는 부분과 수정 방법을 서술하시오.

var i = 1
while(i > 5) {
    println(i)
    i++
}

 

답: while문에서 i>5 조건은 항상 false이므로 while문이 실행되지 않으므로 whie(i<=5) 수정이 필요함