38 – 제어문(continue)

continue 문은 반복문의 현재 반복을 멈추고 다음 반복을 하게 한다. 즉, break문과 달리 반복문에서만 사용할 수 있고, 반복문의 처음으로 돌아가게 하는 제어문이다. 그래서 switch에서는 사용할 수 없다.

예시 프로그램을 보여주고 설명하는 것이 좋겠다. 예시 프로그램은 if조건이 참이면 continue 문에 의해 바로 for문의 다음 반복을 처리하게 된다. 그렇게 하여 1~30 중 5의 배수를 출력하는 프로그램이다.

스크린샷 2017-02-16 오후 3.14.41

37 – 제어문(break)

break문은 반복 제어문인 for. while, do-while, 그리고 switch의 중첩에서 쓰이는데, 반복작업을 하는 중괄호에서 벗어나도록 하는 데 이용된다. 그리고 중첩된 반복문 내에 있을 경우에는 가장 가까운 반복문을 벗어나는 데 이용된다. 문장을 적절하게 벗어나는 것 또한 중요한 것이기 때문에 사용하는 것을 잘 확인해야 한다.

예시 프로그램으로 살펴보자. 키보드로부터 문자를 입력받아 출력하는데. \n을 입력받으면 break문에 의해 while문을 빠져나가는 것을 볼 수 있다.

36 – 제어문(do-while)

while문과 for문은 시작 부분에서 종료 조건을 검사한다. 그에 반해 do-while문은 문장을 우선 실행하고 반복문 마지막에 종료 조건을 검사한다. 그래서 적어도 한 번의 문장 실행을 하도록 한다. 이 문장도 구조를 보여주도록 하겠다.

do
{
문장;
} while (조건식);

구조를 작성한 이유는 do-while문에서는 조금 조심해야 하는 부분이 있다. 우선 저 시작점에 do를 잘못 보고 혼돈할 수 있다. 소스코드가 길어지고 좀 많아지면 그렇게 되는데, do-while의 범위를 제대로 확인하기 위해서 중괄호를 쳐 주는 것이 좀 더 낫다. 그리고 while 뒤에 조건식을 적고 나서 반드시 세미콜론을 적어줘야 한다.

똑같은 예시지만 이번에는 d0-while문을 통해 작성해 보겠다.

35 – 제어문(for)

for문은 주어진 조건식이 참인 동안에는 특정 부분의 명령을 반복 수행하는 제어문이다. 이건 좀 구조식을 보는 쪽이 좋다. for문의 구조식은 일단 다음과 같다.

for (초기식 ; 조건식 ; 변환식) {
문장;
문장;
}

for문을 만나면 일단 초기식이 먼저 처리된다. 그리고 나서 조건식이 참인지 거짓인지를 확인하여 참이면 문장을 실행하고 변환식을 계산하고 다시 조건식을 평가한다. 반면에 거짓이면 문장을 실행하지 않고 for문이 종료된다. 문장으로 또 다른 for문이 될 수도 있는데 이를 중첩된 반복문이라고 한다. (물론 while도 할 수 있다.) 그리고 수식을 생략해도 되는데, 수식을 생략할 경우에는 무한반복을 의미한다. 그러나 세미콜론 만큼은 생략할 수 없다.

for문의 구조를 while문의 구조로 본다면 다음과 같다.

초기식;
while (조건식) {
문장;
문장;
….
변환식;
}

while문을 이용하여 구현하였던 프로그램을 for문으로 구현한 예시가 아래와 같다.

34 – 제어문(while)

프로그램을 짤 때, 동일한 작업을 반복하게 되는 경우가 발생한다. 예를 들어, 1부터 1000까지의 합을 계산하고자 할 때, 먼저 다음과 같이 1을 0으로 초기화된 sum이라는 변수에 더해서 sum에 저장한다.

sum = sum + 1;

2를 다시 sum에 더해서 저장하고, 이러한 동작을 1000 까지 진행을 하면 1부터 1000까지 더하게 된다.

sum = sum + 2;

…….

sum = sum + 1000;

이 문장을 보면, 특정한 규칙을 가지고 반복된다는 것을 볼 수 있다. 이와 같이 동일한 부분이 반복적으로 실행되어야 하는 경우에 효율적인 제어를 하는 제어문을 반복문이라고 하며, while,  for, d0-while 문이 있다. 이들에 대해서 하나 하나 살펴보도록 하는데, while을 먼저 살펴본다.

while문은 주어진 조건이 참인 동안에 반복문 내의 명령문을 실행하고 그렇지 않으면 반복문 다음에 나오는 명령문을 실행한다. 즉, 조건식이 참이면 그 문장을 실행하고 다시 while문의 시작 부분으로 가서 조건을 평가한다. 그리고 조건이 참이면 다시 문장을 실행하고 다시 조건을 평가한다. 이 작업을 거짓이 될 때까지 반복한다.

