else 의 생략 (feat. return) (TIL 16일차)

EenSung Kim·2021년 4월 22일
0

“이제까지 else 를 그냥 생략할 수 있는 줄 알았다니까.."


조건문은 함수 안에서, 또 반복문과 종종 함께 쓰일 때가 있습니다. 만약 이때 if 조건문 이후에 else 없이 또 다른 구문이 이어질 경우, 우리는 return, break, continue, 이 3 가지를 살펴 if 이후의 구문이 어떻게 진행될 지를 가늠해야 합니다.

function grade(score) {
    let result = '';
    if (score > 100 || score < 0) {
        return 'INVALID SCORE';
    }
    if (score >= 90) {
        result = 'A';
    } else if (score >= 0) {
        result = 'B';
    }
    
    return result;
}

위와 같은 함수가 있다고 가정하겠습니다. 0~89 점까지는 B 를, 90~100 점은 A 를, 그 외의 점수에는 오류 메시지를 내보내는 함수입니다.

두 개의 if 조건문이 병렬되어있지만, 위 함수는 무리없이 작동합니다. 오류 메시지를 내보내는 조건문에 부합하는 경우 조기에 리턴하면서 함수를 종결시키기 때문입니다. 마치 else 가 있는 것처럼 작동하는 거죠.

if (score > 100 || score < 0) {
        result = 'INVALID SCORE';
    }
.
.
.
grade(-1)   // 'INVALID SCORE'
grade(110)  // 'A'

만약 위처럼 함수의 첫번째 조건문을 수정했을 경우에 함수는 어떻게 작동할까요? -1 을 점수로 넣었을 때는 문제 없이 작동합니다. 하지만 점수로 110 을 넣었더니 오류 메시지 대신 A 를 출력하는 걸 볼 수 있습니다.

110 을 점수로 넣게 되면 컴퓨터는 1차 조건문에서 result 변수에 ‘INVALID SCORE’ 를 할당합니다. 그리고 다시 2차 조건문에 진입하면서 110이란 점수가 조건에 부합하는지를 살펴보죠.

2차 조건문은 score 가 90 이상인 경우라고 되어있습니다. 110 > 90 이니 당연히 조건에 부합하면서 result 에 ‘A’ 를 할당하네요.

만약 조기에 리턴하지 않고 함수의 끝에서 한 번만 리턴하고 싶다면 어떻게 해야 할까요? 2번째 조건문을 else if 로 변경해주면 됩니다. 1이 아닌 경우 2번째로 진입하게 되는 것이죠.

이처럼 함수 안에서 return 을 사용하거나, 반복문 안에서 break, continue 를 사용할 때는 else 의 생략이 가능합니다. 절대 아무때나 else 가 생략되는 게 아니라는 걸 알아야겠네요.

profile
iOS 개발자로 전직하기 위해 공부 중입니다.

0개의 댓글