brunch

You can make anything
by writing

C.S.Lewis

by Cylogic Jun 01. 2018

정리 : 코딩의 기본(반복 작업) - 코딩 수업#7

2. 반복 작업


두 번째 이야기할 주제는 반복 작업이다.

앞서 컴퓨터 프로그램이 가지는 가장 중요한 두 가지 기능이 "문제의 풀이""대용량 데이터의 처리"라고 이야기했었다.

문제의 풀이는 로또의 1등 확률과 같이 복잡한 계산식을 만들어가는 과정이라고 이야기한다면(물론 이것은 아주 일부분이긴 하지만), 서울 시내버스의 각 번호별 하루 승차인원과 그들의 타고 내린 동선을 분석하는 빅 데이터의 처리는 수만 아니 수백만 번의 반복된 작업을 수행하는 것이라고 할 수 있다.

사람이 1년을 걸려도 처리하기 힘든 일을 컴퓨터는 단 몇 시간 만에 처리할 수도 있는데, 이러한 일들 중 상당수가 반복 작업인 것이다.


- 왜 반복하나? - 동일한 형태의 자료 처리를 위한 반복

모든 자료의 수집은 반복의 결과이다.

수집된 자료의 분석 역시 반복의 결과이다.

로또 번호를 뽑는 것도 6번의 반복 작업이고,

1부터 100까지의 숫자를 더하는 것도 100번의 반복 작업이다.


- 왜 반복하나? - 동일한 형태의 자료 수집을 위한 반복

만일 서울 시내버스 출입구에 센서를 붙이고, 특정 인물이 특정한 교통카드를 사용하여 타고 내리는 데이터를 수집한다고 해보자. 이러한 데이터는 출퇴근 시간에 특정 버스를 얼마나 자주 배차하여야 하느냐는 정책의 결정에도 도움이 될 수 있고, 이를 기반으로 새로운 노선을 증설할 수도 있다.

만일 출근 시간에 이러한 자료를 수집하고 싶은 곳에서 다음과 같은 데이터를 수집한다고 하자.


1. 버스 노선 번호

2. 승차 정류장 번호

3. 승차시간

4. 하자 정류장 번호

5. 하자 시간

6. 환승 여부 (환승하지 않을 경우 12번으로 이동)

7. 환승 승차 정류장 번호

8. 환승 승차 시간

9. 환승 하차 정류장 번호

10. 환승 하차 시간

11. 재 환승 여부 (재 환승 시 7번에서 다시 시작하여 반복)

12. 환승이 없을 경우 총 출근시간 계산


이러한 자료가 모든 서울 시내버스에서 출근 시간 오전 6시부터 10시까지 수집된다고 하면,

중앙에서 이러한 데이터를 받는 서버 컴퓨터에는 무작위로 데이터가 수집될 것이다.

이때...

이 데이터를 정리하는 프로그램이 있어서 이를 항목별로 저장한다고 하면,  고도의 계산이나 문제 풀이의 방법이 필요한 것이 아니라 끊임없이 새로운 데이터가 들어오는지 확인하고 이를 반복하여 저장하여야 할 것이다.


대부분의 데이터 처리는 수집과 분석에 반복의 작업이 필요하다.


이때 자료를 수집하는 센서에는 자료를 끊임없이 서버에 정리하여 전달하는 간단한 반복 프로그램이 들어가 있을 것이다.


- 무한 반복 작업

거리의 신호등을 보자.

각 방향의 차량을 보내고, 멈추게 하고, 좌우로 회전시키는 작업은 끊어지면 안 되는 작업이다.

특정 방향의 차량 흐름을 좋게 하기 위하여 출퇴근 시간시 진행 신호를 길게 주는 식의 변화를 줄 수는 있으나 어찌 되었건, 차량과 보행자의 안전을 위한 작업을 끊임없이 반복되어야 한다.


당연히 신호등의 제어도 코딩의 산물이다.


- 코딩에서의 반복 명령

JavaScript에서 반복을 명령하려면 아래의 두 개의 명령어를 사용하면 된다.

물론 경우에 따라 파생되는 더 많은 명령어의 가지가 있지만 일단 이 두 가지를 기억하자.


- for   - 정해진 횟수, 또는 정해진 그룹 안에서 반복을 수행할 경우에 사용

- while - 정해진 조건 안에서 반복을 수행할 경우에 사용


위의 설명과 같이 동일한 반복의 효과를 보더라도 그 사용 조건은 다르다.

만일 위의 예제처럼 몇 건의 데이터가 입력될지 모르고 아침 6부터 10시까지 무조건 수행해야 하는 일을 진행하는 일이라면 while을 사용하여야 할 것이고, 로또의 번호처럼 6개라는 한정된 횟수에 맞춰 수행해야 하는 일이라면 for를 사용한다.


for


로또 숫자 6개를 뽑기 위해

for (var i=0;i <6;i++)

{

  // 이곳에 해당 코딩을 작성한다.

}

와 같은 작업을 진행했거나


1부터 100까지의 숫자를 더하려고 

var sum=0;
var x;
for ( x=1; x <= 100; x++) {
    sum=sum+x;
}


이렇게 반복 작업을 표현하는 것이 for의 사용 방법이다.

for로 반복 작업을 하는 것에는 for~~ in이나 for~~ of와 같은 경우도 있지만, 해당 내용이 나올 때 다시 이야기 하자.

당장은 반복에 이러한 방법이 있다는 것을 아는 게 중요하다.


While

조건을 만족할 때까지 반복하는 경우이다.

로또 번호 6개를 서로 다른 것을 뽑기 위해 


do { 

  이곳에 다른 숫자를 뽑고 이미 뽑은 숫자와 같은지를 비교하는 루틴을 넣었었다.

} while (i <6)


처럼 코딩을 했던 것을 기억하실 것이다.

이렇게 특정한 조건에 맞추어 코딩하는 경우에 while을 사용한다.

while (i <10) {

}

처럼 i가 10보다 작을 때 만 실행되어서 시작 단계에 i가 10보다 크면 단 한 번도 실행되지 않는 경우도 있고,


do {

} while(i <10)

처럼 i가 10보다 크더라도 최소한 한 번은 실행되게 하는 코드를 작성할 수도 있다.

이럴 경우 수행과정의 초기 단계에 조건이 맞을 것이라는 확신이 있어야 한다.


저작 도구에서 실행해 본 바와 같이 

i가 11일 경우 while(i <10)은 아무런 결과를 보여주지 않지만,

do ~~ while(i <10)의 경우에는 11이라는 i의 값을 최소한 1회 출력하게 된다.

어떤 명령어를 어떻게 적절히 구사하느냐가 코딩의 기술인 것이다.


반복 도중에 특정 조건을 확인하여 중간에 반복을 멈추게 하는 break나, 

특정 조건에서는 명령을 수행하지 않고 다시 반복의 시작으로 수행의 위치를 바꾸는 continue 같은 명령어도 배워야겠지만 이 역시 해당 사항이 등장할 때 다시 공부하기로 하자.


이제 코딩의 두 번째 주요 기능인 반복을 공부했다.

세 번째 주요 기능이 조건 비교를 다음 수업에 마무리하고 다시 코딩 예제를 풀어가는 과정을 가지도록 하자.

매거진의 이전글 정리 : 코딩의 기본(변수와 대입) - 코딩수업#6
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari