
코드를 짜다 보면 그냥 위에서 아래로 줄줄 실행하는 걸로는 안 된다. 상황에 따라 코드 길목을 갈라버려야 하고, 예기치 못한 사고에는 에러를 두들겨 패서 제압해야 한다.
JavaScript는 이런 경우를 위해 다양한 제어 흐름(control flow) 문과 에러 처리(error handling) 문을 제공한다. 아래에서 주요 개념과 예시를 살펴보자.
중괄호 {} 안에 여러 문을 묶어 하나의 단위로 만든다.
{
statement1;
statement2;
}
예를 들어, while 같은 반복문과 함께 사용된다.
while (x < 10) {
x++;
}
👉 블록 문 안에서 var로 선언한 변수는 블록 밖에서도 그대로 보인다. 반면 let과 const는 블록 안에서만 유효하다.
var x = 1;
{
var x = 2;
}
console.log(x); // 2
조건식이 참일 때와 거짓일 때 실행할 문을 나눈다.
if (condition) {
statement1;
} else {
statement2;
}
조건이 여러 개라면 else if로 이어 붙인다.
if (score >= 90) {
grade = "A";
} else if (score >= 80) {
grade = "B";
} else {
grade = "C";
}
👉 항상 중괄호 {}를 써서 가독성과 안전성을 지키는 게 좋다.
조건문에서 거짓으로 평가되는 값은 다음과 같다:
falseundefinednull0NaN"" (빈 문자열)그 외의 값은 모두 참으로 평가된다. 특히 객체는 비어 있어도 무조건 참이다.
if (new Boolean(false)) {
console.log("실행됨!"); // true 취급
}
여러 경우의 수를 다룰 때 switch 문을 사용한다.
switch (fruit) {
case "Apple":
console.log("사과는 500원");
break;
case "Banana":
console.log("바나나는 300원");
break;
default:
console.log("해당 과일 없음");
}
👉 break를 쓰지 않으면 다음 case까지 실행이 이어진다. 필요한 경우 의도적으로 break를 빼서 “fall-through”를 활용할 수 있다.
break는 반복문이나 switch 문에서 흐름을 즉시 종료할 때 사용한다.
for (let i = 0; i < 5; i++) {
if (i === 3) break;
console.log(i);
}
// 0, 1, 2까지만 출력
👉 label과 함께 쓰면 특정 외부 루프만 골라 끊을 수도 있다.
outer: for (let i = 0; i < 3; i++) {
for (let j = 0; j < 3; j++) {
if (j === 1) break outer;
console.log(i, j);
}
}
// (0,0)만 출력하고 외부 루프까지 종료
예외를 직접 발생시킬 수 있다.
throw "문자열 오류";
throw new Error("잘못된 입력");
문제가 생길 수 있는 부분을 try로 감싸고, 에러가 발생하면 catch가 처리한다.
try {
riskyOperation();
} catch (err) {
console.error(err);
}
예외 발생 여부와 상관없이 반드시 실행되는 부분이다. 파일 닫기, 리소스 정리 등에 자주 쓰인다.
try {
openMyFile();
} catch (e) {
console.error(e);
} finally {
closeMyFile(); // 무조건 실행
}
👉 finally는 return이나 throw보다 우선한다. 따라서 기존 반환값이나 예외를 덮어쓸 수 있으니 주의해야 한다.
Error 객체를 활용하면 에러를 더 체계적으로 다룰 수 있다.
try {
throw new Error("문제가 발생했습니다");
} catch (e) {
console.error(e.name); // Error
console.error(e.message); // 문제가 발생했습니다
}
👉 단순히 "문자열"을 던지는 것보다 Error 객체를 쓰는 편이 유지보수에 유리하다.
{}으로 여러 문을 묶는다.if...else와 switch로 흐름을 제어한다.false, 0, "", null, undefined, NaN 여섯 가지뿐이다.👉 쉽게 말하면, 조건문은 갈림길 지도, 예외 처리는 안전망이라고 보면 된다.