2024/03/22 반복문

YIS·2024년 3월 22일
post-thumbnail

while 반복문

특정 조건(condition)이 참(true)인 동안 코드 블록을 반복해서 실행하는 구문
반복문 조건엔 비교뿐만 아니라 모든 종류의 표현식, 변수가 올 수있음.
조건은 while에 의해 평가되고, 평가 후엔 불린값으로 변경
반복문 내에서 조건이 언젠가는 거짓이 될 수 있도록 만들어야함. 그렇지 않으면 무한 루프


기본문법
while (condition) { // 조건이 참인 동안 실행할 코드 }

let count = 0;

while (count < 5) {
  console.log(`count 값은 ${count}입니다.`);
  count++; // count 값을 1씩 증가시킴
}

변수 count는 0부터 시작해서 5보다 작을때까지 반복함.
각 반복마다 값을 콘솔에 출력하고 count를 1씩 증가시킴.
count가 5가되면 조건이 거짓되어 반복종료.

let inputs = [5, 10, 15, -1, 20]; // 사용자 입력을 대신할 배열
let index = 0; // 현재 입력 배열의 인덱스
let sum = 0; // 입력된 숫자들의 합

while (true) { // 무한 루프
  let input = inputs[index]; // 현재 인덱스의 입력값을 가져옴
  if (input === -1) {
    break; // 입력값이 -1이면 반복문을 종료
  }
  sum += input; // 입력값을 합계에 더함
  index++; // 다음 입력값으로 이동
}

console.log(`입력된 숫자들의 합: ${sum}`); //30

특정값 -1이 입력되는 순간 반복문이 종료되는 코드다.
input 변수를 선언함과 동시에 inputs[index] 값을 넣어줌.
초기 index는 0니까 inputs 0번째 배열 5가 입력.
변수 sum에 더한후 그값을 sum에 넣어줌. index 1증가 .
input 10,15까지 sum에 더해서 값을 넣어주고 inputs[3]값인 -1이되는 순간 반복문 탈출
그전까지 더한값인 30이 출력.



do…while 반복문

최소 한 번의 코드 실행을 보장하는 반복문.
조건 검사를 반복문의 끝에서 수행하기 때문에,
조건(condition)의 참/거짓 여부와 상관없이 반복문 내의 코드가 최소 한 번은 실행됨.
사용자로부터 최소 한 번의 입력을 받아야 하거나, 특정 작업을 최소 한 번 실행한 후 조건을 검사해야 하는 경우에 유용하게 사용


기본문법
do { // 코드 블록 // 반복 실행될 코드 } while (condition);

  • 코드 블록 : 조건의 참/거짓 여부와 상관없이 최소 한 번은 실행.
  • condition(조건) : 코드 블록 실행 후 이 조건이 참(true)이면 코드 블록이 반복 실행됨.
    조건이 거짓(false)이 되면 반복문이 종료.
let result = '';
let i = 0;

do {
  i += 1; // i의 값을 1씩 증가
  result += i + ' '; // 현재 i의 값을 result 문자열에 추가
} while (i < 5);

console.log(result); // 출력: "1 2 3 4 5 "

result에 빈문자열이 , i에는 0이 각각 선언되고 값을 가짐.
i += 1;은 사실 i++과는 미묘한 차이가 있음. 밑에 예시를보자

let i = 5;
console.log(i++); // 출력: 5
console.log(i);   // 출력: 6
  let i = 5;
console.log(i+=1); // 출력: 6

쉽게말하면 위 i++은 +되기전 i값을 사용한후 그다음에 1을 증가시킴.
i+=1은 결국 i=i+1;이라서 바로 그자리에서 사용후 증가됨. 다시 본 예시로
result 에 result+(i+"공백")이라는 소리임.
result는 빈문자열이고 i는숫자, " "공백은 문자열임. 숫자와 문자열을 +하면 문자열로 변환됨.
result = ""+"1 " . result에 "1 "이 할당되고 ,i가 5보다 작을때까지 반복하게됨



for 반복문

반복적인 작업을 수행하기 위해 사용하는 가장 기본적인 구문
특정 조건이 참인 동안 코드 블록을 반복적으로 실행


기본문법
for (begin(초기화); condition(조건); step(반복 후 작업)) { // 반복해서 실행할 코드 }

  • begin : 반복문이 시작될 때 단 한 번 실행되는 표현식.
    보통 반복문에서 사용할 변수를 초기화하는데 사용.
  • condition : 각 반복의 시작 전에 평가되는 표현식. 이 조건이 참(true)으로 평가되면 반복문의 코드 블록이 실행. 조건이 거짓(false)으로 평가되면 반복문이 종료.
  • step : 코드 블록의 실행이 끝날 때마다 실행되는 표현식.
    보통 반복문에서 사용하는 변수의 값을 증가시키거나 감소시키는 데 사용.
const fruits = ['사과', '바나나', '체리'];

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

반복문이 시작되기전 변수 i를 0선언후 ,
i값이 fruits의 배열의 길이===3보다 작을때까지 반복후 코드가 실행된후 i값을 1씩 증가.
fruits[0번째인덱스]인 사과부터, 1번째 인덱스바나나, 2번째 인덱스 체리까지 콘솔에 나오고 종료됨.

for (let i = 0; i < 3; i++) {
  for (let j = 0; j < 2; j++) {
    console.log(`i의 값: ${i}, j의 값: ${j}`);
//i의 값: 0, j의 값: 0
//i의 값: 0, j의 값: 1
//i의 값: 1, j의 값: 0
//i의 값: 1, j의 값: 1
//:40 i의 값: 2, j의 값: 0
//:40 i의 값: 2, j의 값: 1
  }
}

for 문은 중첩 사용도 가능함. 이와 같은 경우 바깥쪽 반복문이 한 번 실행될 때,
안쪽 반복문은 전체를 실행하고 바깥쪽 반복문으로 빠져나와서,
다시 바깥쪽 반복문 한번 실행 후 다시 안쪽 반복문 전체... 이런 식으로 돌아감.
i가 0에서 안쪽 반복문진입. j는 0출력후 다시반복, 1출력후 다시반복.
2가되는 순간 조건이 false가 되서 바깥반복문으로 나옴. i는 1되고 다시 안쪽 반복문...

let i;

for (i = 0; i < 3; i++) { // 기존에 정의된 변수 사용
  console.log(i); // 0, 1, 2
}

console.log(i); // 3, 반복문 밖에서 선언한 변수이므로 사용할 수 있음

이런식으로 카운터변수를 반복문 밖에서도 선언후 정의되어있는 변수를 사용할수도 있음.

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

for (; i < 3;) { // 'begin','step' 생략가능
  console.log(i++); // 0, 1, 2
}

이런식으로 begin(초기화)부분,step(반복 후 작업)을 생략도 가능은 함.(근데 딱히?)



반복문 빠져나오기

break

보통은 조건이 falsy가 되면 종료됨.
break 구문은 반복문을 즉시 종료시키고 언제든 원하는 때 반복문을 빠져나올 수 있음.
break는 for, while, do...while 반복문 뿐만 아니라 switch문 내에서도 사용할 수 있음.

for (let i = 0; i < 10; i++) {
  if (i === 5) {
    break; // i가 5가 되면 반복문을 종료
  }
  console.log(i); // 0, 1, 2, 3, 4 출력 후 종료
}

i가 10보다 작을때까지 반복이지만 안에 조건이 5일때 break로 반복문 정지시킴.

 let sum = 0;

    while (true) {
	  let value = Number(prompt("숫자를 입력하세요.", ''));
      if (!value){
         break;
      } 
       sum += value;
    }
    console.log(`합계: ${sum}`);

while(true) 무한 반복문안에 value변수에 prompt로 숫자값을 입력받음.
그리고 그 값을 변수 sum에 저장시킴.
!value는 논리적 부정을 나타냄. 즉, value가 거짓(falsy)으로 평가될 때 true가 되어 if 조건문이 실행됨. 숫자를 넣으면 value가 참이됨. false가 되어 조건문을 실행하지않음.



continue

전체 반복문을 멈추지는 않음.
대신에 현재 반복을 즉시 종료하고, 반복문의 다음 반복으로 넘어감.
for 반복문의 경우 step 부분으로 이동하고, while 또는 do...while 반복문의 경우 조건 검사로 돌아감.
특정 조건을 만족하는 경우에만 반복문 내의 특정 코드를 건너뛰고 싶을 때 사용하면 좋음.

for (let i = 0; i < 10; i++) {
if (i % 2 == 0){
  continue; // 조건이 참이라면 남아있는 본문은 실행되지 않음
}
console.log(i); // 1, 3, 5, 7, 9가 차례대로 출력됨
}

i 를 2로 나누고 나머지가 0일때 >> 짝수일때 반복문을 빠져나가지않고 다음 반복으로 넘어감.

break,continue는 삼항 연산자에는 사용 할 수없음



break/continue와 레이블

레이블(label) 은 반복문 앞에 콜론과 함께 쓰이는 식별자. 해당 반복문에 이름을 붙임.
레이블과 함께 break 또는 continue를 사용하면, 중첩된 반복문 구조에서 특정 반복문을 지정하여 제어할 수 있음
break와 continue는 반복문 안에서만 사용할 수 있고, 레이블은 반드시 break이나 continue 지시자 위에 있어야 함.


  • break 레이블명 : 지정된 레이블이 붙은 반복문을 종료.
    중첩된 반복문에서 특정 반복문을 종료시키고자 할 때.
  • continue 레이블명 : 지정된 레이블이 붙은 반복문의 다음 반복으로 넘어감.
    특정 조건에서 바깥쪽 반복문의 다음 반복으로 직접 건너뛰고 싶을 때 사용.
outerLoop: for (let i = 0; i < 3; i++) {
  for (let j = 0; j < 3; j++) {
    if (j === 1) {
      break outerLoop; // outerLoop로 빠져나가고 반복문 종료.
    }
    console.log(`i = ${i}, j = ${j}`);
    //i = 0, j = 0
  }
}

i 가 0일때 안쪽 반복문으로 들어감.
변수 j는 0으로 출발, j는 if(j===1)이 아니므로 false,조건문을 건너뛰고 i = 0, j = 0 콘솔에 찍힘.
j++로 j =1 됨.
if(j===1)이기 때문에 true. break걸리고 outerLoop로 빠져나가면서 반복문자체가 종료됨.


outerLoop: for (let i = 0; i < 3; i++) {
  for (let j = 0; j < 3; j++) {
    if (j === 1) {
      continue outerLoop; // outerLoop의 다음 반복으로 건너뜀.
    }
    console.log(`i = ${i}, j = ${j}`);
    //i = 0, j = 0
    //i = 1, j = 0
    //i = 2, j = 0
  }
}

continue도 똑같음. j===1이 되는순간 outerLoop로 빠져나가고 j반복을 건너뜀.
다음 i값으로 넘어감. i=1 j=0 인경우만 콘솔에 찍히고 다음 i값으로 또 건너뛰게됨.

profile
엉덩이가 무거운 사람

0개의 댓글