2011-09-28

자바의 제어문(if)

오늘부터는 자바의 제어문(Control Flow Statement)에 대해서 알아보기로 하겠다. 제어문이란 말 그대로 프로그램의 흐름을 제어하는 역활을 담당한다. 대표적인 제어문으로 조건을 나타내는 if나 switch, 반복을 나타내는 for나 while, 그리고 예외처리를 할수있는 try나 catch를 통해 프로그램을 여러분의 입맛대로 마음껏 요리할수 있게 될것이다.



이번 시간에는 조건을 나타내는 if문에 대해서 알아보기로 하겠다. 영어에서 풍기듯 만약 여러분이 제시한 조건을 만족할경우 설정해놓은 명령대로 처리하게 만들수 있는 것이 if의 주된 요지이다. 자바코드는 다음과 같이 이루어진다.

if (조건)
{
명령문1;
명령문2;
명령문3;
......
}

즉 조건이 true가 성립되면 중괄호 블록안의 명령문들이 차례대로 실행된다. 모든 제어문에서 { }는 안에 명령문이 한줄일 경우 생략이 가능하나 두줄 이상일 경우에는 중괄호로 묶어주어야 한다. 그럼 직접적인 예제를 통해서 if문을 살펴보겠다.


조건문에서 a가 10과 같으면 a와 b를 더하라는 프로그램이다. a가 10이니 더한값 30을 출력한다. 그럼 다음 예제를 살펴보자.


if문이 일단 두개가 있다. 첫번째 if문에서 조건을 검색한후에 참이면 안에 내용을 실행하고 아니면 다음 if문으로 넘어간다. 두번째 if문에서는 total이 20보다 작아야 참이 되므로 첫번째 if문에서 거짓이 나와 첫번째 명령문들이 실행되지 않아야 두번째 if문이 수행될수 있다. 프로그램을 짜고 결과를 생각해보고 자바를 실행해보기 바란다. 덧붙여 설명하자면 a가 10이고 b가 20이다. a가 10보다 크거나 같은지를 물으므로 true이고 b가 20보다 작거나 같은지를 물으므로 역시 true이다. 따라서 안의 명령문 두줄을 처리한다. 다음 total이 20보다 작냐고 물었는데 앞의 if문을 처리했으니 total값이 0이 아니라 현재 30이다. 따라서 두번째 if문은 처리되지 않는다. 그런데 이상하지 않나? 실행해보면 두번째 if문이 그것도 두번째줄이 처리된 것을 볼수 있다. 희한하다. 왜일까? 그렇다. 두번째 if문의 명령문은 첫째줄만 해당하지 둘째줄은 if문과 상관없이 프로그램을 실행하면 항상 처리된다. 이유는 { }. 아까 중괄호가 없는 제어문은 한줄만 명령문으로 인식한다 하였다. 까먹은 이들은 반성하자. -.- 이번에는 if else 구문을 공부해 보겠다.

if (조건)
{
명령문1;
...
}
else
{
명령문2;
...
}

즉 조건을 만족하면 명령문1을 실행하고 조건을 만족하지 못하면 명령문1 대신에 명령문2를 실행한다. 한마디로 양자택일이라 할수 있겠다. 다음 예제를 통해 if else 구문을 살펴보기로 하자.


위의 예제는 if문과 else문을 함께 적어놓은 것이다. 프로그램에 대해서 설명하자면 지금 지원자가 음대에 지원을 했다. 다른 과목은 점수가 미달하더라도 음악 점수만 80점을 초과하면 들어갈수 있는 학교다. 근데 지원자가 놀라운 성적으로 음악 과목만 88점을 획득하였다. 따라서 합격했다는 기분좋은 스토리(?)다. ㅎㅎ if문이 참이다. 따라서 else문은 처리하지 않는다. 지원자를 가상히 여겨 기왕이면 다홍치마 합격하는 걸로 만들었다.^^ 이해하는데 무리가 없을걸로 생각하고 다음으로 넘어가겠다.

이번에는 else if 구문이다. 당연하지만 첫번째 조건문은 if로 시작해야된다. 이 조건문은 해당하는 케이스가 나올때까지 조건을 검색하는 제어문이다.

if (조건1)
{
명령1;
...
}
else if (조건2)
{
명령2;
...
}
else if (조건3)
{
명령3;
...
} //원할시 여기서 끝내는 것도 가능하다.
else
{
명령; //위의 케이스 모두 해당사항 없을시 실행된다.
...
}

한마디로 조건이 참이 될때까지 검색해 보는 것이다. 이런 else if 조건문은 여러분이 원하는만큼 만들수 있다. 예제를 통해 어떤 프로그램을 만들수 있는지 살펴보기로 하자.


필자가 오래간만에 긴 프로그램을 만드느라 무리(?)한만큼 여러분도 그에 상응하는 시간을 투자해 본인의 것으로 만들기 바란다. 프로그램을 설명하자면 a라는 게이머가 미로게임하다가 4차관문까지 통과하고 함정에 빠져 게임이 끝나버렸다. a게이머가 게임하면서 받은 스코어(85점)를 토대로 결과를 출력하는 프로그램이다. 해당되는 조건이 있을때까지 검색하다가 해당사항이 있으면 그 해당 명령문을 실행하고 제어문을 빠져나오는 프로그램이다. 특별히 어려운 점은 없으리라 보인다. a값을 변경해 가면서 모든 조건을 다 만족하는지 살펴보기 바란다. 위의 결과값은 4번째 조건문을 만족하므로 아래와 같다.

4차 관문까지 통과하셨습니다.
게임을 종료합니다.^^

질문 있나? 어디 똑똑한 학생 질문 없을까? 허걱~ 질문 있어야 하는데...^^ 이 프로그램에는 아주 치명적인 에러가 하나 있다. 무엇일까? 궁금하면 50점 아래로 a값을 넣고 자바를 돌려본다. 황당하지 않은가? 택도 없는 점수를 넣었는데도 여러분이 게임지존이라고 나올 것이다. 즉 if를 비롯 else if까지 체크한 4가지 조건문 모두 만족하는게 없으므로 else를 실행하게 되는 것이다. 반대로 4가지 조건문 중에 하나라도 만족하는게 있으면 else 구문은 실행되지 않는다. 마지막에 else 구문을 써도 되지만 꼭 그럴 필요는 없다. 이런 경우 else 구문 대신에 else if 구문을 한번 더 쓰고 끝내버리면 해결된다. 아래글을 읽기전에 해결방법을 각자 모색해보기 바란다.

몇가지 방법을 제시해 보겠다. 물론 50점 아래 범위를 관계연산자를 써서 다른 케이스와 같이 a>0 부터 a<=50 까지 조건문을 만들어서 쓸수도 있을테고 새로운 변수를 하나 더 써서 아주 간단하게 넘어갈수도 있다. 어차피 점수가 50점 아래일 경우 마지막 케이스만 실행되지 않게 만들면 되니까 변수를 하나 써서(int b=0;) 마지막 else 구문 대신에 else if (b!=0) 구문으로 고쳐서 돌릴수도 있을 것이다. 물론 후자보다는 전자의 경우가 명료하고 정확하므로 전자를 선택하는 것을 추천한다. 후자는 프로그램이 길어지면 길어질수록 오류가 날경우 문제를 해결하기가 힘들어진다. 여기서는 기계적인 오류가 아니라 논리적인 오류가 났을경우 여러 해결방법이 있다는 것을 보여주기 위해 예를 들어본 것이니 많은 응용을 통해 오늘 배운 if 조건문을 마스터하기 바란다~

댓글 없음:

댓글 쓰기