[모던 자바스크립트 튜토리얼] 2.13 while과 for 반복문

개발견 배도르만·2023년 3월 1일
0
post-thumbnail

🔁반복문(Loop)

개발 시 특정 동작을 여러 번 반복해야 하는 경우에 사용하는 구문

while 반복문

while (condition) {
  // 코드
  // '반복문 본문(body)'이라 불림
}

조건(condition)이 truthy(참 같은 값, 불린 형태를 기대하는 문맥에서 true로 평가되는 값)인 경우에 실행되며 falsy인 경우 실행하지 않는다.

본문이 한 번 실행되는 것을 반복(iteration)이라고 한다.
조건을 설정하고, 조건에 포함되는 인수를 조작하여 원하는 반복을 얻는 방식으로 사용된다.

let i = 0;
while (i < 3) { // 0, 1, 2가 출력됩니다.
  alert( i );
  i++;
}

본문이 한 줄이면 중괄호를 쓰지 않아도 된다.

let i = 3;
while (i) alert(i--);

do while 반복문

while문의 조건을 본문 아래로 옮겨 사용하는 방식.

do {
  // 반복문 본문
} while (condition);

//예시
let i = 0;
do {
  alert( i );
  i++;
} while (i < 3);

조건과 별개로 최소 한 번은 실행하고자 할 때 사용한다.
대부분의 상황에서는 while문보다 사용도가 떨어진다.

for 반복문

while 반복문보다는 복잡하지만 가장 많이 쓰이는 형태의 반복문

for (begin; condition; step) {
  // ... 반복문 본문 ...
}

실행 순서

1) begin 실행
2) condition 확인
3) condition이 truthy일 경우 본문 실행, falsy일 경우 반복문 중단(건너뛰는 것이 아닌 종료)
4) step 실행

두 번째 반복부터는 begin을 실행하지 않고 조건 확인부터 step까지만 실행됨.

//예시
for (let i = 0; i < 3; i++) { // 0, 1, 2가 출력됩니다.
  alert(i);
}

//위 예시의 실행 순서
let i = 0;
if(i < 3) alert(i++) // i가 0이었고, alert출력 이후 1
if(i < 3) alert(i++) // i가 1이었고, alert출력 이후 2
if(i < 3) alert(i++) // i가 2이었고, alert출력 이후 3
if(i < 3) alert(i++) // i가 3이므로 break

위 예시의 경우 변수 i를 for문 안에서 선언했다. 이를 인라인 변수 선언이라고 부르며 반복문 안에서만 접근 가능하다.

구성요소 생략

for문 구성요소는 생략가능하다.

let i = 0; // i를 선언하고 값도 할당

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

let j = 0;

for (; j < 3;) { // 'begin'과 'step'을 생략
  alert( i++ );
}

for (;;) { // 'begin', 'condition', 'step'을 생략
  // 끊임 없이 본문이 실행됩니다.
}

생략 시 주의사항이 있다. for문은 항상 두 개의 세미콜론(;)을 가진다는 것.

break - 반복문 빠져나오기

조건이 falsy가 아니더라도 본문에서 break 지시자를 사용하면 반복문을 종료할 수 있다.

continue - 다음 반복으로 넘어가기

continue 지시자는 반복문을 종료하지 않지만 현재 반복을 멈추고 다음 반복을 실행한다.

for (let i = 0; ; i++) { //조건 생략하여 무한 반복의 가능성이 있음

  if (i >= 10) break; // 조건이 생략되어도 break를 통해 반복문 종료
  if (i % 2 == 0) continue;// 조건이 참이라면 남아있는 본문은 실행되지 않음

  alert(i); // 1, 3, 5, 7, 9가 차례대로 출력됨
}

break, continue 지시자는 문법적으로 ? 뒤에 사용할 수 없다. 따라서 삼항연산자에 사용될 수 없다. 주의!

break/continue와 레이블

여러 개의 중첩 반복문에서 break, continue 사용 시 대상 반복문을 지정할 수 있다.

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

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

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

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

alert('완료!');

위의 경우 사용자가 cancel 버튼을 눌렀을 때 두 개의 반복문 모두 빠져나와야 하지만 break 사용만으로는 하위 for문만 종료시킬 수 있다. 이 때 레이블을 사용하면 상위 for문을 지정하고 종료할 수 있다.
레이블(label)은 반복문 앞에 콜론과 함께 쓰이는 식별자이다.
다음과 같이 사용할 수 있다.

labelName: for (...) {
  ...
}

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('완료!');

continue와 레이블을 사용하면 지정한 반복문의 현재 반복을 종료하고 다음 반복을 실행할 수 있다.

레이블 사용시 주의사항은 레이블 지정이 break, continue보다 위에서 작성되어야 적용가능하다는 점이다.

//불가능 예시
break label; // 아래 for 문으로 점프할 수 없습니다.

label: for (...)

✍️ 정리

  • 반복문은 특정 코드를 반복 실행할 때 사용되는 구문
  • while문, do while문, for문이 있음
  • while : 조건이 truthy일 때 이터레이션(각 반복) 실행
  • do while : 이터레이션 실행 후 조건 확인
  • for : 조건 확인 후 반복 실행, 추가 세팅 가능
  • break, continue 지시자를 통해 반복 및 반복문 탈출 가능
  • label 지정으로 중첩 반복문에서 break와 continue의 대상 지정 가능
profile
네 발 개발 개

0개의 댓글