제어문은 전체 프로그램의 일부의 실행을 제어하는 등, 전체적인 코드의 실행 흐름을 제어하는데 사용되는데요.
이러한 제어문은 주로 코드 블록 내({})에서 특정 명령 및 작업이 수행되도록 코드를 작성하게 되며 크게 반복문, 조건문, 함수 선언문 등이 존재하며, 이번 장에서는 특정 조건에 따라 분기를 나누고, 해당 코드를 실행하는 조건문을 살펴보겠습니다.
- if_else문 : 조건문은 제어문 하면 반복문과 함께 대표되는 선언문 입니다.
우선 if_else문은 조건의 여부를 참, 거짓으로 따져보아 참일 경우와 거짓일 경우에 해당하는 코드 블록 내 코드문이 실행되는데, if문과 else문 두 개의 조건으로 작성된 경우 if(참)과 else(참에 반대되는 거짓)의 경우를 따지지만 else if가 추가될 경우 다른 조건에서의 코드 실행 또한 작성이 가능합니다.
이러한 if_else문의 경우 간단한 조건의 경우에는 오히려 if_else문 보다 삼항 조건연산자를 사용하는 경우도 있기 때문에 모든 경우에 if_else문을 작성하는 것보다는 코드의 가독성 및 로직의 단순한 정도를 따져보아 적절한 조건문을 사용하는 스킬이 필요합니다.
또 한 if_else문을 사용할 때 각각의 조건에 부합하는 코드 블록 내 명령문이 실행 될 때 단행만 존재 할 경우는 코드 블록을 지정하지 않고 사용이 가능하나, 다행일 경우에는 반드시 코드 블록 내에서 각각의 명령문을 작성해야 하기에 왠만해서는 단행의 경우에도 코드 블록을 지정하여 사용하는 방식이 권장됩니다.
// 기본 if_else문 예시) let A = 10; let B = 20; if(A>B){ // 만약 A가 B보다 크면 console.log("A is Big than B"); // A is Big than B 문구 출력) 단행일 경우 코드 블록 ({}) 생략 가능 }else if(B<A){ // 두번째 조건문, 즉 A가 B 보다 작으면 console.log("B is Big than A"); // B is Big than A 문구 출력) }else{ console.log("Both is Same"); // 위의 조건들 그 어디에도 해당되지 않는 경우 else문이 실행됩니다. } // 코드 블록 생략의 예 if(A>B) console.log("A is Big than B"); // 단행일 경우 한 줄에 작성이 가능합니다. //Truthy와 Falsy 조건 취급을 이용한 if_else문 예시 let C = 1 // 리터럴 1은 자바스크립트에서 Truthy의 값으로 취급되기 때문에 if(C){ // C는 1, 곧 true로 취급 되므로 console.log("is True") // true 조건의 코드 블록 명령문이 실행됩니다. }else{ console.log("is False") } let C = 0 // 리터럴 0은 자바스크립트에서 Falsy의 값으로 취급되기 때문에 if(C){ // C는 0, 곧 false로 취급 되므로 console.log("is True") }else{ console.log("is False") // false 조건의 코드 블록 명령문이 실행됩니다. } // 이중 중첩문을 활용한 예시) let randomNumber = Math.floor(Math.random()*10) +1; // 1부터 10까지 랜덤한 값을 randomNumber에 생성 if(randomNumber >= 1 && randomNumber < 5){ if(randomNumber === 2 || randomNumber === 4) console.log("랜덤값은 1이상, 5 미만의 2 또는 4 입니다.") }else{ console.log("랜덤값은 5 이상 입니다.") }
- switch문 : switch문은 변수(선택지)가 조건에 입력되면 해당 case문의 표현식으로 이동하여 명령문을 수행합니다.
주로 선택지가 명확한 경우에 사용되며, break 키워드와 같이 사용해야 한다는 점에 특히 주의를 기울여야 합니다.
만약 개발자가 의도한 대로 특정 조건에 맞는 case문의 코드가 실행될 때 break문을 적지 않았다면 해당 case문을 실행한 후에도 다른 break문을 만나지 않는 한 연속된 case문을 순차적으로 실행하기 때문이며, 이 때에는 전체 switch문의 끝까지 가서야 비로소 종료가 됩니다.
// switch문 예시) const fs = require('fs'); const numberIs = Number(fs.readFileSync(0).toString().trim()); // 사용자로부터 동적으로 값을 읽어오기 위한 명령문 switch(numberIs) case 1: // 단행으로도 사용이 가능한데 현재의 케이스의 경우 case 1 밑의 코드를 실행하면서 console.log("1을 입력하셨습니다.") break; //break문을 만나 switch문을 종료합니다. case 2: case 3: case 4: // 혹은 한 줄이나 바로 밑 줄에 연속해서 case를 작성해도 되는데, 이 경우 case 2, 3, 4가 한 쌍의 묶음이 되어 세 케이스 중에 하나만 선택 되어도 아래의 콘솔 출력문이 실행된다고 보시면 됩니다. console.log("2혹은 3 혹은 4를 입력하셨습니다.") break;// break문을 만나 종료. case 5: // 이 코드문의 경우 사용자가 5를 입력할 때 바로 아래만 실행되는 것 뿐만 아니라 그 밑에 case 6,7 까지 실행된 후 break문을 만나 비로소 switch문이 종료됩니다. console.log("5를 입력하셨습니다.") case 6: console.log("6를 입력하셨습니다.") case 7: console.log("7를 입력하셨습니다.") break; default: // 만약 case문의 조건에 해당하는 case문이 switch문 내에 존재하지 않는다면 swtich문은 default의 명령문으로 실행됩니다. console.log("1,2,3,4를 제외한 값을 입력하셨습니다.") break;
★ break문은 코드의 순차적 실행을 종료하고 해당 루프문을 강제 종료시키는 키워드 입니다. switch문에서는 필수로 사용되며 주로 for, while문에서 사용되므로 해당 장에서는 위에서 언급한 break문의 동작만 알아두셔도 충분합니다.
이 외에도 다음 링크의 삼항 조건 연산자도 대표적인 조건문 중에 하나이므로 참고하시길 바랍니다.