0️⃣ 왜 switch문인데?
조건문은 우리가 일반적으로 사용하는 if else 문과 switch문이 있다. 처음 코딩을 배울 때는 그냥 if else문만 쓰면 되는 걸 왜 번거롭게 또 switch문을 배워 사용해야되는지 몰랐다. 대충 이야기를 듣자하니 "switch문이 더 성능이 좋대" 였다. 손에 익어야 쓰지~ 라며 막연하게 if else문 위주로 사용하던 나였는데 어느날 switch문의 간편함을 깨닫고 '그래, 성능도 더 좋은 switch문을 써보자.' 라는 다짐과 함께 switch문을 익혔고 이제는 switch문이 조금 더 편해졌다. 그렇다면 구체적으로 왜 switch문이 더 좋은지 알아보겠다.
1️⃣ if else문부터 보자.
fun lunch(점심메뉴) {
if(점심메뉴 == "떡볶이"){
print("딱 오늘 먹고 싶었던 거야!")
} else {
print("떡볶이 먹고 싶은데...")
}
}
if else문은 조건문이 true일 경우 아래 구문을 실행하고 아닐 경우엔 else 구문으로 넘어가 실행한다. 이렇게 if else 두 구문으로 끝날 경우엔 switch문을 쓰는 것보다 if else 문을 쓰는 것이 더 간편하고 좋다. 하지만 이런 경우엔 어떨까?
fun lunch(점심메뉴) {
if(점심메뉴 == "떡볶이"){
print("딱 오늘 먹고 싶었던 거야!")
} else if(점심메뉴 == "마라탕") {
print("요 며칠 너무 먹고 싶었어!")
} else if(점심메뉴 == "돈까스") {
print("어제 먹었지만 그래도 맛있어!")
} else if(점심메뉴 == "삼겹살") {
print("점심부터 삼겹살이라니~!")
} else {
print("다른 메뉴는 없나...")
}
}
이렇게 else if를 포함하여 다양하게 쓸 경우엔 이야기가 달라진다.
여기서 만약 점심메뉴가 "삼겹살"이었고 위와 같은 lunch 함수 내의 조건문을 순회하게 되면 떡볶이, 마라탕, 돈까스를 모두 한 번씩 거친 뒤에 삼겹살을 가게 된다. 즉, 한 번에 삼겹살을 찾아가는 것이 아니라 위의 모든 조건을 한 번씩 바라보고 가게 되는 것이다. n개의 if else구문이 있으면 n개의 조건문의 진위여부를 판단한다는 말이다.
2️⃣ 그렇다면 switch문은?
fun lunch(점심메뉴) {
when(점심메뉴) {
"떡볶이" -> print("딱 오늘 먹고 싶었던 거야!")
"마라탕" -> print("요 며칠 너무 먹고 싶었어!")
"돈까스" -> print("어제 먹었지만 그래도 맛있어!")
"삼겹살" -> print("점심부터 삼겹살이라니~!")
else -> print("다른 메뉴는 없나...")
}
}
Koltin은 switch문을 when 구문으로 작성한다.
switch문은 if문과 달리 점심메뉴가 "삼겹살"이면 떡볶이, 마라탕, 돈까스를 모두 점프하고 바로 "삼겹살" case로 이동하여 해당 구문을 실행한다. 모든 경우를 순회하지 않는 것이다.
3️⃣ if문과 switch문의 본격적인 비교
if문은 조건의 개수만큼 O(n)의 시간복잡도를 갖게 되어 비교적 느리고 성능이 좋지 않다는 단점이 있다.
switch문은 O(lgN) 또는 O(1)의 시간복잡도를 갖게 되어 비교적 빠르지만 case의 개수만큼 메모리를 차지하고 있기 때문에 메모리에 단점이 있다.
switch문이 if문보다 3배 가량이나 빠르기 때문에 switch문이 더 성능이 좋다는 말이 나온 것 같지만 실제로 대부분의 언어에서 switch문과 if else문의 성능이나 속도 차이는 그렇게 두드러지지 않는다. 이 시간차이는 컴파일의 속도 차이 때문에 발생하는 것이기 때문이다.
고로 코드를 작성할 때 가독성이나 최적화를 고려하여 적절한 조건문을 찾아 사용하면 된다!
❗ 출처
참고 사이트1 : https://aahc.tistory.com/6
참고 사이트2 : https://velog.io/@ahsy92/JaveScript-Switch-If
'Kotlin' 카테고리의 다른 글
확장함수? 써보기 (0) | 2024.07.30 |
---|---|
Kotlin 문법 : StringBuilder() (0) | 2024.07.10 |
Kotlin 문법 : 상속과 추상화 (0) | 2024.06.12 |
문제해결 : unresolved reference: add (0) | 2024.06.07 |
Kotlin 문법 : sort와 sorted (with. 프로그래머스) (0) | 2024.06.05 |