JavaScript 2.13

2 minute read

While과 for 반복문

  • 반복문을 사용하면 동일한 코드를 여러번 반복할 수 있다.

while 반복문

while (condition) {
		// 코드
		// 반복문 본문
}
  • condition이 참이면 반복문 본문의 코드가 실행된다.
  • 반복문 본문이 한 번 실행되는 것을 반복(iteration)이라고 부른다.
  • 반복문 조건엔 비교뿐만 아니라 모든 종류의 표현식, 변수가 올 수 있다.
    • 조건은 while에 의해 평가되고 평가 후엔 불린값으로 변경된다.

do while 반복문

  • Do while 문법을 사용하면 condition을 반복문 본문 아래로 옮길 수 있다.
do {
		// 반복문 본문
} while (condition);
  • 본문이 먼저 실행되고 조건을 확인한 후 조건이 참일 동안엔 본문이 계속 실행된다.
let i = 0;
do {
  alert( i );
  i++;
} while (i < 3);
  • do while 문법은 조건이 참인지 아닌지에 상관없이 본문을 최소한 한번이라도 실행하고 싶을 때만 사용한다.
  • 대다수의 상황에선 while이 적합하다.

for 반복문

for (begin; condition; step) {
		// 반복문 본문
}
  • Begin : 반복문에 진입할 때 단 한번 실행된다.
  • Condition : 반복마다 해당 조건이 확인된다. false이면 반복문이 멈춘다.
  • Body : 상태가 참일 동안 계속해서 실행된다.
  • Step : 각 반복의 body가 실행된 이후에 실행된다.

  • 인라인 변수 선언
    • 카운터 변수를 반복문 안에서 선언하는 것을 인라인 변수 선언이라고 한다.
for (let i = 0; i < 3; i++) {
  alert(i); // 0, 1, 2
}
alert(i); // Error: i is not defined
  • 구성 요소를 생략하는 것도 가능하다.
// begin 생략
let i = 0; // i를 선언하고 값도 할당하였습니다.

for (; i < 3; i++) { // 'begin'이 필요하지 않기 때문에 생략하였습니다.
  alert( i ); // 0, 1, 2
}

// step 생략
let i = 0;

for (; i < 3;) {
  alert( i++ );
}

// 모든 구성 요소 생략
for (;;) {
  // 끊임 없이 본문이 실행됩니다.
}
  • 구성 요소를 생략할 때 주의점은 세미콜론을 넣어주어야 한다는 점이다.

반복문 빠져나오기

  • 반복문의 조건이 거짓이 되면 반복문이 종료된다.
  • 특별한 지시자인 break를 사용하면 언제든 원하는 때에 반복문을 빠져나올 수 있다.

다음 반복으로 넘어가기

  • Continue 지시자는 현재 실행중인 이터레이션을 멈추가 본복문이 다음 이터레이션을 강제로 실행시키도록 한다.(조건을 통과할 때)
for (let i = 0; i < 10; i++) {

  // 조건이 참이라면 남아있는 본문은 실행되지 않습니다.
  if (i % 2 == 0) continue;

  alert(i); // 1, 3, 5, 7, 9가 차례대로 출력됨
}
  • 중첩을 줄이는데 도움을 준다.
for (let i = 0; i < 10; i++) {

  if (i % 2) {
    alert( i );
  }
}
  • 삼항 연산자 ?에는 break나 continue를 사용할 수 없다.

break/continue와 레이블

  • 여러개의 중첩반복문을 한번에 빠져나와야 하는 경우가 생기곤 한다.
for (let i = 0; i < 3; i++) {

  for (let j = 0; j < 3; j++) {

    let input = prompt(`(${i},${j})의 값`, '');

    // 여기서 멈춰서 아래쪽의 `완료!`가 출력되게 하려면 어떻게 해야 할까요?
  }
}

alert('완료!');
  • 반복문을 중단시키고 완료가 뜨도록 해야하는 경우 input 아래에 평범한 break 지시자를 사용하면 안쪽에 있는 반복문만 빠져나올 수 있다.
  • 하지만 중첩일 경우 충분하지 않다.(두개를 빠져나와야 하기 때문에)
  • 이럴때 레이블(label)을 사용한다.
labelName: for (...) {
  ...
}
  • 반복문 안에서 break 문을 사용하면 레이블에 해당하는 반복문을 빠져나올 수 있다.
outer: for (let i = 0; i < 3; i++) {

  for (let j = 0; j < 3; j++) {

    let input = prompt(`(${i},${j})의 값`, '');

    // 사용자가 아무것도 입력하지 않거나 Cancel 버튼을 누르면 두 반복문 모두를 빠져나옵니다.
    if (!input) break outer; // (*)

    // 입력받은 값을 가지고 무언가를 함
  }
}
alert('완료!');
  • 레이블을 별도의 줄에 써주는 것도 가능하다.
outer:
for (let i = 0; i < 3; i++) { ... }
  • break와 continue는 반복문 안에서 사용할 수 있고, 레이블을 반드시 break나 continue 지시자 위에 있어야 한다.

Categories:

Updated: