반복문

김하은·2023년 4월 27일
0

반복문은 여러 동작을 반복해야 할 때 사용한다.

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

먼저 while문과 for문을 알아보자.

while문

while(조건문){
  // 코드
  // 반복문 본문(body)라고 불림
}

조건이 true면 본문이 실행된다.

반복문 조건에는 비교 뿐만 아니라 모든 종류의 표현식이나 변수가 올 수 있다. 조건은 whilte에 의해 평가가 되고 평가 이후엔 boolean값으로 변경된다.

let i = 3; // 초기값
while(i){ // 조건식
  alert(i) // 본문
  i-- // 증감문 => 반복문의 무한 반복을 멈추게 하는 역할을 함.
}

증감문을 사용해 i가 1씩 감소하고, 0이된다면 조건식이 false가 되기때문에 본문 실행이 더이상 일어나지 않는다.

do while 반복문

do.. while 문법을 사용하면 조건문을 반복문 본문 아래로 내릴 수 있다.

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

이 경우에는 본문이 먼저 실행되고, 조건을 확인 한 뒤, 조건이 true인 동안에는 본문이 계속 실행된다.

이 문법은 조건이 truthy인지 아닌지에 상관없이 일단 본문을 최소한 한번이라도 실행하고 싶을 때만 사용해야한다.
대부분의 상황에서는 do..while보다는 while(..){...}이다.

for 반복문

for반복문은 while반복문보다는 복잡하지만 가장 많이 쓰이는 반복문이다.

for(초기값, 조건식, 증감문){
// 반복문 본문
}

for 문을 구성하는 요소는

  • 초기값(begin)
  • 조건문(condition)
  • 본문(body)
  • 증감문(step)

이렇게 있다. 먼저 초기값은
반복문에 진입할 때 단 한 번 실행되는 것이다.
그다음 조건문은 반복마다 확인되고. 이 조건문이 false라면 반복문을 멈추게 된다.

body즉, 본문은 조건이 true일 동안 계속해서 실행되는 부분이고, step은 각 반복의 body가 실행된 이후 실행된다.

=> 먼저 begin이 실행되고 조건이 true면 body를 실행 후 step이 일어난다. 이후 조건이 다시 true라면 body를 실행하고 step이 일어난다.
이렇게 반복이 되다가 조건이 false가 되면 반복문이 종료된다.

for(let i = 0 ; i < 3 ; i++) 이렇게 변수 i를 반복문 안에서 선언한 방식을 '인라인 변수 선언'이라고 한다.
이렇게 선언한 변수는 반복문 안에서만 접근이 가능하다.
그러나 이렇게 인라인으로 선언하지 않고 미리 for문 밖에서 정의한 변수를 사용할 수도 있다.

for문의 구성요소를 생략할 수 있다.
반복문이 시작될 때 아무것도 하지 않는다면 begin을 생략할 수 있다.

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

begin이 필요하지 않기에 생략된 모습이다.

step도 생략이 가능하다.

let i = 0;
for(;i> 3 ; ){
alert(i++)
}

이렇게 for문을 구성하게 되면 while문과 동일하게 된다.

모든 구성요소를 생략할 수도 있다.
다만, 이렇게 구성한다면 무한반복문이 만들어지게 된다.

for문의 구성요소를 생략할 수도 있는데 이때는 반드시 두개의 세미콜론을 꼭 넣어주어야 한다. 하나라도 없으면 문법에러를 발생시킨다.


반복문 빠져나오기

보통 조건이 false라면 반복문이 종료된다.
그런데 특별한 지시자 break라는것을 사용한다면 언제든 원하는 때에 반복문을 빠져나올 수 있다.

break사용

let i = 0;
while(true){
  let value = +prompt("숫자를 입력하세요","");
  if(!value) break;
  
  i += value;
}
alert("합: "+i);

(prompt앞에 붙은 +연산자는 숫자로 변경해주는 역할을 한다. 앞서 언급했었다.)

if 문을 살펴보자면 break는 사용자가 아무런 값도 입력하지 않거나 cansel을 눌렀을 때 활성화된다.
break가 활성화되게 되면 반복문이 즉시 중단되고 제어흐름이 반복문 아래 첫번째줄로 이동된다고 한다.그러니까 반복문이 중단되면서 alert이 실행된다는 말이다.

반복문의 시작이나 끝 지점에서 조건을 확인하는것이 아니라 본문 가운데 혹은 본문 여러곳에서 조건을 확인해야할 경우 '무한 반복문 + break'조합을 사용하면 좋다.

continue

다음 반복으로 넘어가기.
continue지시자는 break의 가벼운 버전.
break와는 달리 전체 반복문을 멈추지 않고, 현재 실행중인것을 멈추고 다음 반복으로 넘어가게한다.

for(let i =0;i<10;i++){
  if(i%2===0) continue; // 조건이 참이라면 본문을 실행하지 않고, 다음 반복문으로 넘어감
 
alert(i); // 1, 3, 5, 7, 9
}

continue를 활용해 홀수만 출력한ㄷ.

즉, i가 2로 나누었을때 나머지가 0이라면 ===즉, 짝수라면 본문실행을 중단시키고, 다음으로 넘어가 i가 1증가하고 다음 반복문이 실행된다.

주의:
물음표 연산자를 사용할 시에는 continue, break를 사용하면 문법오류를 발생시킨다.

break/continue와 레이블

여러개의 중첩 반복문을 한번에 빠져나와야 하는 경우가 종종 있다.
이럴때 레이블 이라는 것을 사용한다.

label이름: for(...){
...
}

이렇게 반복문 앞에 콜론과 함께 쓰이는 식별자를 말한다.

break label이름;
이런식으로 작성하면 해당 레이블에 해당하는 반복문을 빠져나올 수 있다.

레이블을 별도의 줄에 써주는 것도 가능하다.


out:
for(let i = 0 ;i<3;i++){...}

여기서 out이 레이블 이름으로 사용된것이고 그 외 다른 단어를 사용할 수 있다.

주의:
break와 continue는 반드시 반복문 안에서만 사용할 수 있고, 레이블은 반드시 break나 continue지시자 위에 있어야한다.

0개의 댓글