주인장의 프로그래밍 개발 공부방

[Chapter 3 조건문] 2. if문을 써보자 본문

프로그래밍 기본 지식/Chapter 3 조건문

[Chapter 3 조건문] 2. if문을 써보자

거신 2019. 6. 17. 01:45

이전 시간에는 자바에서 존재하는 2개의 조건문에 대해서 알아봤다.

바로 if문과 switch문인데

조건문이 뭐하는 녀석인지와 if문과 switch문의 구조를 간단하게 알아봤었다.

하지만 단순히 이 녀석들이 뭐하는 녀석인지 어떻게 생겼는지만

알아서는 당최 써먹을 수가 없을 것이다.

그래서 이번 시간부터는 조건문을 사용하는 방법과 대표적인 예시들을 보면서

어느 상황에서 쓰면 좋을지에 대해서 알아보도록 하자.

 

목표 : if문을 정확하게 사용하고 어떤 상황에서 써야하는지, if문은 어떻게 동작하는지 완벽하게 이해한다.

 

1. if문의 구조

 

먼저 if문을 써보기 전에 앞서 알아봤었던 if문의 구조를 다시 한 번 곱씹어볼 필요가 있다.

if문은 다음과 같은 구성과 구조를 가지고 있다.

 

예시)

if(조건식) {
	구현부
}
else if(조건식) {
	구현부
}
else {
	구현부
}

 

우리가 먼저 알고 있어야하는 부분은 지금 예시의 부분이 한 세트라는 점이다.

조건문이라는 것, 특히 if문은 해당 조건식이 참(true)"딱 한 곳"을 찾아가서

구현부에 적혀 있는 내용들을 실행하고 이 세트를 완전히 종료하는 것이다.

물론 컴퓨터가 코드를 읽는 순서는 위에서부터 순차적으로 읽어 나갈 것이고

예시와 같은 코드에서 if에서 만약 조건이 만족해서 실행을 한다면

그 다음에 있는 else if와 else가 무엇이든 간에 무시하고 끝내버린다는 것이다.

 

하지만 if다음의 코드가 한 세트인 else if나 else가 아니라

새로운 if가 자리잡고 있다면 이 경우에는 무시하지 않고

if문을 새롭게 읽어내려갈 것이다.

이 부분을 일단 알고 있어야 한다.

 

그렇다면 구조와 구성은 알아봤으니 일단 한 번 써보자.

 

2. if문 예시

 

무엇보다도 직접 예시 코드를 보면서 어떻게 동작하는지를 보는게 가장 좋다고 생각한다.

아래에는 if문을 이용해 간단한 코드를 작성해 보았다.

이클립스를 사용하고 있다면 내용을 복붙해서 확인해 보는 것도 좋을 것이다.

 

예시)

int a = 10;

if (a >= 10) {
	System.out.println("변수 a는 10이상의 양수입니다.);
}
else if (a < 10 && a >= 0) {
	System.out.println("변수 a는 10미만의 양수입니다.");
}
else {
	System.out.println("변수 a는 음수입니다.");
}

 

이 코드를 실행하면 결과는 if문의 { }안에 있는 println()이 실행이 될 것이다.

현재 if의 ( ) 안에 있는 조건식을 봤을 때

변수 a는 10이기 때문에 만족하게 된다.

따라서 a >= 10의 결과는 true라는 것을 알 수 있고

if의 { } 안에 있는 구현부를 실행한 것이다.

그리고 if를 실행했기 때문에 그 다음에 나오는 else if, else를 모두 무시한다는 것도 알 수 있다.

 

만약 여기에서 변수 a에 10 아니라 5를 넣으면 결과는 어떻게 될까?

당연히 이 조건을 만족하는 else if의 { }를 실행할 것이다.

역시 if와 else는 무시하고 종료할 것이다.

이렇게 변수 a의 값에 따라서 다른 결과가 출력된다는 것을 확인할 수 있고

이 것이 바로 if문이 가지고 있는 기능인 것이다.

 

결론적으로 ( ) 안의 결과가 참(true)이 된다면 해당하는 부분의 { }를 실행하고

만약 ( ) 안의 결과가 거짓(false)이라면 { }를 실행하지 않고 무시하고 지나간다.

 

그런데 여기에서 눈여겨봐야 하는 부분이 있다.

바로 조건식을 담고 있는 ( )의 존재가 그것이다.

예시를 다시 보면 ( )를 뒤에 붙이고 있는 녀석은 if와 else if 뿐이라는 것을 알 수 있다.

마지막에 등장하는 else는 ( )없이 바로 { }가 등장한다.

여기에서 알 수 있듯이 else에는 ( )가 붙지 않는다.

아니, 절대 붙이면 안된다.

잊지 말도록 하자.

분명히 if문을 처음 사용하는 사람들이 가장 많이 하는 실수가 바로

else ( )와 같이 작성하는 것이다.

else에는 절대 ( )를 붙이지 않는다는 것을 꼭 기억하자.

다시 보면 if건 else if건 if가 등장한다면 ( )가 붙는다는 것도 알 수 있다.

어떠한 형태든 if가 등장했다면 그 뒤에는 ( )를 꼭 붙여줘야 한다.

 

3. if문의 응용_1

 

이제 if문의 틀은 어떻게 되어 있으며 어떻게 동작하는지 알았으니

응용을 한 번 해보자.

말이 응용이지 간단한 예제를 만들어 볼 것이다.

이런 프로그램을 만든다고 생각해보자

 

예제)

