프로그래밍에서 조건문은 프로그램의 흐름을 제어하는 데 중요한 역할을 합니다. 조건문을 사용하면 특정 조건에 따라 실행되는 코드 블록을 정의할 수 있습니다. 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 조건문에 대한 기본 개념을 확실히 잡으셨기를 바랍니다. 조건문은 작은 요소일 수 있지만, 코드를 작성하는 데 있어 중요한 역할을 합니다. 꾸준한 연습과 학습을 통해 조건문 사용에 익숙해지고, 더 나아가 복잡한 논리도 구현할 수 있기를 바랍니다.
'프로그래밍 기초 > Java' 카테고리의 다른 글
[Java] 이중 for문 쉽게 배우기: 초보자를 위한 개념과 예제 (0) | 2024.06.15 |
---|---|
[Java] 반복문 완벽 가이드 : 초보자를 위한 이해와 예제 (0) | 2024.06.14 |
[Java] 연산자 총정리 : 종류, 사용법, 특징, 우선순위까지! (0) | 2024.06.11 |
[Java] 변수와 상수의 이해: 선언 방법과 규칙, 자료형 및 형변환 (0) | 2024.06.10 |
[Java] Eclipse를 이용한 Java 프로젝트 생성과 Hello World 출력하기 (1) | 2024.06.09 |