본문 바로가기
기초 및 언어/▶ Java&JSP

04. 제어문

by 류딩이 2025. 8. 13.

1.  if 문

if 문 기본 구조

  if (조건) {
    조건이 참이면 실행될 문장1;
    조건이 참이면 실행될 문장2;
   }
   무조건 실행되는 자리


 

/**
 * Ex01_if_else
 * - if, else if, else 기본 흐름을 보여주는 예제
 * - 비교 연산 결과(true/false)에 따라 분기하여 서로 다른 코드를 실행
 */
public class Ex01_if_else {

    public static void main(String[] args) {

        // Ex01: if문 기본
        // 조건이 true일 때만 블록({ ... }) 안의 문장을 실행한다.
        int num1 = 100;
        int num2 = 20;

        if (num1 > num2) {                  // 100 > 20 → true
            System.out.println("num1이 더 크다.");
        }
        if (num1 < num2) {                  // 100 < 20 → false → 실행되지 않음
            System.out.println("num2이 더 크다.");
        }
        System.out.println("무조건 실행되는 자리");

        // ------------------------------------------------------------

        // Ex02: if ~ else if ~ else
        // 위에서부터 차례대로 조건을 검사하며,
        // 첫 번째로 true가 되는 블록만 실행되고 나머지는 건너뛴다.
        int num3 = 200;
        int num4 = 200;

        if (num3 > num4) {                  // false
            System.out.println("num3이 더 크다.");
        } else if (num3 < num4) {           // false
            System.out.println("num4가 더 크다.");
        } else {                            // 위 두 조건 모두 false → 여기 실행
            System.out.println("num3과 num4가 같다.");
        }
        System.out.println("무조건 실행되는 자리");
    }
}

 

 

(1). 독립 if문

  • if 두 개가 각각 평가되므로, 두 조건 모두 참이면 두 블록이 모두 실행됩니다.
  • 예제에서는 첫 번째 if만 실행되고, 두 번째는 실행되지 않음.

(2). if ~ else if ~ else

  • 서로 배타적인 조건문입니다.
  • 위에서부터 차례로 검사하며 첫 번째 참인 블록만 실행됩니다.
  • 모든 조건이 거짓이면 else 블록이 실행됩니다.

자주 하는 실수 & 개선 포인트

  1. & vs &&
    • 조건문에서는 &&(단락 평가) 사용이 정석입니다.
    • &는 boolean에서도 동작하지만 양쪽을 모두 평가해 불필요한 계산/예외 위험이 있습니다.
  2. 체인 구조 혼용 금지
    • if (독립) + if ... else if ...(체인)를 섞으면 else가 바로 직전의 if에만 연결됩니다.
    • 서로 배타적인 조건은 하나의 체인으로 구성하세요.
  3. 경계값 처리
    • 어떤 값을 포함(≤, ≥)할지 배제(<, >)할지 일관성 있게 정합니다.
    • 본 예제는 1~10, 11~20, 21~30을 포함하도록 설계했습니다.

 

 

if문 범위 설정 예제 1

import java.util.Scanner;

public class Ex02_if_else {
	public static void main(String[] args) {
		
		// Ex01 : 범위 설정 예제
		int n;
		// n변수에 정수 입력받아 넣고 n변수 출력하기
		Scanner input = new Scanner(System.in);
		System.out.print("정수 :");
		n = input.nextInt();
		System.out.println("n :" + n);
		
		if ((0 < n) && (n <11)) {
			System.out.println("1~10 사이의 정수입니다.");
			
		}else if ((10 < n) && (n <21)) {
			System.out.println("11~20 사이의 정수입니다.");
			
		}else if ((20 < n) && (n <31)) {
			System.out.println("21~30 사이의 정수입니다.");
			
		}else  {
			System.out.println("그 밖의 정수입니다.");
		}

		
		// Ex02 : 범위 설정 예제
		if (n % 5 == 0) {
			System.out.println("5의 배수입니다.");
			
		}else if (n % 10 == 0) {
			System.out.println("10의 배수입니다.");
			
		}else {
			System.out.println("X");
		}
	}
}

 

 

 

if문 범위 설정 예제 2

학점 구하기 

이름 입력=>윤아
국어 점수=>77
영어 점수=>88
수학 점수=>98

 

출력 형태 :

---------------------------
이름 국어 영어 수학
---------------------------
윤아 77 88 98
---------------------------
총점: 263
평균: 87.67
---------------------------
학점=B

평균이 90점 이상이면 학점=A
평균이 80~89점 이상이면 학점=B
평균이 60점 미만이면 학점=F

import java.util.Scanner;

