자바스크립트에서 반복문은 for 반복문 외에도 while 반복문이라는 것이 있다.
while 반복문
while 반복문의 기본 구조는 다음과 같다.
while (조건부분){
동작부분
}
▲구조만 보면 for문보다 훨씬 더 if문과 비슷한 모양으로 보이는데 동작하는 방식도 if문과 닮아있다.
if문과 다른 점은 당연히 for문과 마찬가지로 반복문이니까
한번 실행하기 시작하면 조건 부분이 충족되지 않을 때까지 동작 부분을 계속 반복한다.
또한 특별한 경우가 아니라면 while문과 for문은 대부분 서로 대체가 가능하다.
한번 이전 글에 사용했던 for문을 가져와서 while문으로 바꿔보자면..
let i = 1
for (let i = 1; i <= 10; i++) {
console.log(`${i} SeopE`);
}
while (i<=10) {
console.log(`${i} SeopE`);
i++
}
▲while문은 for문과 달리 초기화 부분이 없기 때문에 반복에 필요한 횟수를 카운트하려면
반복문 밖에서 글로벌 변수 (let i)를 미리 만들어줘야 한다.
그러고 나면 while 반복문을 만나게 되는데,
조건 부분은 for문과 동일하게 작성을 하게 되고 반복 횟수를 증가시키는 부분도 (i++)
while문에는 추가 동작 부분이 없기 때문에 동작 부분 안에서 작성해 주면 된다.
실행해보면 서로 똑같이 10번 반복하는 걸 확인할 수있다.
코드를 보면 솔직히 while문 보다 for문이 간결해보이는데 while문을 효율적으로 쓰려면 어떻게 해야할까?
let i = 30
while (i % 7 !== 0) {
i++
}
console.log(i);
▲ while문을 활용해서 i 보다 큰 수 중에서 가장 작은 7의 배수를 찾는 코드이다.
변수 i를 선언하고 30을 할당했고 30보다 큰 수 중에서 가장 작은 7의 배수를 찾게 된다.
▷ 조건 부분
i = 30이 평가되면서 %는 나머지 연산이므로 30을 7로 나눠 몫이 4고 나머지는 2가 된다.
2는 0과 일치하지 않기 때문에 (!==) 이 부분이 true 가 돼서 i가 1이 증가한다.
그러면 31인 i가 또 평가가 되는데, 이런 식으로 계속 반복하다가
i가 35가 되는 순간에는 조건식이 false가 되고 반복문이 종료된다.
그런데 코드를 보면 반복문 안에서 변수를 만들어 주는 것이 아니라
반복문 밖의 글로벌 변수를 가지고 조건을 평가하고 반복문 안에서도 이 변수를 다루고 있다.
그리고 반복문이 다 실행하고 난 뒤에 반복문 밖의 console.log i 값을 사용하고있다.
물론 for문으로 충분히 만들 수 있지만
for문은 보통 조건 비교에 사용되는 값을 반복문 내부에서만 사용하고
반복이 끝나면 외부에서는 사용할 수 없기 때문에 ..
지금처럼 글로벌 변수를 조건 비교하여 사용하고 반복문 내부에서도 다루면서
결과적으로 반복문이 종료된 다음에도 이 변수를 사용해야 될 때는
for문보다 while문을 활용하는 것이 좋다.
즉 상대적으로 for문보다 사용 빈도는 낮지만
상황에 따라서 while문을 활용하는게 효율적인 경우도 있다는 점이다.
★GitHub 주소 (while문)
★Notion 주소 (while 예제)
https://purrfect-gargoyle-935.notion.site/while-10ce9530b3e1804f9ab4cddfc241bf68?pvs=4
https://purrfect-gargoyle-935.notion.site/while-10ce9530b3e180b3a78dcfd3298b6b74?pvs=4
'JS' 카테고리의 다른 글
(22) JavaScript - 객체 / 객체(Object)와 프로퍼티(Property) (0) | 2024.09.25 |
---|---|
(21) JavaScript - 제어문 / break와 continue (0) | 2024.09.25 |
(19) JavaScript - 제어문 / for 반복문 (0) | 2024.09.24 |
(18) JavaScript - 제어문 / switch문 (0) | 2024.09.24 |
(17) JavaScript - 제어문 / if문 (if statement) (0) | 2024.09.24 |