돌고 도는 것은 인생인가요? 노우노우! 돈이라고 합니다 :)
알파고라는 인공지능이 바둑분야에서 인간의 최고실력자를 이겨낸 지도 몇 년이 지났지요.
지금은 너무나 초고수가 되어 사람으로서는 도저히 이길 수 없는 존재가 되었다고 합니다.
인공지능이 그렇게 된 것은 반복학습의 힘이 큰데요. 사람이 일생동안 과연 몇 대국이나 둘 수 있을까요? 알파고는 무한대국, 무한복기, 마치 몇만년동안의 학습과 같은 효과로 인해 그렇게 된 것이 아닐까 생각됩니다.
인공지능과는 이야기가 다르지만 자바스크립트에도 반복이 있습니다.
어떤 일을 100번을 반복할 수도 있고, 1000번, 10000번을 반복할 수도 있지요.
또한 무한 반복할 수도 있습니다. 컴퓨터는 단순 반복 노동에 쉽게 지치지 않기 때문이지요.
자바스크립트에는 while 이라는 반복문이 있는데 다음과 같이 사용합니다.
while(조건식) { … } |
앞 장에서 살펴보았던 if(조건문) { … } 은 조건에 맞으면 코드블록을 1번 실행하지만,
while(조건식) { … } 문은 조건에 맞으면 코드블록을 무한 실행합니다.
그러니까 조건식이 거짓이 되어야만 코드블록을 빠져나오는 것입니다.
한번 예를 보도록 할까요?바구니에는 5개의 먹거리가 들어있는데 뚱보 오장비는 하나씩 모두 먹어 치웠다는 스토리를 가져보도록 하겠습니다.
fruit=['사과', '딸기', '고구마', '케잌', '바나나']; while(fruit.length > 0) { let one = fruit.pop(); console.log(one + "를 먹었다."); } |
결과 바나나를 먹었다. 케잌를 먹었다. 고구마를 먹었다. 딸기를 먹었다. 사과를 먹었다. |
처음에 배열변수fruit를 선언하며 5개의 먹거리를 넣어 놓았습니다.
fruit=['사과', '딸기', '고구마', '케잌', '바나나']; |
그리고 조건에 따라 조건이 참인 경우 코드블록을 무한 실행합니다.
while(fruit.length > 0) { … (코드블럭) } |
배열변수.length 는 배열의 개수를 의미합니다.
그러므로 fruit.length 는 먹거리의 개수를 의미합니다. 5개이니까 fruit.length 값은 5입니다.
만일 코드블럭에서 아무 일도 하지 않는다면, 먹거리의 개수는 줄어들지 않아 이 코드블록은 무한 반복을 합니다. 영원히.. 아주 영원히 끝나지 않을 것처럼 말이지요.
그 때 이 코드블록을 탈출하게 만들 영웅(?)이 등장합니다.
let one = fruit.pop(); |
배열변수.pop() 이란 배열의 맨 마지막 요소를 떼여내는 역할을 합니다. 그래서 이 배열을
fruit=['사과', '딸기', '고구마', '케잌', '바나나']; |
아래와 같이 만드는 것이지요.
fruit=['사과', '딸기', '고구마', '케잌']; |
그리고 떼어낸 ‘바나나’를 호출한 주최측에 돌려주는데요.
이 때 돌려주는 값을 리턴 값(return value)이라고 합니다.
아래문장은 마지막 바나나항목을 리턴 값으로 돌려주기 때문에 one 이라는 변수에는 ‘바나나’가 대입되고, fruit 는 4개의 먹거리가 남게 됩니다.
let one = fruit.pop(); |
그리고 금방 받아온 바나나를 먹었다고 표시해 줍니다.
console.log(one + "를 먹었다."); |
바나나를 먹었다 |
하지만 아직 fruit배열변수에는 4개의 먹거리가 남아 있지요?조건이 거짓이 되려면 fruit 배열변수에 먹거리가 하나도 없어야 하기 때문에 코드블록을 다시 반복합니다.
그 다음 수순으로 먹거리 하나 줄어들고 또 먹었다는 내용을 표시하겠지요?
let one = fruit.pop(); ð fruit=['사과', '딸기', '고구마']; |
console.log(one + "를 먹었다."); ð 케잌를 먹었다 |
이 과정이 언제까지 반복될까요?fruit 에 먹거리가 남아있지 않을 때까지입니다
let one = fruit.pop(); ð fruit=['사과', '딸기']; |
console.log(one + "를 먹었다."); ð 고구마를 먹었다 |
let one = fruit.pop(); ð fruit=['사과']; |
console.log(one + "를 먹었다."); ð 딸기를 먹었다 |
let one = fruit.pop(); ð fruit=[]; |
console.log(one + "를 먹었다."); ð 사과를 먹었다 |
while 반복문을 빠져나오는 탈출 시점은 fruit 배열의 개수가 0개가 되는 시점이 아닙니다.
1) 배열의 개수가 0개가 되고
2) 코드블록을 끝까지 실행한 상태에서
3) 다시 비교를 하러 올라갈 때 비로서 탈출합니다.
while문을 처음 접하시는 분이 가장 헷갈려 하시는 부분이 이 부분이시더라구요.
그림을 참고하시면 도움이 되실 것 같습니다.
필요하신 분에게 도움이 되시길 바랍니다. 그러면 이만 :)
도움이 되셨다면 공감 한방, 댓글은 굿잡!
감사합니다~
다음 게시글 : https://itadventure.tistory.com/486