DEV

속도측정)if, switch 누가 더 빠를까?

속도측정

Featured image

@

개발하다보면 if, switch 둘의 구분이 애매할 때가 있다. switch로 구현해도 되고 if로 구현해도 되는 구문들이 있는데, 그럼 성능상으로 어떤 구문이 더 좋은 구문일까? 간단한 함수 하나를 구현하여 총 10000번을 호출했을 때 속도를 비교해 보고자 한다.

구현

구현한 함수는 숫자를 넣었을 때 요일을 반환하는 함수이다.

func weekToKorStr1(_ weekday:Int) -> String {
    var ret = ""
    switch weekday {
    case 1: ret = "일"
    case 2: ret = "월"
    case 3: ret = "화"
    case 4: ret = "수"
    case 5: ret = "목"
    case 6: ret = "금"
    case 7: ret = "토"
    default:break
    }
    return ret
}

func weekToKorStr2(_ weekday:Int) -> String {
    if weekday == 1 { return "월" }
    else if weekday == 2 { return "화" }
    else if weekday == 3 { return "수" }
    else if weekday == 4 { return "목" }
    else if weekday == 5 { return "금" }
    else if weekday == 6 { return "토" }
    else if weekday == 7 { return "일" }
    else { return "" }
}

둘의 차이점은 첫 번째 함수는 switch문을, 두 번째 함수는 if문을 사용했다는 것이 가장 큰 차이점일 것이다. 프로그래머의 코딩스타일에 따라 1번과 2번이 나뉘게 될 것다. 그렇다면 어떤게 더 좋은 성능을 발휘할까?

결과

결과는 놀랍게도 switch문인 첫 번째 함수가 0.5 ~ 0.8초가 소요되었고, if문인 두 번째 함수는 0.3 ~ 0.4가 소요되었다. 그렇다면 switch문보단 if문으로 구현하는게 더 좋은 성능을 보이는 것인가? 라고 생각했지만 혹시 switch문의 결과값을 담는 ret 변수가 성능을 느리게 하는 건 아닐까 라는 생각으로 제거 후 실행해보았다.

func weekToKorStr3(_ weekday:Int) -> String {
    switch weekday {
        case 1: return "일"
        case 2: return "월"
        case 3: return "화"
        case 4: return "수"
        case 5: return "목"
        case 6: return "금"
        case 7: return "토"
        default: return ""
    }
}

결과는 두 번째 함수와 비슷한 결과인 0.3 ~ 0.4정도 소요되었다. 따라서 if와 switch는 거의 성능이 같다고 봐도 무방하다.

결론

바로 리턴할 수 있다면 변수를 만들지 말고 리턴하는 것이 조금이나마 성능개선에 도움을 주는 것 같다.

번외

위의 함수 3개를 제외하고 다른 방법으로 더 짧게 구현할 수 있는데 이들의 성능은 어떨까?

func weekToKorStr4(_ weekday:Int) -> String {
    let arr = ["일", "월", "화", "수", "목", "금", "토"]
    if weekday <= 0 || weekday >= arr.count {
        return ""
    }
    return arr[weekday-1]
}

func weekToKorStr5(_ weekday:Int) -> String {
    let dic = [1:"일", 2:"월", 3:"화", 4:"수", 5:"목", 6:"금", 7:"토"]
    return dic[weekday] ?? ""
}

4번과 5번함수의 특징은 결과를 변수에 저장하고 불러오는 방법이다. 라인이 적은 것이 핵심이다. 이 함수들의 성능은 얼마나 나올까? 4번 함수는 1.6 ~ 1.8, 5번 함수는 4.2 ~ 5 까지도 나온다. 코드의 길이가 줄어든 대신 성능을 포기한다.. 어쨌든 코딩스타일에 대해 다시 생각해보는 재밌는 실험이었다.

Why don't you read something next?

XcodeGen으로 협업하기

Share

BugkingK

Author

BugkingK

iOS developers who love to play guitar and develop

Comments

crossorigin="anonymous">