본문 바로가기

Kotlin

[Kotlin] 06. 흐름제어와 논리연산자

코틀린 여섯번째 포스팅 <흐름제어와 논리연산자> 입니다

 

 

 

<흐름제어>

코드의 흐름을 제어할 수 있는 키워드를 알아보겠습니다

 

 

1. return 

 

첫번째로는 return인데요

return은 함수를 '종료'하고 값을 '반환'하는 역할을 하고 있습니다

 

 

 

 

2. break

 

두번째는 반복문에 사용할 수 있는 break입니다

break는 반복문 내의 구문이 실행되는 중간에 즉시 반복문을 '종료'하고 다음 구문으로 넘어가는 역할을 합니다

 

fun main() {

    for (i in 1..10) {
        if (i == 3) break
        println(i)
    }
    
}
/* 출력
1
2
*/

 

1부터 10까지 반복하는 for문 안에 i가 3이 되면 break를 수행하는 if문을 하나 넣어두었는데요

위 코드는 i가 3이 되는 시점에 반복이 즉시 중단되기 때문에 실행시켜보면 출력에 1과 2가 찍힌 후 정지되는 것을 확인할 수 있습니다

 

 

 

 

3. continue

 

continue 또한 반복문에 사용할 수 있는데요

continue는 다음 반복조건으로 즉시 넘어가는 역할을 합니다

(해당 조건을 건너뛴다고 생각하면 됩니다!)

 

fun main() {

    for (i in 1..10) {
        if (i == 3) continue
        println(i)
    }
    
}
/* 출력
1
2
4
5
6
7
8
9
10
*/

 

위 코드는 i가 3이 되는 시점에 println을 실행하지 않고 

바로 for문으로 돌아가 다음 반복 조건인 4로 진행되기 때문에

출력을 보면 3을 제외한 모든 숫자가 찍히는 것을 확인할 수 있습니다

 

예시를 확인해보면 break문과의 차이점이 보이시죠?

 

 

 

 

지금까지는 기존의 언어들과 비슷한데요, 코틀린은 여기에 한가지 기능이 더 추가되었습니다

바로 다중 반복문에서 break나 continue가 적용되는 반복문을 label을 통해 지정할 수 있는 기능입니다

 

*Label 사용

 

fun main() {
    
    loop@for (i in 1..10) { // 외부 반복문
        for (j in 1..10) { // 내부 반복문
            if (i == 1 && j == 2) break@loop
            println("i: $i, j: $j")
        }
    }

}
/* 출력
i: 1, j: 1
*/

 

위 코드를 보면 i로 10번을 반복하는 for문 내에서 다시 j로 10번을 반복하는 구조의 다중 반복문이 있습니다

그 안에서 i가 1이고 j가 2면 모든 반복문을 종료해야 하는 조건을 걸어두었습니다

 

고전적인 언어에서는 내부 반복문에서 조건을 체크하여 break를 하더라도 반복문을 하나만 빠져나오기 때문에

외부 반복문에서 또 다시 조건을 체크하여 모든 반복문을 수동으로 종료해야 했습니다

 

코틀린에서는 이를 해결하기 위해 외부 반복문에 레이블 이름과 (레이블은 원하는 이름으로 달아주면 됩니다) @ 기호를 달고

break문에서 @과 레이블 이름을 달아주면 레이블이 달린 반복문을 기준으로 즉시 break를 시켜줍니다

(continue도 동일하게 사용 가능합니다!)

 

실행시켜보면 i: 1, j: 1 까지만 출력되고 break가 수행되어 코드가 종료되는 것을 확인할 수 있습니다

 

 

 

 

그럼 이제 위 예제에서 사용되었던 논리연산자에 대해서도 알아보겠습니다

 

 

 

 

 

<논리연산자 logical operators>

: 논리연산자는 논리 값을 연산하여 새로운 논리값을 도출할 때 쓰는 연산자입니다

 

 

- &&

: and 연산자로 &&의 앞과 뒤에 있는 논리값이 모두 true인 경우에 결과값이 true가 됩니다

ex) true && true => true

 

 

 

- ||

: or 연산자로 ||의 앞과 뒤에 있는 논리값 둘 중 하나라도 true인 경우에 결과값이 true가 됩니다

ex) true || false => true

 

 

 

- !

: not 연산자뒤에 붙는 값을 반전시켜줍니다

ex) !true => false (참이면 거짓) , !false => true (거짓이면 참)

 

 

fun main() {

    println(true && false)
    println(true || false)
    println(!true)
    println(!false)
    
}
/* 출력
false
true
false
true
*/

 

 

위의 예시는 boolean리터럴 값으로만 수행하였지만 실제 코드에선 조건식과 조건식을 연산하는 경우가 더 많습니다

조건식과 조건식을 사용한 예제도 확인해보겠습니다

 

 

fun main() {
    
    var a = 6
    var b = 4
    
    println(a>5 && b>5)
    
}
/* 출력
false
*/

 

a와 b를 각각 5와 비교하는 조건식을 and 연산으로 넣어두었는데요

a는 5보다 크니 true가 되고, b는 5보다 작으니 false가 됩니다

그러면 ture && false 이므로 출력값은 false가 되겠죠?

 

 

 

 

위에서 정리한 흐름제어 및 논리연산자는 복잡한 조건에 따라 반복을 제어하고 분기를 실행해야 하는 경우에 많이 사용됩니다!

 

 

 

 

오늘의 포스팅 <흐름제어와 논리연산자>는 여기서 마치도록 하겠습니다

감사합니다

 

 

 

 

 

 

 

*위 글은 유튜브 테크과학! DeMo님의 강좌를 참고하여 작성하였습니다