본문 바로가기
개발 도서

if - else 는 왜 있는걸까?

by 성건희 2019. 4. 29.
반응형

if - else 는 왜 있는걸까?

우리는 코딩을 할 때 if 문을 수도 없이 써왔다.

if - else가 없으면 프로그램을 짤 수 없는 것일까?

어셈블리어에는 if 문이 없다.

대신 해당 조건에 만족하면 다른 구문으로 점프 시키는 구조로 동작한다.

C 언어에서도 else를 사용하지 않고 goto 문을 써서 강제로 점프시키는 방법을 사용할 수 있다.

그러면 goto 문을 사용해서 다른곳으로 점프시키면서 코딩하면 될텐데 굳이 if - else문을 왜 만들어 놓은걸까?

goto 문을 쓰면 '지정한 행으로 점프한다'라는 겉으로 보면 아주 간단한 기능인 것 처럼 보인다.

하지만 어디로 점프했는지 코드를 자세히 들여다 봐야하며 코드의 흐름을 파악하기가 어렵다.

if - else를 도입하면 조건이 참인 경우와 거짓인 경우의 처리 흐름이 명확하게 분리가 되기 때문에

goto 문을 사용했을 때 보다 좀 더 쉽게 흐름을 파악할 수 있다는 장점이 있다.

그래서 '코딩을 지탱하는 기술' 책의 저자는 코드를 편하게 읽을 수 있기 때문에 else문 사용을 권장하고 있다.

 

하지만 나는 이 의견에는 동의할 수 없었다.

'코드스쿼드'에서 교육을 받았을 때 pobi는 'else문을 가능한 사용하지 말 것'을 강조해 왔다.

그 이유는 if - else 문도 코드의 흐름을 if 문에서 부터 하나하나 파악을 해야하기 때문이다.

 

예를 들어보자.

if - else를 사용한 코드는 다음과 같다.

if (isA) {
    return A;
} else {
    if (isB) {
        return B;
    } else {
        play1(); 
    }
}

 

else를 사용하지 않는다면?

if (isA) {
    return A;
} 

if (isB) {
    return B;  
}

play1();

둘 중 무엇이 더 읽기 편한가?

 

아직 잘 모르겠다면 요구사항을 더 추가해보자.

if - else 사용

if (isA) {
    return A;
} else {
    if (isB) {
        return B;
    } else {
        if (isC) {
            return C;
        } else {
            if (isD) {
                return D;
            }
            play1();
        }
        play2(); 
    }
}

 

else 사용안함

if (isA) {
    return A;
} 

if (isB) {
    return B;  
}

if (isC) {
    return C;  
}

if (isD) {
    return D;  
}

play1();
play2();

위처럼 if - else 기반으로 코딩을 설계하면 요구사항이 늘어날수록 if - else의 조건문도 자연스럽게 늘어나게 된다.

실제 현업에서는 한 메서드에 if - else가 100라인이 넘어가는 일이 비일비재하게 일어난다.

 

물론 무조건 if - else를 사용하지 말라는 말은 아니다.

상황에 따라서 if - else문이 if - return 보다 나은 경우도 있다.

하지만 대부분의 상황들이 else를 쓰지 않는것이 가독성 측면에서 좋은 경우가 많기 때문에

꼭 필요한 경우가 아니라면 else문을 사용하지 않는것이 필자는 더 나은 방법이라고 생각한다.

 

참고

코딩을 지탱하는 기술 - 니시오 히로카즈

https://skylit.tistory.com/263

반응형

댓글