본문 바로가기
프로그래밍 기초/Java

[Java] 조건문 완벽 가이드 : 정의, 종류, 사용법, 특징 총 정리

by 제이투더문 2024. 6. 12.

 

 프로그래밍에서 조건문은 프로그램의 흐름을 제어하는 데 중요한 역할을 합니다. 조건문을 사용하면 특정 조건에 따라 실행되는 코드 블록을 정의할 수 있습니다. Java에서 조건문은 프로그램의 논리를 구현하고 다양한 상황에 맞게 동작하게 하는 핵심 도구입니다. 이번 글에서는 Java의 조건문에 대해 정의하고, 종류별로 사용법과 특징을 정리해 보겠습니다

 

▤ 목차

     

    조건문이란?

     

     조건문은 주어진 조건을 평가하여 그 결과에 따라 다른 코드 블록을 실행하는 제어 구조입니다. 조건문을 사용하면 프로그램이 특정 조건에 맞게 동작하도록 할 수 있으며, 이를 통해 프로그램의 유연성과 기능성을 높일 수 있습니다. 실제로 여러분들이 개발자로 취업하시게 되면 정말 많이 사용하실 겁니다. 그래서 실습 문제가 많습니다.

     

    Java 조건문의 종류

     Java에는 여러 종류의 조건문이 있으며, 각 조건문은 다른 상황에서 유용하게 사용됩니다. 주요 조건문은 다음과 같습니다.

    (출처) 스마트인재개발원

     

    1. 단순 if문

     

     정의: if 문은 가장 기본적인 조건문으로, 주어진 조건이 참(true)일 때만 코드 블록을 실행합니다.

     

    사용법 :

    if (조건식) {
        // 조건식이 참일 때 실행될 코드
    }

     

    특징:

    • 단일 조건을 평가할 때 사용됩니다.
    • 조건이 참일 경우에만 코드 블록이 실행됩니다.
    • 조건이 거짓(false)일 경우, 코드 블록이 실행되지 않습니다

    (출처) 스마트인재개발원

     

     

    풀이 :

    import java.util.Scanner;
    
    public class Main {
    
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in); // 숫자를 입력받기 위한 Scanner 생성
    		System.out.print("나이를 입력하세요 : "); // 나이를 숫자로 입력받기
    		int age = sc.nextInt(); //입력 받은 숫자를 age에 할당
    		
    		if (age >= 20) { // age가 20보다 크거나 같다면(>=)
    			System.out.println("성인입니다");
    		}
    	}
    
    }

     

     위 문제에서 주의할 사항은 크거나 같다면입니다. 학생분들이 크거나 같다(>=), 크다(>), 작다(<), 작거나 같다(<=)를 조금씩 헷갈리시는 것 같습니다.

    (출처) 스마트인재개발원

     

     

     

    풀이 :

    import java.util.Scanner;
    
    public class Main {
    
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in); // 숫자를 입력받기 위한 Scanner 생성
    		System.out.print("정수를 입력하세요 : "); // 정수를 숫자로 입력받기
    		int num = sc.nextInt(); //입력 받은 숫자를 num 변수에 받기
    
    		if (num % 15 == 0) { // 3과 5의 배수를 만족하는 공통점 15, 30, 45 ...
    			System.out.println("3과 5의 배수입니다");
    		}
    	}
    
    }

     

     문제에서 3의 배수이면서 5의 배수를 찾으라고 했으니, 그를 만족하는 15로 딱 나눠 떨어지는 숫자를 찾아줍니다.

     

    2. if-else문

     

     정의: if-else 문은 주어진 조건이 참일 때와 거짓일 때 각각 다른 코드 블록을 실행합니다.

     

    사용법 :

    if (조건식) {
        // 조건식이 참일 때 실행될 코드
    } else {
        // 조건식이 거짓일 때 실행될 코드
    }

     

    특징:

    • 두 가지 경로 중 하나를 선택하여 실행합니다.
    • 조건이 참일 경우 if 블록이 실행되고, 거짓일 경우 else 블록이 실행됩니다.

     

     

    (출처) 스마트인재개발원

     

     

    풀이 :

    import java.util.Scanner;
    
    public class Main {
    
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in); // 숫자를 입력받기 위한 Scanner 생성
    		System.out.print("점수를 입력하세요 : "); // 점수를 숫자로 입력받기
    		int grade = sc.nextInt();
    		
    		if (grade >= 60) { //grade가 60 이상일 때
    			System.out.println("합격입니다.");
    		} else { //grade가 60 이상이 아닐 때
    			System.out.println("불합격입니다.");
    		}
    	}
    
    }

     

     위 문제에서도 이상, 이하, 초과, 미만을 잘 구분하시는 게 좋습니다.

     

    (출처) 스마트인재개발원

     

    풀이 :

    import java.util.Scanner;
    
    public class Main {
    
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in); // 숫자를 입력받기 위한 Scanner 생성
    		System.out.println("====에버랜드에 오신 걸 환영합니다!====");
    		
    		System.out.print("나이를 입력하세요 : "); // 나이를 숫자로 입력받기
    		int age = sc.nextInt();
    		
    		System.out.print("인원수를 입력하세요 : "); // 인원수를 숫자로 입력받기
    		int cnt = sc.nextInt();
    		
    		int money = 0; // 총금액을 계산할 변수 선언 및 초기화 = 0
    		
    		if (age < 20) {
    			money = ((5000 * 1/2)* cnt); // 20세 미만이 아니면 (기본료 * 1/2(50%)) * 인원수
    		} else {
    			money = 5000 * cnt; // 20세 미만이 아니면 기본료 * 인원수
    		}
    		
    		System.out.println("총" + money + "원입니다.");
    	}
    
    }

     

     위 문제에서 50% 할인이기 때문에 1 / 2를 곱해줬습니다. 50 / 100을 곱하셔도 될 것 같습니다.

     

     

    3. 다중 if문

     

     정의: if-else if-else 문은 여러 조건을 순차적으로 평가하여 조건에 맞는 코드 블록을 실행합니다.

     

    사용법 :

    if (조건식1) {
        // 조건식1이 참일 때 실행될 코드
    } else if (조건식2) {
        // 조건식2가 참일 때 실행될 코드
    } else {
        // 모든 조건식이 거짓일 때 실행될 코드
    }

     

    특징:

    • 여러 조건을 평가할 때 사용됩니다.
    • 조건이 참인 첫 번째 블록이 실행되고, 나머지 조건은 평가되지 않습니다.
    • 마지막 else 블록은 모든 조건이 거짓일 때 실행됩니다.

     

    (출처) 스마트인재개발원

     

     

    풀이 :

    import java.util.Scanner;
    
    public class Main {
    
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in); // 숫자를 입력받기 위한 Scanner 생성
    		System.out.print("점수 입력 : ");
    		int totalScore = sc.nextInt();
    		
    		if (totalScore >= 90) { // 90점 이상이면 A
    			System.out.println("A학점입니다!");
    		} else if (totalScore >= 80) { // 앞에서 조건이 걸리므로 90점 미만, 80점 이상이면 B
    			System.out.println("B학점입니다!");
    		} else if (totalScore >= 70) { // 앞에서 조건이 걸리므로 80점 미만, 70점 이상이면 B
    			System.out.println("C학점입니다!");
    		} else { // 앞에서 걸리는 모든 조건 외에 70점 미만이면 D
    			System.out.println("D학점입니다!");
    		}
    		
    	}
    
    }

     

     처음 조건이 90점 이상이므로 이에 걸리지 않으면, 90점 미만인 겁니다. 그래서 두 번째 조건은 80점 이상 90점 미만이 되는 겁니다.

     

     

    4. switch-case문

     

     정의: switch 문은 변수의 값에 따라 여러 코드 블록 중 하나를 선택하여 실행하는 구조입니다.

     

    사용법 :

    switch (변수) {
        case 값1:
            // 변수의 값이 값1일 때 실행될 코드
            break;
        case 값2:
            // 변수의 값이 값2일 때 실행될 코드
            break;
        default:
            // 변수의 값이 어떤 case와도 일치하지 않을 때 실행될 코드
    }

     

    특징:

    • 변수가 특정 값에 일치하는 경우를 처리할 때 유용합니다.
    • 각 case 블록 끝에 break 문을 사용하여 다른 case로의 실행을 방지합니다.
    • default 블록은 모든 case와 일치하지 않을 때 실행됩니다.

     

    (출처) 스마트인재개발원

     

     

    풀이 :

    import java.util.Scanner;
    
    public class Main {
    
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in); // 숫자를 입력받기 위한 Scanner 생성
    		System.out.print("점수 입력 : ");
    		int totalScore = sc.nextInt();
    		
    		switch (totalScore / 10) { // 100점 점수를 10으로 나눈다. 예) 100이면 10, 99면 9, 89면 8, 71이면 7
    		case 9, 10 :
    			System.out.println("A학점입니다!");
    			break;
    		case 8 :
    			System.out.println("B학점입니다!");
    			break;
    		case 7 :
    			System.out.println("C학점입니다!");
    			break;
    		default:
    			System.out.println("D학점입니다!");
    			break;
    		}
    	}
    
    }

     

     위와 같이 하나의 case문 안에 두 개의 조건을 넣을 수도 있습니다.

     

    (출처) 스마트인재개발원

     

     

    풀이 :

    import java.util.Scanner;
    
    public class Main {
    
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in); // 숫자를 입력받기 위한 Scanner 생성
    		System.out.print("월 입력 : ");
    		int month = sc.nextInt();
    		
    		String season = ""; // 입력값에 따라 출력 문구가 달라지므로 계절 이름을 넣을 문자열 변수 생성 및 초기화
    		
    		switch (month / 3) { // 월을 3으로 나눈다. 봄은 1이 나오고 여름은 2 가을은 3이 나온다. 겨울은 default로 처리해주도록 하자. 
    		case 1 :
    			season = "봄";
    			break;
    		case 2 :
    			season = "여름";
    			break;
    		case 3 :
    			season = "가을";
    			break;
    		default :
    			season = "겨울";
    			break;
    		}
    		
    		System.out.println(month + "월은 " + season + "입니다!");
    	}
    
    }

     

     case 문에서 주의할 사항은 break; 를 빼먹으면 그 아래 case문까지 실행되는 것입니다. 물론 용도에 따라 break문을 빼기도 합니다.

     

    조건문 최종 실습

     

     지금까지는 간단한 프로그램만 실행해 보았지만, 이는 4단계로 이루어져 조금 약간 복잡한 프로그램이 될 수도 있습니다. 차근차근 풀어가 보도록 합시다. step 별로 풀어가는 것도 방법입니다.

    (출처) 스마트인재개발원

     

    step 1 :

    import java.util.Scanner;
    
    public class Main {
    
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in); // 금액을 입력받기 위한 Scanner 생성
    		System.out.println("금액 입력 : "); 
    		int money = sc.nextInt(); // 금액입력
    		
    		System.out.println("메뉴를 고르세요.");
    		System.out.print("1.아우터(700월) 2.이구동성(1000원) 3.에그몽(500원) >> ");
    		int menu = sc.nextInt(); // 메뉴입력
    		
    		int price = 0;
    		
    		switch (menu) {
    		case 1:
    			price = 700; // 아우터
    			break;
    		case 2:
    			price = 1000; // 이구동성
    			break;
    		case 3:
    			price = 500; // 에그몽
    			break;
    		}
    		
    		System.out.println("잔돈 : " + (money - price) + "원");
    		
    	}
    
    }

     

     저는 위와 같이 구분이 확실한 조건문에는 switch-case문을 쓰는 것을 선호합니다. 간단하게 볼 수 있게 복합대입 연산자를 사용하였습니다.

     

    (출처) 스마트인재개발원

     

    step 2 :

    if ((money - price) < 0) { // 잔돈에서 가격을 뺀 숫자가 0보다 적으면 마이너스이므로 문구 출력 
        System.out.print("돈이 부족해요ㅠㅠ");
    }
    
    System.out.println("잔돈 : " + (money - price) + "원");

     

     잔돈 출력하는 윗부분에 조건문 하나를 추가해 줍니다.

     

    (출처) 스마트인재개발원

     

    step 3 :

    int changes = money - price; // 잔돈 변수 선언 및 초기화
    		
    System.out.println("잔돈 : " + changes + "원");
    System.out.println("천원 : " + changes / 1000 + "개"); // 나누기 1000원으로 몇개인지 계산

     잔돈계산을 편하게 하기 위해 잔돈 변수를 선언해 주고, 1000원짜리 계산 출력문 추가.

     

    (출처) 스마트인재개발원

     

     

    step 4 :

    int changes = money - price; // 잔돈 변수 선언 및 초기화
    		
    System.out.println("잔돈 : " + changes + "원");
    System.out.print("천원 : " + changes / 1000 + "개, "); // 나누기 1000원으로 몇개인지 계산
    System.out.print("오백원 : " + (changes % 1000) / 500 + "개, "); // 1000원으로 나눈 나머지 몇백원 계산 뒤 500원으로 나누기
    System.out.print("백원 : " + (changes % 500) / 100 + "개"); // 500원으로 나눈 나머지에서 100원으로 나누기

     

     편하게 처리하려고 변수 선언도 없이 출력했지만, 초반에는 풀어서 하는 게 좋습니다. 1000원, 500원, 100원 각각 변수를 만들어서 출력하는 게 보기도 좋습니다. 아래 풀어서 쓴 step 4를 첨부하겠습니다.

    int chg_1000, chg_500, chg_100 = 0;
    		
    chg_1000 = changes / 1000; // 나누기 1000원으로 몇개인지 계산
    chg_500 = (changes % 1000) / 500; // 1000원으로 나눈 나머지 몇백원 계산 뒤 500원으로 나누기
    chg_100 = (changes % 500) / 100; // 500원으로 나눈 나머지에서 100원으로 나누기
    System.out.println("천원 : " + chg_1000 + "개, 오백원 : " + chg_500 + "개, 백원 : " + chg_100 + "개");

     

     

     

    마무리

     

     Java의 조건문은 프로그램의 흐름을 제어하고 다양한 상황에 맞게 동작하게 하는 중요한 도구입니다. 각 조건문의 사용법과 특징을 이해하면 보다 유연하고 강력한 프로그램을 작성할 수 있습니다. 앞서 말한 내용과 같이 조건문은 실제로 현업에서 정말 많이 보고 많이 사용하는 파트입니다. 특히 초보자들은 조건문을 잘 이해하고 활용하는 것이 프로그래밍 실력 향상에 큰 도움이 될 것입니다. 

     

     프로그래밍을 처음 접하는 초보자분들도 이번 글을 통해 Java 조건문에 대한 기본 개념을 확실히 잡으셨기를 바랍니다. 조건문은 작은 요소일 수 있지만, 코드를 작성하는 데 있어 중요한 역할을 합니다. 꾸준한 연습과 학습을 통해 조건문 사용에 익숙해지고, 더 나아가 복잡한 논리도 구현할 수 있기를 바랍니다.