사용자가 콘솔창에서 1을 입력하면 "예"가 출력되고

0을 입력하면 "아니오"가 출력되게 만들어보자.

 

코드)

Scanner sc = new Scanner(System.in);
int input = 0;
input = sc.nextInt();

if (input == 1) {
	System.out.println("예");
}
else {
	System.out.println("아니오");
}
sc.close();

 

간단하게 이렇게 작성 할 수 있다.

만약 사용자가 1을 입력했다면 입력한 1은 변수 input에 저장되고

프로그램이 진행될 것이다.

if문을 만나서 input이 만약 1이면 "예"를 출력할 것이고

그게 아니라면 "아니오"를 출력할 것이다.

그런데 이렇게만 작성하면 약간의 문제가 발생한다.

바로 사용자가 1 또는 0이 아닌 다른 숫자를 입력했을 때도 else가 실행된다는 것이다.

그 이유는 간단하다.

바로 else부분에 어떠한 조건도 없기 때문에 1을 제외한 모든 조건에서 else가 실행되는 것이다.

 

일단 여기에서 알 수 있는 부분은 바로 else의 역할이다.

else는 앞의 조건들이 모두 무시되었을 때 실행되는 녀석이라는 것을 알 수 있다.

그렇기 때문에 확실한 조건이 지정되어 있다면 else만 쓰는 것이 아니라

else if를 사용해서 다른 조건도 만족시켜줄 필요가 있다.

그리하여 새롭게 고친 코드는 다음과 같다.

 

코드)

Scanner sc = new Scanner(System.in);
int input = 0;
input = sc.nextInt();

if (input == 1) {
	System.out.println("예");
}
else if (input == 0){
	System.out.println("아니오");
}
sc.close();

 

앞서 else였던 부분을 else if로 고쳐 input == 0이라는 조건을 넣어줬다.

이렇게 작성하면 사용자가 1을 입력하면 "예"가 출력되고

0을 입력하면 "아니오"가 출력된다.

그리고 1 또는 0 이외의 숫자를 입력하면 아무것도 출력이 되지 않는다.

이렇게 작성해야 비로소 예제에 걸맞는 코드가 되는 것이다.

그런데 의문인 부분이 발생했다.

바로 else가 사라진 것이다.

분명 if문은 if, else if, else가 한 세트라고 했는데 else가 없는게 말이 되냐고 궁금할 것이다.

결론부터 말하면 else는 있어도 되고 없어도 되는 녀석이다.

다시 말해, 생략이 가능하다는 것이다.

 

그렇다면 언제 else를 써야하고 언제 else if를 써야하며 또 언제 else는 안 써도 되는지에 대해서

한 번 알아볼 필요가 있다.

일반적으로 if문을 사용하는 경우는 이런 경우다.

 

이거 아니면 저거.

 

위의 예시를 가져와서 대입해보면 이렇게 바꿀 수가 있겠다.

 

입력한 숫자가 1이면 "예", 1이 아니면 "아니오"

 

예제가 이러한 경우였다면 처음에 작성했던 if, else만으로도 만족할 수 있다.

따라서 이거 아니면 저거라는 조건이라면 단순히 if, else 만으로도 충분하다.

그리고 만약 이거 아니면 저거라는 조건에서 단순히 이거만 있다면

여기에서는 else조차 필요없게 된다.

그런데 우리가 봤던 예제는 조금 다르다.

바로 확실한 조건이 하나가 더 붙은 것이다.

 

입력한 숫자가 1이면 "예", 0이면 "아니오"

 

이렇게 확실한 조건이 하나가 더 붙는다면 당연히 조건을 하나 더 만들어줘야하는 것이 당연하다.

