본문 바로가기
Java/Basic

조건문(if, switch)

by 최로이 2021. 2. 19.

1.1 if문

if문은 가장 기본적인 조건문이며, 다음과 같이 조건식과 괄호로 이루어져 있다. if의 뜻이 '만약 ~라면'이란 뜻으로 '조건식이 참(true)이면 괄호{}안의 문장들을 수행하라'는 의미로 이해하면 된다.

 

1) 형태

//if문 기본 형태

if(조건식){
  //조건식이 참일 때 수행될 문장 입력
}

if문의 예제)

//1. 기본적인 if문 사용 예제
int score = 80;
int score2 = 50;

if(score > 60){
	System.out.println("참, Score가 60보다 큽니다."); //조건식이 참일 때 수행되는 문장
} else {
	System.out.println("거짓, Score가 60보다 작습니다."); //조건식이 참이 아닐 경우 수행되는 문자
}

//2. 블럭없이 사용하는 if문 예제
if(score2 < 40)
	System.out.println("score2는 40보다 큽니다.");

일반적으로는 '{ }' 블럭안에 여러 문장을 하나의 단위로 묶어 사용하는데, 만약 한 문장만 넣거나 아무런 문장도 넣지 않을 경우 '{ }' 없이 사용해도 무방하다.

 

1.2 if - else if문

if-else if문은 두 가지 경우 중 하나가 수행되는 구조인데, 처리 해야 할 경우의 수가 셋 이상인 경우 사용하는 조건문이다.

 

1) 형태

//if-else if문 형식

if(조건식1){
  //조건식 1의 연산결과가 참일 때 수행되는 문장 작성
  }else if(조건식2){
    //조건식2의 연산결과가 참일 때 수행될 문장 작성
  }else if(조건식3){ //여러 개의 else if를 사용할 수 있다.
    //조건식3의 연산결과가 참일 때 수행될 문장 작성
}else{
  //위의 어떠한 조건식에도 부합하지 않을 때 수행될 문장 작성
  //이 때 else의 문장은 생략 가능하다
}

if-else if문의 예제)

//사용예제
public class elseifEx {
	public static void main(String[] args) {
		int score = 84;
		char grade;

		if(score >= 90){
			grade = 'A';
		} else if (score >= 80) {
			grade = 'B';
		} else if (score >= 70) {
			grade = 'C';
		} else {
			grade = 'D';
		}
		System.out.println("당신의 학점은 "+grade+"입니다.");
	}
}

 

1.3 중첩 if문

if문의 블럭 내에 또 다른 if문을 포함시켜 사용하는 문장으로 외부 if문과 구분시키기 위해 들여쓰기를 꼭 해야한다. 기본적으로 외부 if문에 대한 조건식에 영향을 받으며, 외부 조건식이 참(true)일 때와 거짓(false)일 때에 대한 조건식이 기입된다. 

 

1) 형태

//중첩 if문 형식

if(조건식1) {
    //조건식1이 참일 때 수행될 문장
    if(조건식2) {
      //조건식1과 조건식2가 모두 참일 때 수행될 문장
    } else {
      //조건식1이 참이고, 조건식2가 거짓일 때 수행될 문장
} else {
    //조건식1이 거짓일 때 수행되는 문장
}

중첩 if문의 예제)

class overlapIf {
	public static void main(String[] args) { 
		int  score = 0;
		char grade = ' ';
		char opt   = '0';

		System.out.print("점수를 입력해주세요.>");

		Scanner scanner = new Scanner(System.in);
		String tmp = scanner.nextLine(); // 화면을 통해 입력받은 내용을 tmp에 저장
		score = Integer.parseInt(tmp);   // 입력받은 문자열(tmp)을 숫자로 변환
		
		System.out.printf("당신의 점수는 %d입니다.", score);

		if (score >= 90) {		      // score가 90점 보다 같거나 크면 A학점(grade)
			grade = 'A';
			if (score >= 98) { 	      // 90점 이상 중에서도 98점 이상은 A+
				opt = '+';	
			} else if (score < 94) {  // 90점 이상 94점 미만은 A-
				opt = '-';
			}
		} else if (score >= 80){	  // score가 80점 보다 같거나 크면 B학점(grade)
			grade = 'B';
			if (score >= 88) {
				opt = '+';
			} else if (score < 84)	{
				opt = '-';
			}
		} else {				      // 나머지는 C학점(grade)
			grade = 'C';
		}
			
		System.out.printf("당신의 학점은 %c%c입니다.%n", grade, opt);
	}
}

 

 

