📢 어렵고 정석적인 개념 설명보다는 저같은 초보자도 이해하기 쉽게 정리하는 것을 원칙으로 포스팅하고 있습니다. 😄
문제
여러 조건이 들어가 있는 함수를 만든다고 가정해보자. 단순히 if문을 이용하면 쉽게 구현될 함수이다.
우리가 알고 있는 if문은 if (조건) {수행} else {수행} ... 이런 식으로 참인 조건을 기준으로 진행된다.
하지만, 이런 방법은 중첩 if문을 만들어서 if문 안에 if문, 또 그 안에 if문... 식으로 더 복잡해질 수 있다.
이를 해결하기 위해서는, 참이 아닌 부정 조건을 기준으로 if문을 진행하면 된다.
즉, if (!조건) {return ...} 이런 식으로 return을 이용해서 먼저 예외 사항들을 걸러주는 방식인 것이다.
설명으로는 어려울 수도 있으니 직접 코드로 확인해보자!
방법
function exam(subject, state, num) {
if (subject === '국어'){
if (state === '상'){
if (num >= 90){
console.log("참 잘했어요!");
} else {
console.log("노력하세요.");
}
} else {
console.log("노력하세요.");
}
} else {
console.log("노력하세요.");
}
}
exam('국어', '상', 92); // "참 잘했어요!"
'국어' 과목에서 '상' 등급의 90점 이상의 경우 "참 잘했어요!"라는 메시지를 콘솔에 출력하는 함수를 만들어봤다.
여러 조건들이 얽힌 경우 단순히 if문만을 이용하여 구현이 되면, 위처럼 중첩 if문이 만들어져서 보기 불편해지는 경우가 생길 수 있다. 그럴 땐, 일반적인 if문의 "~이면 ~해라"가 아닌 "~가 아닐 땐 ~를 제외해라"로 만들어보자.
function exam(subject, state, num) {
if (subject !== '국어') return console.log("노력하세요.");
if (state !== '상') return console.log("노력하세요.");
if (num < 90) return console.log("노력하세요");
return console.log("참 잘했어요!");
}
else를 위로 올려 부정을 기준으로 if문을 작성하면 위처럼 매우 깔끔하게 if문을 사용할 수 있다.
주의할 점은 예외의 경우를 함수를 바로 종료시키기 위해서 return을 잊지 말고 써줘야 한다.
그리고 예외에 모두 해당되지 않는 경우, 결과적으로 도출할 값을 마지막 함수의 return 값으로 전달해주면 끝이다.
// a가 참인 경우에 메시지를 출력하라!
function test(a){
if (a){
console.log('Correct!');
}
}
// a가 거짓인 경우에는 함수를 종료시키고, 해당하지 않은 경우(a가 참인 경우)에는 메시지를 출력하라!
function test2(a){
if (!a) return;
return console.log('Correct!')
}
구조를 단순화하자면 위와 같다. 우리가 일반적으로 쓰는 첫 번째 test 함수는 a가 참이면 'Correct!'를 출력하는 것이고, 두 번째 test2 함수는 a가 거짓일 때 return으로 함수를 종료시키고 그 외의 경우엔 'Correct!'를 출력하는 것이다.
두 가지 함수의 의미는 같다. 하지만, 구조가 다르다. 첫 번째는 참을 기준으로 '~인 경우에는 ~를 해라'이고 두 번째는 예외(거짓)를 기준으로 '~가 아닌 경우에는 함수를 종료시키고, 참인 경우에만 ~를 해라'이다.
단순 if문을 사용하는 경우에는 첫 번째가 사용하기도 쉽고 보기도 편하다. 하지만, if문이 많아지고 if문 안에 if문이 들어오는 중첩 if문이 있는 경우에는 두 번째 방식인 예외(else)를 먼저 거르는 방법을 사용해보자!
1. 중첩 if문을 사용할 땐, 예외를 먼저 거른 다음 나머지 값을 return 하도록 하면 깔끔하게 사용할 수 있다.
'JavaScript' 카테고리의 다른 글
[JavaScript] 스프레드 연산자(Spread Operator)를 쓰는 이유 (0) | 2022.11.23 |
---|---|
[Javascript] <script>의 위치에 대한 고찰 (async, defer, onload) (0) | 2022.11.12 |
[JavaScript] undefined와 null은 무엇이 다른걸까? (0) | 2022.08.01 |
[JavaScript] Date()를 활용한 카운트다운 타이머 만들기 (0) | 2022.05.24 |
[JavaScript] 배열의 원소를 정렬해주는 sort() 함수 (0) | 2022.05.21 |