Javascript

반복문

하루 2021. 12. 28. 15:33

for

어떤 유한한 횟수만큼 반복할 때는 for문을 사용한다.

특정 숫자를 가지고 숫자의 값을 비교하고, 증감해주면서 반복한다.

for (초기 구문; 반복 조건; 변화 구문(=반복이 된 후 실행되는 코드)) { 반복이 되는 코드 블럭 }

for (let i = 0; i < 10; i++) {
  console.log(i);
}
// 0 부터 9 까지 출력
  • for (a; b; c) {d} e
  • 반복이 실행되는 순서: a - d - c- b - d - c - b - e
  • 반복문 즉시 종료: 반복되는 블럭 안에서 break 를 실행한다.
  • 반복되는 블럭 안에서 continue 를 만나면 거기서 해당 순서를 건너뛰고 다음 반복을 실행한다.
  • for (;;) {d} : 무한루프. 반복조건을 작성하지 않은 코드 d 무한 반복
// 초기화 하면서 선언된 변수를 중괄호 안 반복 블럭에서 사용할 수 있다.
for (let i = 0; i < 5; i++) {
	console.log('안녕하세요', i);
}
for (let i = 0, j = 5; i < 5; i++) {
	console.log('안녕하세요', i, j);
}
for (let i = 0, j = 2; i < 5; i++, j = j * j) {
	console.log('안녕하세요', i, j);
}

// 반복문을 즉시 종료하고 싶을 때는 반복되는 블럭 안에서 break; 를 실행하면 가능하다.
for (let i = 0; i < 5; i++) {
	if (i > 2) {
    	break;
    }
    console.log('안녕하세요', i);
}

// 반복되는 블럭 안에서 continue; 를 만나면 거기서 바로 해당 블럭은 종료한다.
// 그리고 이와 같이 다음 반복이 있으면 다음 반복으로 넘어간다.
for (let i = 0; i < 5; i++) {
	console.log(i);
    if (i < 2) {
    	continue;
    }
    console.log('안녕하세요', i);
}
// for 무한 루프

for (;;) {
	console.log('안녕하세요');
    if (Math.random() * 100 > 90) {   // 랜덤한 값이 90이 이상이 나오면 break;
    	break;
    }
}

 

배열과 for

const names = ['멍멍이', '야옹이', '멍뭉이'];

for (let i = 0; i < names.length; i++) {
  console.log(names[i]);
}

이와 같이 작성하면 배열 안에 있는 원소들을 하나하나 나열할 수 있다. 

 

while

while문은 특정 조건이 참이라면 계속해서 반복하는 반복문이다.

for문이 숫자의 값을 비교하고 증감하며 반복한다면, while문은 조건을 확인만 하면서 반복한다.

조건이 거짓이 될 때까지 코드를 반복한다. 조건을 먼저 판단 후, 코드를 실행한다. 때문에 조건문 내부에서 변화를 직접 주어야 한다.

while (조건) { 조건이 거짓이 될 때까지 반복 실행 }

let i = 0;
while (i < 10) {
  console.log(i);
  i++;
}

while문을 사용할 때에는 조건문이 언젠가 false가 되도록 신경써야 한다. 조건문이 언젠가 false로 전환되지 않는다면 반복문이 끝나지 않고 무한루프에 빠지게 된다.

 

do while

do { 조건이 거짓이 될 때 까지 반복 실행 } while (조건);

코드를 먼저 실행 후, 조건을 판단한다.

while과 다른 점은 무조건 코드가 먼저 실행되기 때문에 조건에 의해 값이 맞지 않더라도 한 번은 실행되게 된다.

do {
  console.log('안녕하세요');
} while (Math.random() * 100 <= 90);

 

for...of

  • 배열에 관한 반복문을 돌리기 위해 만들어진 반복문이다.
  • iterable한 개체에 모두 사용가능하다. (*iterable: 반복할 수 있는)
  • iterable한 프로토콜을 자체적으로 내장하고 있는 개체: 배열 등에 사용하면 요소가 하나씩 순서대로 출력된다.
for (const i of [1, 2, 3]) {
	console.log(i);
}
// 1 2 3
사실 이 구문은 배워놔도 사용 할 일이 별로 없다. 보통 배열을 반복할 때에는 배열의 내장함수를 많이 사용한다. 그래도 알아는 두자.

 

for...in

  • 객체를 위한 반복문
  • 모든 프로퍼티에서 사용 가능 (객체에서도 가능)
  • 객체 안에 있는 프로퍼티 하나하나를 for in을 통해서 반복한다.
  • runtime 환경에 따라 다르게 작동할 수 있으므로 주의해서 사용한다.
const doggy = {
  name: '멍멍이',
  sound: '멍멍',
  age: 2
};

for (let key in doggy) {
  console.log(`${key}: ${doggy[key]}`);
}

 

break와 continue

반복문 안에서는 breakcontinue 를 통하여 반복문에서 벗어나거나, 그 다음 루프를 돌게끔 할 수 있다.

for (let i = 0; i < 10; i++) {
  if (i === 2) continue; // 다음 루프를 실행
  console.log(i);
  if (i === 5) break; // 반복문을 끝내기
}

i 가 2 일 땐 continue 를 하여 원래 console.log 를 해야 하지만 그 코드를 수행하지 않고 바로 3으로 넘어간다.

i 가 5 일 땐 break 를 하여 반복문을 종료시킨다.