while문을 이용한 프로그램의 예시를 아래와 같이 작성하였다. 입력된 문자 ch가 A보다 크거나 같으면 문자열을 계속 출력한다. 초기에 Z가 입력되어 있는데, 이 Z를 출력하고 ch를 Y로 변경한다. 그리고 나서 다시 조건을 체크하여 참이 되었으니 Y를 출력하고 X가 값으로 되는 것이다. 그렇게 하여 A까지 출력한다.

그리고 while을 무한히 반복하게 할 수 있는데 조건식에 1(혹은 true)을 작성하면 된다. 그리고 이를 빠져나오기 위해서는 break 문을 이용하면 된다.

33 – 제어문(switch)

앞에서 살펴본 if문의 경우에는 참과 거짓, 단 둘의 경우에 대해서만 처리를 하는 데 적합한 반면, switch문의 경우에는 다양한 조건을 처리하는 데 적합하다. 해당 수식의 값에 따라 여러 방향으로 분기하기 위한 분기문이다. 구조를 한번에 보기 쉽도록 구성된 예시를 보면서 문법의 설명을 진행하겠다.

숫자 1,2,3을 넣으면 해당되는 문장이 출력되고, 그 외에 것들이 들어오면 hello others가 출력되는 프로그램이다. 입력된 숫자 i가 수식이고, i의 조건이 1,2,3인지를 확인하는 것이 바로 case 문이다. case의 상수식 조건에 일치되면 그 문장을 실행을 하게 된다.

그리고 그 외에 어디에도 해당되지 않는 경우에는 default에 있는 값이 실행된다. default의 경우에는 실제로 작성하지 않아도 된다. 즉, 생략이 가능하다.

근데 이 프로그램의 경우, 실행을 하게 되면 아래와 같이 실행이 된다.

정상이다. 일치하는 상수식에 포함된 문장만 실행되지 않고 아래 쪽 모든 문장을 실행하게 된 것이다. 이를 해결하기 위해서는 해당 실행 문장이 실행이 끝났다는 것을 표현해주는 break문을 작성해 줘야 한다. break문을 작성하여 수정한 예시와 그 결과는 아래와 같다.

이제는 해당되는 상수식을 실행한 다음에 switch문을 빠져나온 것을 볼 수 있다. 여러 문장을 실행하기 위해서는 그냥 case문 아래에 여러 문장을 작성하고 마지막에 break만 있으면 된다.

32 – 제어문(if)

이걸 예제에서 잔뜩 써먹었으면서 이제와서 정리하나 싶은…ㅇㅅㅇ;;;

if문은 제어문이다. 제어문이란 프로그램의 실행 순서를 변경하는 문장으로 여러 문들이 있는데, 그 중에서도 if문을 확인해 보도록 하겠다.

if문은 조건에 따라 프로그램 프름이 변경되기 때문에 분기문이라고 하며, 조건식이 참이면 문장을 실행하고, 거짓이면 실행하지 않는다. 예제 프로그램을 작성하였는데, 소문자이면 대문자로 변환하여 출력하는 프로그램이다.

위에 예제에서는 조건식이 참일 경우에 실행하는 문장은 하나다. 그러나 많은 프로그램들은 여러 문장을 실행하는데, 이를 때에는 중괄호를 이용하려 처리한다. 해당 조건이 성립하면 그 다음에 나오는 중괄호의 내용들을 실행하는 것이다. 아래의 예시는 두 개의 정수를 비교하여 큰값과 작은값을 판별하는 것이다. max와 min 값을 설정해야 하기 때문에 여러 문장으로 처리되고, 그걸 위해 중괄호를 이용하였다.

마지막으로 해당 값이 참일 경우와 거짓일 경우에 대해서 처리하는 것이다. if문 옆에 조건식이 참일 경우에는 그 다음의 것을, 거짓일 경우에는 else라고 하여 별도의 문장 뒤에 실행한다. 이 묶음을 if~else 문이라고 한다. 또한 거짓으로 나온 경우에 별도의 조건을 처리하고 싶으면 else if라고 하여 다른 조건을 처리할 수 있다. else if를 여럿 쓰면 여러 조건에 대해 비교를 할 수 있다. 그것을 다 보여주는 것이 바로 아래의 예시인데, 문자를 입력받은 것이 숫자인지 문자인지 아니면 다른 것인지를 판별하는 프로그램 예시이다. 조건이 문자인지를 비교하는 것과 숫자인지를 비교하는 것 두 조건이 존재한다.

가장 기본적인 조건문인 if문에 대해서 알아봤다. 조건문을 사용하기 시작하면 이제 슬슬 프로그램이 더 큰 프로그램을 잓헝할 수 있게 되는 것이다. ㅇㅂㅇ