#30 TIL - JS에서 while과 do while

X's Dev·2024년 7월 4일
0

TIL

목록 보기
28/38

while, do while

이번 포스트에서는 JavaScript의 whiledo while 루프에 대해 좀 더 자세하게 알아보려 한다. 또한, while(true)를 사용하는 이유와 while에서 콜백 함수가 사용되는 사례에 대해서도 다루겠다.


while 루프

while 문은 조건이 참인 동안 계속해서 코드를 실행한다. 조건을 먼저 평가한 후에 코드 블록을 실행하기 때문에, 조건이 처음부터 거짓이라면 코드 블록은 한 번도 실행되지 않는다.

let count = 0;
while (count < 5) {
    console.log(count);
    count++;
}
// 출력: 0, 1, 2, 3, 4

위 예제에서는 count가 5보다 작을 때까지 반복문이 실행된다. 조건이 거짓이 되면 반복문이 종료된다.

do while 루프

do while 문은 코드 블록을 먼저 실행한 후에 조건을 평가한다. 따라서 코드 블록이 최소한 한 번은 실행된다.

let count = 0;
do {
    console.log(count);
    count++;
} while (count < 5);
// 출력: 0, 1, 2, 3, 4

위 예제에서는 count가 5보다 작을 때까지 반복문이 실행되며, 조건이 거짓이 되어도 코드 블록이 최소 한 번 실행된다.

while(true)를 사용하는 이유

while(true)는 무한 루프를 생성하기 위해 사용된다. 즉, 조건이 항상 참이기 때문에 반복문이 영원히 실행된다. 이는 특정 상황에서 매우 유용할 수 있지만, 잘못 사용하면 프로그램이 멈추거나 리소스를 낭비할 수 있다. 따라서 반드시 적절한 종료 조건을 포함해야 한다.


while(true) 사용 예시

  1. 서버의 지속적인 요청 처리:

    while (true) {
        let request = getNextRequest();
        if (request === null) {
            break;
        }
        processRequest(request);
    }
  2. 이벤트 루프:

    while (true) {
        let event = getNextEvent();
        if (event === "shutdown") {
            break;
        }
        handleEvent(event);
    }
  3. 사용자 입력 대기:

    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 루프

while 루프에서 콜백 함수는 비동기 작업을 처리할 때 자주 사용된다. 예를 들어, 네트워크 요청을 반복적으로 처리하거나 이벤트 핸들러를 실행할 때 콜백 함수와 함께 사용할 수 있다.

  1. 비동기 작업 처리:

    function fetchData(callback) {
        // 비동기 데이터 요청
        setTimeout(() => {
            const data = "Sample Data";
            callback(data);
        }, 1000);
    }
    
    let isDataFetched = false;
    while (!isDataFetched) {
        fetchData((data) => {
            console.log(data);
            isDataFetched = true;
        });
    }
    // 주의: 위 코드는 무한 루프가 될 수 있으므로 비동기 처리를 올바르게 관리해야 한다.
  2. 이벤트 기반 작업:

    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`);
        });
    }

주의사항

  1. 자원 낭비 방지: 무한 루프는 시스템 리소스를 계속 사용하기 때문에, 적절한 종료 조건이나 시간 지연(예: setTimeout 또는 setInterval)을 추가하여 자원 낭비를 방지해야 한다.
  2. 디버깅: 무한 루프는 디버깅이 어려울 수 있다. 코드가 의도한 대로 동작하는지 확인하기 위해 충분한 로그를 남기고, 필요한 경우 조건을 명확히 하여 예기치 않은 무한 루프를 피해야 한다.

while와 do while의 비교

  1. 실행 순서: while은 조건을 먼저 평가한 후 블록을 실행하며, do while은 블록을 먼저 실행한 후 조건을 평가한다.
  2. 최소 실행 횟수: while은 조건이 참일 때만 블록을 실행하지만, do while은 조건과 관계없이 블록을 최소 한 번 실행한다.

예시 코드

while 예시

let count = 0;
while (count < 5) {
    console.log(count);
    count++;
}
// 출력: 0, 1, 2, 3, 4

do while 예시

let count = 0;
do {
    console.log(count);
    count++;
} while (count < 5);
// 출력: 0, 1, 2, 3, 4

while(true) 예시

while (true) {
    let input = prompt("Enter a number (or type 'exit' to quit):");
    if (input.toLowerCase() === 'exit') {
        break;
    }
    console.log(`You entered: ${input}`);
}

while 루프와 콜백 함수 예시

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`);
    });
}

결론

whiledo while 루프는 조건에 따라 반복적으로 코드를 실행하는 데 사용되며, 각각의 사용 사례와 특성에 따라 적절히 선택할 수 있다. 특히, while(true)를 사용해 무한 루프를 생성할 때는 적절한 종료 조건을 명시하여 시스템 리소스를 효율적으로 관리해야 한다. 또한, while 루프에서 콜백 함수를 활용하여 비동기 작업을 처리할 수 있으며, 이를 통해 보다 유연하고 효율적인 코드를 작성할 수 있다.

profile
성장 기록하기

0개의 댓글