본문 바로가기

language/java

9. [java] 조건문 if문, switch문

728x90
반응형

if문

 

조건식 결과에 따라 블록 실행 여부가 결정된다.

조건식에는 true/false 결과값을 가지는 비교연산자나 논리연산자 혹인 boolean 타입 변수가 사용된다.

 

if문의 기본 구조는

if (조건식){
	실행문;
	실행문;
}

위와 같다. 만약 조건식이 참(true) 이면 아래의 실행문들을 실행하고,

그렇지 않고 거짓(false) 라면 실행하지 않고 넘어가게 되는 구조이다.

if(조건문) 실행문;

만약 실행문이 한줄이라면 위와같이 쓸 수 있다.

한줄만 사용할 때 실행문을 아래줄로 내리면 가독성이 굉장히 불편해지고, 위와같이 우측으로 빼는경우도

실행문이 짧을 때만 사용해주고 어지간하면 중괄호{,} 를 이용해서 사용해주도록 하자.

 

if문은 조건문이 만족할경우 실행하는 것이지만, 만약 if문을 만족하지 못할경우 어떠한 실행문들을 실행하게 해 줄 수 있다.

else 와 else if 문을 사용하는 것인데, 예시로 먼저 보여주겠다.

if(조건문1){
	실행문1;
	실행문2;
} else if(조건문2){
	실행문3;
	실행문4;
} else if(조건문3){
	실행문5;
	실행문6;
} else {
	실행문7;
	실행문8;
}

위의 코드는 조건문1이 true라면 실행문 1,2만 실행하고 위의 코드가 끝나게 된다.

하지만 조건문1이 false고 조건문2가 true 라면 실행문3,4만 실행된다.

또 조건문1,2가 둘다 false고 조건문3이 true라면 실행문5,6이 실행된다.

만약 조건문1,2,3이 다 false라면 실행문7,8이 실행된다.

이처럼 else if는 위의 조건문이 만족 못할경우 다음 조건문을 확인하겠다는 명령어이고,

else는 if와 else if가 모두 다 거짓이라면 실행하겠다는 명령어이다.

 

package chapter4;

public class IfExample {
	public static void main(String[] args) {
		int score = 75;
		
		if(score>=90) {
			System.out.println("점수가 100~90입니다.");
			System.out.println("등급은 A입니다.");
		}else if(score>=80){
			System.out.println("점수가 80~89입니다.");
			System.out.println("등급은 B입니다.");
		}else if(score>=70) {
			System.out.println("점수가 70~79입니다.");
			System.out.println("등급은 C입니다.");
		}else {
			System.out.println("점수가 70 미만입니다.");
			System.out.println("등급은 D입니다.");
		}
	}
}

예제를 실행해보겠다. int score은 75가 주어졌고,

위의 if문의 첫 조건문은 90이상이다. 당연히 false이니 다음 else if문으로 가고 이경우도 80 이상이니

한번 더 다음 else if문으로 간다. 이번엔 score이 70이상이 맞으니 true값을 얻어서 위와 같은 결과값을 얻을것이다.

위의 코드를 보면 알겠지만 사실상 두번째 else if 의 조건문은

if(score<90 && score>=80) 이와 같은 조건문이다. 이처럼 위의 조건을 먼저 실행하게 아래 조건으로 가게 되니,

조건 범위를 순차적으로 else if를 잘 이용해준다면 더 효율적인 코딩이 가능할 것이다.

 

Switch문

 

switch문은 변수가 어떤 값을 갖느냐에 따라 실행문이 선택된다.

switch문의 변수에는 실수값(float, double)을 조건으로 할 수없고, boolean도 불가능하다.

string의 경우에는 JRE1.8 버전 이후에만 가능하다. 

switch문의 형식은 아래와 같다.

switch (변수){
	case a :
		실행문;
	case b :
		실행문;
	case c :
		실행문;
	case d :
		실행문;
	default :
		실행문;
}

switch의 변수가 case 의 값을 가지게 되면 그 case문의 실행문을 실행하는게 기본적인 switch문의 구조다.

default의 경우에는 

package chapter4;

public class SwichNoBreakCaseExample {
	public static void main(String[] args) {
		int time = (int) (Math.random() * 4) + 8;
		System.out.println("[현재 시각: " + time + " 시]");
		
		switch(time) {
			case 8: System.out.println("출근합니다.");
			case 9: System.out.println("회의를 합니다.");
			case 10: System.out.println("업무를 봅니다.");
			case 11: System.out.println("외근을 나갑니다.");
		}
	}
}

우선 간단한 예제를 실행해보았다. switch(time) 으로 time값에 따라서 그 case가 실행되어야 한다.

C언어의 경우에는 time값이 8 이라면 "출근합니다" 만 출력하고 끝날 것이다. 하지만 아래가 이 코드의 실행결과이다.

보다시피 time값이 8이 나왔지만 case 8,9,10,11이 다 실행된 것을 볼 수 있다.

time 값이 10이 나왔을 땐 case10,11이 실행이 되었다.

이처럼 자바의 switch문은 한 케이스가 실행되면 그 아래의 case가 모두 실행된다.

그래서 이를 제어해주기 위해서 자바의 switch문은 break;가 반드시 필요하다.

break는 현재의 루프나 switch문을 벗어나게 해준다.

 

package chapter4;

public class SwitchStringExample {
	public static void main(String[] args) {
		String position = "과장";
		
		switch(position) {
			case "부장":
				System.out.println("700만원");
				break;
			case "과장":
				System.out.println("500만원");
				break;
			default:
				System.out.println("300만원");
		}
	}
}

하나의 예제를 더 실행해보았다. 위처럼 break;를 사용해주면 case 과장에서만 실행되고 그 아래있는 문들은

실행되지 않은것을 확인하였다.

반응형