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 블록이 실행됩니다.
자주 하는 실수 & 개선 포인트
- & vs &&
- 조건문에서는 &&(단락 평가) 사용이 정석입니다.
- &는 boolean에서도 동작하지만 양쪽을 모두 평가해 불필요한 계산/예외 위험이 있습니다.
- 체인 구조 혼용 금지
- if (독립) + if ... else if ...(체인)를 섞으면 else가 바로 직전의 if에만 연결됩니다.
- 서로 배타적인 조건은 하나의 체인으로 구성하세요.
- 경계값 처리
- 어떤 값을 포함(≤, ≥)할지 배제(<, >)할지 일관성 있게 정합니다.
- 본 예제는 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 |