| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 개발자팁
- 객체지향
- 정렬
- 멀티스레드
- 프로그래밍기초
- 개발자취업
- 클린코드
- 코딩테스트팁
- 코딩공부
- 자바공부
- 백준
- JVM
- HashMap
- 가비지컬렉션
- 예외처리
- Java
- 자바
- 자료구조
- 자바개발
- 메모리관리
- 자바프로그래밍
- 알고리즘
- 자바기초
- 코딩테스트준비
- 알고리즘공부
- 코딩테스트
- 프로그래머스
- 코딩인터뷰
- 파이썬
- 개발공부
- Today
- Total
코드 한 줄의 기록
Java 조건문 완벽 가이드: if vs switch, 그리고 최신 Switch 표현식 패턴 활용법 본문
자바(Java)를 공부하다 보면 조건문(Conditional Statements) 은 빼놓을 수 없는 핵심 개념입니다. 특히 if문과 switch문의 차이, 그리고 Java 14 이상에서 도입된 Switch 표현식(Expression) 과 패턴 매칭(Pattern Matching) 기능은 개발 생산성을 크게 높여줍니다. 이 글에서는 기초부터 최신 기능까지 자연스러운 설명과 예제를 통해 차근차근 정리해보겠습니다.
조건문의 기초: if문 이해하기
if-else 구문 구조
가장 기본적인 조건 처리 구문은 if, else if, else입니다.
int score = 85;
if (score >= 90) {
System.out.println("A학점");
} else if (score >= 80) {
System.out.println("B학점");
} else {
System.out.println("C학점 이하");
}
if안 조건이 참일 때 블록을 실행else if로 추가 조건 처리- 모든 조건이 거짓일 때
else블록 실행
중첩 if문과 가독성
조건이 복잡해지면 중첩 if문도 사용할 수 있지만, 가독성이 급격히 떨어집니다.
if (user.isActive()) {
if (user.hasPermission("ADMIN")) {
// 관리자 로직
} else {
// 권한 없음
}
} else {
// 비활성 사용자 처리
}
이처럼 들여쓰기가 깊어질수록 코드를 이해하기 어려워지므로, 논리가 복잡해지면 switch문이나 별도 메서드 분리 및 Early Return을 고려하는 것이 좋습니다.
switch문: 여러 경우 분기 처리
전통적인 switch-case
switch는 특정 변수의 값이 여러 상수 중 하나와 일치하는지 분기할 때 유용합니다.
String day = "MONDAY";
switch (day) {
case "MONDAY":
System.out.println("월요일입니다.");
break;
case "TUESDAY":
System.out.println("화요일입니다.");
break;
default:
System.out.println("주중이거나 주말입니다.");
}
case마다break를 사용해 다음 case로 넘어가는 걸 방지default는 모든 case가 일치하지 않을 때 실행
switch의 한계와 단점
- 문자열 비교 시 성능 이슈(해시 비교 상대적으로 느림)
break누락 시 의도치 않은 fall-through 발생- 여러 case가 공통 로직일 때 코드 중복 발생
Java 14+ Switch 표현식 도입
Java 14부터 switch를 표현식으로도 사용할 수 있게 바뀌었습니다. 기존 switch는 문(Statement)이었지만, 요즘은 값을 반환하는 표현식(Expression)으로 더 간결하게 작성 가능합니다.
switch 표현식 문법
String result = switch (score / 10) {
case 10, 9 -> "A학점";
case 8 -> "B학점";
case 7 -> "C학점";
default -> "F학점";
};
System.out.println(result);
->화살표를 사용해case와 실행 블록 연결- 한 줄에 여러 상수(9와 10)를 쉼표로 묶어서 처리 가능
- 반환값을 변수에 바로 할당
Fall-through 제거와 가독성 향상
표현식 switch는 break가 필요 없어 실수로 누락하는 일을 없애주며, 케이스별 로직이 훨씬 깔끔해집니다.
패턴 매칭(Pattern Matching) with Switch
Java 17 이후부터 패턴 매칭 기능이 preview로 제공되고, Java 21 정식 도입을 목표로 발전 중입니다. 패턴 매칭은 instanceof와 switch에서 객체 타입 검사 및 타입 변환을 간소화합니다.
instanceof 패턴 매칭
기존
if (obj instanceof String) {
String s = (String) obj;
System.out.println(s.length());
}
패턴 매칭 적용
if (obj instanceof String s) {
System.out.println(s.length());
}
instanceof와 캐스팅을 하나로 합쳐 코드가 간결
Switch에서 패턴 매칭 (Preview)
switch (obj) {
case Integer i -> System.out.println("정수: " + i);
case String s -> System.out.println("문자열: " + s.length());
case null -> System.out.println("null 값");
default -> System.out.println("처리 불가 타입");
}
- 객체 타입에 따라 자동으로 로컬 변수(
i,s)가 바인딩 - null case도 지정 가능
- 복잡한 타입 분기 로직을 깔끔하게 처리
예제: 실제 프로젝트에서의 활용
주문 처리 시나리오
쇼핑몰 주문 상태를 enum으로 관리하고, switch 표현식 + 패턴 매칭 활용
public enum OrderStatus {
NEW, PROCESSING, SHIPPED, DELIVERED, CANCELED
}
public String getStatusMessage(Object statusObj) {
return switch (statusObj) {
case OrderStatus.NEW -> "주문 생성";
case OrderStatus.PROCESSING -> "처리 중";
case OrderStatus.SHIPPED -> "배송 중";
case OrderStatus.DELIVERED -> "배송 완료";
case OrderStatus.CANCELED -> "주문 취소";
case String s -> "알 수 없는 상태 문자열: " + s;
default -> "지원하지 않는 상태 타입";
};
}
- enum 외에 문자열 혹은 다른 타입도 하나의 switch에서 모두 처리
- 유지보수 시 새로운 상태 추가도 간편
파일 처리 예시
Object file = getFile(); // File 또는 Path 객체 반환
String info = switch (file) {
case java.io.File f -> "File 크기: " + f.length();
case java.nio.file.Path p -> "경로: " + p.toString();
default -> "알 수 없는 파일 타입";
};
- File과 Path를 하나의 로직에서 분기 처리하여 공통 메서드 단순화
주요 포인트
- if문은 단일 조건, 복잡한 논리 분기에 유리하나 중첩 시 가독성 저하
- 전통 switch-case는 상수 기반 분기에 적합하나 break 누락 주의
- Java 14+ Switch 표현식으로 break 없이 반환값 처리, 여러 상수 묶기 가능
- Java 17/21 패턴 매칭으로 instanceof+캐스팅, switch에서 타입 검사 간소화
추천 학습 순서
1. 기초 if/else 구조 확실히 이해
2. 전통 switch-case와 fall-through 특징 학습
3. Switch 표현식으로 코드 리팩토링 연습
4. Pattern Matching Preview 기능 직접 사용해보기
5. 실전 프로젝트에서 enum, 객체 타입 분기 로직에 적용
최신 Java 조건문 기능을 잘 활용하면 코드가 훨씬 간결해지고, 유지보수 비용도 줄어듭니다. 계속해서 다양한 예제를 연습하며 본인의 스타일에 맞게 패턴 매칭과 표현식을 적극적으로 활용해보세요!
Java 반복문 완벽 가이드: for·while·do-while 그리고 향상된 for 활용법
프로그래밍에서 반복문은 동일한 코드 블록을 여러 번 실행하고자 할 때 꼭 필요한 구조입니다. Java에서는 전통적인 for, while, do-while 세 가지 반복문과, 컬렉션 순회 시 유용한 향상된 for(enhanced f
byteandbit.tistory.com
'JAVA' 카테고리의 다른 글
| Java 메서드 완전 정복: 정의부터 오버로딩, 가변인자까지 한 번에 마스터하기 (0) | 2025.09.30 |
|---|---|
| Java 배열(1차원/다차원)과 Arrays 유틸리티 완벽 정리: 초보자부터 실무까지 한 번에! (0) | 2025.09.29 |
| Java 반복문 완벽 가이드: for·while·do-while 그리고 향상된 for 활용법 (0) | 2025.09.26 |
| [완벽 가이드] Java 연산자 종류와 우선순위 총정리 – 산술·비트·논리·비교·삼항 연산자 (0) | 2025.09.25 |
| 자바 표준 입력·출력 완전 정복: Scanner와 System.out 활용 가이드 (0) | 2025.09.24 |