그렇기 때문에 예시에서 else가 아니라 else if를 사용해서

조건을 하나 더 작성해준 것이다.

결론적으로 확실한 조건이 1개 뿐이라면 if 하나로도 충분하지만

확실한 조건이 2개 이상이 된다면 else if를 추가해서

조건을 정확하게 적어줘야 한다는 것이다.

 

4. if문의 응용_2

 

앞서 예제는 간단한 예제를 알아봤고 이번에는 다른 예제를 한 번 알아보자.

조금 더 심화된 내용을 가지고 예제를 만들어볼텐데

달라지는 건 크게 없고 좀 더 복잡한 조건을 가지고 만들어보려고 한다.

 

예제)

성적 프로그램을 만들려고 한다.

점수가 90점 이상이라면 A를 받는데 만약 97점 이상이라면 A+,

93점 이하라면 A-가 출력되도록 작성해보자.

 

코드)

Scanner sc = new Scanner(System.in);
int score = 0;
score = sc.nextInt();

if (score >= 90 && score <= 100) {
	if (score >= 97) {
		System.out.println("A+입니다.");
	}
	else if (score <= 93) {
		System.out.println("A-입니다.");
	}
	else {
		System.out.println("A입니다.");
	}
}
sc.close();

여기서 갑자기 의문이 들 것이다.

어? if문 안에 또 if문이 들어있네?

이 또한 가능하다. 그리고 제한조차없다.

얼마든지 if문 안에 if문을 넣을 수 있다.

위의 예제를 보면 일단 큰 조건이 2개가 있다는 것을 알 수 있다.

 

첫 번째 큰 조건점수가 90점 이상이라는 것과

두 번째 큰 조건97점이상이거나 93점 이하라는 부분이다.

가장 큰 조건인 첫 번째 조건이 바깥의 if문이 될 것이고

그 다음 큰 조건인 두 번째 조건이 안에 들어있는 if문이 되는 것이다.

즉, 세부조건이 있다면 if문 안에 새로운 if문을 넣어서 구현하는 것이다.

이렇게 성적처리를 하는 프로그램도 if문을 사용해서 구현할 수 있는 것이다.

 

그런데 여기에서 눈여겨 볼 것이 하나 있다.

바로 조건의 범위이다.

 

5. if문을 사용하는 경우

 

if문 뿐만 아니라 switch문도 마찬가지지만

일반적으로 조건문을 쓰는 부분을 우리는 분기라고 말한다.

분기라고 한다면 선택지에 따라서 다른 결과를 실행하는 것을 말한다.

그런데 방금 언급했듯이 if문의 조건을 잘 살펴볼 필요가 있다.

if문은 조건하나의 값으로 나타날 수도 있지만

범위로도 나타날 수 있다는 것을 알아야 한다.

즉, 넓은 범위의 조건을 모두 충족시킬 수 있다는 것이다.

 

다시 말해, 우리가 일반적으로 분기라고 할 수 있는

2지선다, 4지선다와 같은 하나의 번호만 선택하는 보기 뿐만 아니라

90점부터 100점까지라는 범위를 조건으로 정할 때도 if문을 사용하는 것이다.

이 다음에 알아볼 switch문선택지를 구현할 때 특화된 명령어이고

if문선택지 뿐만 아니라 범위를 조건으로 가질 때도 아주 유용하게 사용할 수 있다.

그렇기 때문에 일반적으로 분기, 조건문을 작성한다면 if문을 사용하는게 대부분이다.

 

6. 마무리

 

if문if, else if, else로 구성되어 있고 한 세트라고 할 수 있다.

그렇기 때문에 구성 중에 하나라도 실행이 된다면 나머지를 모두 무시하게 된다.

if문은 ( ) 안의 조건식이 참(true)이라면 해당 { }을 실행할 것이고

( ) 안의 조건식이 거짓(false)이라면 해당 { }을 실행하지 않고 무시하고 지나간다.

만약 확실한 조건이 1개 뿐이라면 if, else 만으로 충분하고

여기에서 else는 생략이 가능하기 때문에 if만으로도 가능하다.

하지만 확실한 조건이 2개 이상이 된다면

if, else가 아니라 else if를 사용해서 확실하게 조건을 지정해야 한다.

if문은 안에 새로운 if문을 사용해서 작성할 수 있고

조건이 딱 정해진 것 뿐만 아니라 범위까지도 충족시키기 때문에

if문을 사용하는 경우조건문을 사용한다면 대부분 if문을 사용해서 작성한다.

Comments