이번 포스트에서는 JavaScript의 while
과 do while
루프에 대해 좀 더 자세하게 알아보려 한다. 또한, while(true)
를 사용하는 이유와 while
에서 콜백 함수가 사용되는 사례에 대해서도 다루겠다.
while
문은 조건이 참인 동안 계속해서 코드를 실행한다. 조건을 먼저 평가한 후에 코드 블록을 실행하기 때문에, 조건이 처음부터 거짓이라면 코드 블록은 한 번도 실행되지 않는다.
let count = 0;
while (count < 5) {
console.log(count);
count++;
}
// 출력: 0, 1, 2, 3, 4
위 예제에서는 count
가 5보다 작을 때까지 반복문이 실행된다. 조건이 거짓이 되면 반복문이 종료된다.
do while
문은 코드 블록을 먼저 실행한 후에 조건을 평가한다. 따라서 코드 블록이 최소한 한 번은 실행된다.
let count = 0;
do {
console.log(count);
count++;
} while (count < 5);
// 출력: 0, 1, 2, 3, 4
위 예제에서는 count
가 5보다 작을 때까지 반복문이 실행되며, 조건이 거짓이 되어도 코드 블록이 최소 한 번 실행된다.
while(true)
는 무한 루프를 생성하기 위해 사용된다. 즉, 조건이 항상 참이기 때문에 반복문이 영원히 실행된다. 이는 특정 상황에서 매우 유용할 수 있지만, 잘못 사용하면 프로그램이 멈추거나 리소스를 낭비할 수 있다. 따라서 반드시 적절한 종료 조건을 포함해야 한다.
서버의 지속적인 요청 처리:
while (true) {
let request = getNextRequest();
if (request === null) {
break;
}
processRequest(request);
}
이벤트 루프:
while (true) {
let event = getNextEvent();
if (event === "shutdown") {
break;
}
handleEvent(event);
}
사용자 입력 대기:
while (true) {
let input = prompt("Enter a number (or type 'exit' to quit):");
if (input.toLowerCase() === 'exit') {
break;
}
console.log(`You entered: ${input}`);
}
위 예제들은 각각 특정 종료 조건(break
문)이 있어 무한 루프에서 벗어날 수 있도록 설계되어 있다.
while
루프에서 콜백 함수는 비동기 작업을 처리할 때 자주 사용된다. 예를 들어, 네트워크 요청을 반복적으로 처리하거나 이벤트 핸들러를 실행할 때 콜백 함수와 함께 사용할 수 있다.
비동기 작업 처리:
function fetchData(callback) {
// 비동기 데이터 요청
setTimeout(() => {
const data = "Sample Data";
callback(data);
}, 1000);
}
let isDataFetched = false;
while (!isDataFetched) {
fetchData((data) => {
console.log(data);
isDataFetched = true;
});
}
// 주의: 위 코드는 무한 루프가 될 수 있으므로 비동기 처리를 올바르게 관리해야 한다.
이벤트 기반 작업:
let tasks = ["task1", "task2", "task3"];
function processTask(task, callback) {
console.log(`Processing ${task}`);
callback();
}
while (tasks.length > 0) {
let currentTask = tasks.shift();
processTask(currentTask, () => {
console.log(`${currentTask} done`);
});
}
setTimeout
또는 setInterval
)을 추가하여 자원 낭비를 방지해야 한다.while
은 조건을 먼저 평가한 후 블록을 실행하며, do while
은 블록을 먼저 실행한 후 조건을 평가한다.while
은 조건이 참일 때만 블록을 실행하지만, do while
은 조건과 관계없이 블록을 최소 한 번 실행한다.let count = 0;
while (count < 5) {
console.log(count);
count++;
}
// 출력: 0, 1, 2, 3, 4
let count = 0;
do {
console.log(count);
count++;
} while (count < 5);
// 출력: 0, 1, 2, 3, 4
while (true) {
let input = prompt("Enter a number (or type 'exit' to quit):");
if (input.toLowerCase() === 'exit') {
break;
}
console.log(`You entered: ${input}`);
}
let tasks = ["task1", "task2", "task3"];
function processTask(task, callback) {
console.log(`Processing ${task}`);
callback();
}
while (tasks.length > 0) {
let currentTask = tasks.shift();
processTask(currentTask, () => {
console.log(`${currentTask} done`);
});
}
while
과 do while
루프는 조건에 따라 반복적으로 코드를 실행하는 데 사용되며, 각각의 사용 사례와 특성에 따라 적절히 선택할 수 있다. 특히, while(true)
를 사용해 무한 루프를 생성할 때는 적절한 종료 조건을 명시하여 시스템 리소스를 효율적으로 관리해야 한다. 또한, while
루프에서 콜백 함수를 활용하여 비동기 작업을 처리할 수 있으며, 이를 통해 보다 유연하고 효율적인 코드를 작성할 수 있다.