어제 개발을 하다가 다음과 같은 형태의 코드를 작성했다.
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"가 잘 표시되는 것을 알 수 있다.