1.4 Switch문

if문은 결과가 참 또는 거짓, 두 가지만 있기 때문에 조건식의 경우가 많아지면 if else if문이 많아지면 복잡해질 수밖에 없다. 그에 비해 switch문은 단 하나의 조건식으로 많은 경우의 수를 처리할 수 있고, 표현도 간결하므로 알아보기 쉽다. 그래서 처리할 경우의 수가 반복적이고 많으면 if문보다 switch문으로 처리하는 것이 좋다.

다만 switch문은 제약조건이 있기 때문에 경우의 수가 많아도 if문으로 작성해야 하는 경우가 있다.

 

1) 형태

switch(조건식){
  case 값1 :
    //조건식의 결과가 값1과 같은 경우 수행될 문장들
    //..
    break;
  case 값2 : 
    //조건식의 결과가 값1과 같은 경우 수행될 문장들
    //..
    break;
  case 값3 : 
    //조건식의 결과가 값1과 같은 경우 수행될 문장들
    //..
    break;
  //..
  default : 
    //조건식의 결과와 일치하는 case문이 없을 때 수행될 문장들
    //..
}

조건문이 실행되는 과정은 다음과 같다.

① 괄호'()' 안의 조건식을 계산한다.

② 조건식의 결과와 일치하는 case문의 값을 찾아간다.

③ 이후의 문장들을 수행한다.

④ break문이나 switch문의 끝을 만나면 switch문 전체를 빠져나간다.

⑤ 조건식의 결과와 일치하는 case문이 하나도 없다면 default문으로 이동한다.

  -이 때 default문은 if문의 else 블럭과 같은 영할을 한다.

⑥ default문의 위치는 어디라도 상관없으나 보통 마지막에 놓기 때문에 break문을 사용하지 않아도 된다.

 

2) switch문의 제약 조건

① switch문의 조건식 결과는 정수 또는 문자열이어야 한다.

② case문의 값은 정수, 상수만 가능하며, 중복 되지 않아야 한다.

 

 

switch문의 예제)

import java.util.Scanner;

public class switchEx1 {

	public static void main(String[] args) {
		char gender;
		String regNo = "";
		System.out.print("당신의 주민등록번호를 입력하세요 : 000000-1234567 >>");
		
		Scanner scanner = new Scanner(System.in);
		regNo = scanner.nextLine();
		
		gender = regNo.charAt(7); //입력 받은 8번쨰 문자를 gender에 저장
		
        	//이때 ' '는 타입이 char이기 때문에 해줘야 한다
		switch (gender) {
			case '1':
			case '3':
				switch(gender) {
				case '1':
					System.out.println("당신은 2000년 이전에 출생한 남자입니다.");
					break;
				case '3':
					System.out.println("당신은 2000년 이후에 출생한 남자입니다.");
				}
				break;		//break문을 빼먹지 않도록 주의해야 한다.
			case '2':
			case '4':
				switch (gender) {
				case 2:
					System.out.println("당신은 2000년 이전에 출생한 여자입니다.");
					break;
				case 4:
					System.out.println("당신은 2000년 이후에 출생한 여자입니다.");
					break;
				}
				default:
					System.out.println("입력한 주민등록 번호는 유효한 주민등록번호가 아닙니다.");
			break;
		}
	}
}

'Java > Basic' 카테고리의 다른 글

배열(Array)  (0) 2021.02.21
반복문(for, while, do-while)  (0) 2021.02.20
연산자  (0) 2021.02.18
형변환(Casting)  (0) 2021.02.17
기본형(primitive type)  (0) 2021.02.16

댓글