public class Ex03_if_else {
	/*
	// 예제문제 1: 학점 구하기 
	 
	이름 입력=>윤아
	국어 점수=>77
	영어 점수=>88
	수학 점수=>98
	---------------------------
	이름	국어	영어	수학
	---------------------------
	윤아	77	88	98
	---------------------------
	총점: 263
	평균: 87.67
	---------------------------
	학점=B
	
	평균이 90점 이상이면 학점=A
	평균이 80~89점 이상이면 학점=B
	평균이 60점 미만이면 학점=F
	*/
	public static void main(String[] args) {

		// 입력 
		Scanner input = new Scanner(System.in);
		System.out.print("이름 입력 :");
		String name = input.next();
		System.out.printf("이름 : %s\n",name);
		
		System.out.print("국어 점수 입력 :");
		int kor = input.nextInt();
		
		System.out.print("영어 점수 입력 :");
		int eng = input.nextInt();
		
		System.out.print("수학 점수 입력 :");
		int math = input.nextInt();
		
		// 점수 출력		
		System.out.println("-----------------------------");
		System.out.println("이름\t국어\t영어\t수학");
		System.out.println("-----------------------------");
		System.out.println(name+"\t"+kor+"\t"+eng+"\t"+math);
		
		int total = kor + eng + math;
		double avg = (double)total / 3;
		System.out.println("-----------------------------");
		System.out.printf("총점 : %d\n", total);
		System.out.printf("평균 : %.2f\n", avg);
		
		
		// 학점 조건문
		String grade;
		
		if (90 <= avg) {
			grade = "A";
			System.out.println("학점 : " + grade);
			
		}else if (80<= avg){
			grade = "B";
			System.out.println("학점 : " + grade);
		
		}else if (70<= avg){
			grade = "C";
			System.out.println("학점 : " + grade);
			
		}else if (60<= avg){
			grade = "D";
			System.out.println("학점 : " + grade);	
			
		}else {
			grade = "F";
			System.out.println("학점 : " + grade);
		}
		
	}

}

 

 

2. Switch  / case

switch / case 기본 구조

 	switch (정수형변수 or 수식 or 문자열 변수) {
		case 값 1:
		case 값 2:
		default (그 밖의 경우)
	}

 

switch / case 문 예제

 

학점 출력 if문을 switch / case 로 바꾸기

// if문

		if (90 <= avg) {
			grade = "A";
			System.out.println("학점 : " + grade);
			
		}else if (80<= avg){
			grade = "B";
			System.out.println("학점 : " + grade);
		
		}else if (70<= avg){
			grade = "C";
			System.out.println("학점 : " + grade);
			
		}else if (60<= avg){
			grade = "D";
			System.out.println("학점 : " + grade);	
			
		}else {
			grade = "F";
			System.out.println("학점 : " + grade);
		}

 

// switch / case문

switch ((int) avg / 10) {
		    case 10: // 평균이 100점인 경우
		    	grade = "A";
		    	break;
		    case 9:  // 90~99
		        grade = "A";
		        break;
		    case 8:  // 80~89
		        grade = "B";
		        break;
		    case 7:  // 70~79
		        grade = "C";
		        break;
		    case 6:  // 60~69
		        grade = "D";
		        break;
		    default: // 0~59
		        grade = "F";
		}

		System.out.println("학점 : " + grade);

🌈Java switch문 주의사항 정리

 

(1) break 누락 시 폴스루(fall-through) 발생

  • break를 쓰지 않으면 다음 case의 코드가 연속 실행됩니다.
int num = 1;
switch (num) {
    case 1:
        System.out.println("One");
    case 2:
        System.out.println("Two");
}
// 출력:
// One
// Two  ← break 없어서 내려옴

 

 

(2) 비교 값 자료형 제한

  • switch (식)에서 사용 가능 자료형
    • byte, short, char, int
    • enum(열거형)
    • String (Java 7 이상)
  • long 불가능
long value = 10;
// switch(value) { ... } // ❌ 컴파일 에러

 

 

(3) case 값은 상수여야 함

  • case에 변수 사용 불가
  • 리터럴(예: case 3:) 또는 final로 선언된 상수만 가능
final int ONE = 1;
int num = 1;
switch (num) {
    case ONE: // ✅ 가능 (상수)
    // case num: // ❌ 불가능 (변수)
}

 

 

(4) 중복 값 금지

  • 같은 switch 블록 내에서 case 값 중복 불가
switch (n) {
    case 1:
        System.out.println("A");
    // case 1: // ❌ 중복 불가
}

 

(5) 조건식 불가능

  • switch는 값 일치 비교만 가능
  • 범위 조건(>, <, &&, ||)은 사용할 수 없음
    → 이런 경우 if문 사용
// ❌ 불가능
// case n > 10:

 

(6) default 위치는 자유

  • default는 어디에나 위치 가능하지만, 보통 가독성을 위해 맨 아래 배치
  • default에도 break를 쓰지 않으면 폴스루 가능

(7) String 비교 시 대소문자 주의

  • switch의 String 비교는 equals() 사용
  • "abc"와 "ABC"는 다르게 인식
    → 필요하면 .toLowerCase() 등으로 변환 후 비교

(8) null 값 주의

  • switch에서 String 값이 null이면 NullPointerException 발생
String s = null;
switch (s) { // ❌ NPE 발생
    case "hi":
        break;
}

 

(9) 성능 특성

switch는 값 비교가 해시 또는 jump table로 최적화되어,
값이 많을 때 if-else보다 빠를 수 있음.

 

 

주의사항 설명 정리

break 누락 의도하지 않으면 반드시 작성
자료형 제한 long 불가, String/enum 사용 가능
case 값 상수만 가능, 중복 불가
조건식 불가 범위 비교는 if문 사용
default 어디든 가능, 보통 맨 아래
String 대소문자/ null 체크 필요

'기초 및 언어 > ▶ Java&JSP' 카테고리의 다른 글

00. Debug과정  (0) 2025.08.13
05. 반복문 for  (6) 2025.08.13
03. 연산자  (2) 2025.08.12
02. 입력문  (4) 2025.08.12
01. 출력문, 자료형(정수형, 실수형, 논리형, 문자형)  (1) 2025.08.12