[Kotlin] if-else 문의 연산자 우선순위

hongsikkim·2022년 8월 18일
0

Kotlin

목록 보기
2/2

어제 개발을 하다가 다음과 같은 형태의 코드를 작성했다.

fun main() {
    val str = "aaa" + if (1 < 2) "bbb" else "ccc" + "ddd"
    print(str)
}

이 코드는 "aaa"라는 string에, 1이 2보다 작으면 "bbb"를, 그렇지 않으면 "ccc"를 이어붙이고, 마지막에 "ddd"를 이어붙이는 것을 의도한 코드였다.

조건문의 1 < 2는 참이므로, "aaabbbddd"가 나오는 것을 의도한 것이다.

그런데 결과는 다음과 같이 나왔다.

aaabbb

어? 왜지? 그래서 이번에는 다음과 같이 거짓인 조건으로 실험을 해 보았다.

fun main() {
    val str = "aaa" + if (1 > 2) "bbb" else "ccc" + "ddd"
    print(str)
}

결과는 다음과 같이 의도한 대로 나온다.

aaacccddd

위 결과를 통해 추론해 보니, 다음과 같이 ccc + ddd 부분을 먼저 계산하는 것을 알 수 있었다.

fun main() {
    val str = "aaa" + if (1 > 2) "bbb" else ("ccc" + "ddd")
    print(str)
}

그렇다면, 이것을 해결하려면 어떻게 해야 할까? 나는 다음과 같은 방법들이 떠오른다.

< 방법 1 : 괄호를 이용 >

fun main() {
    val str = "aaa" + (if (1 < 2) "bbb" else "ccc") + "ddd"
    print(str)
}

< 방법 2 : $ 기호로 각 부분을 묶기 >

fun main() {
    val str = "aaa${if (1 < 2) "bbb" else "ccc"}ddd"
    print(str)
}

두 방법 모두 의도한 대로 "aaabbbddd" 또는 "aaacccddd"가 잘 표시되는 것을 알 수 있다.

profile
딥러닝 덕후 가즈아

0개의 댓글