코드 한 줄의 기록

Java 조건문 완벽 가이드: if vs switch, 그리고 최신 Switch 표현식 패턴 활용법 본문

JAVA

Java 조건문 완벽 가이드: if vs switch, 그리고 최신 Switch 표현식 패턴 활용법

CodeByJin 2025. 9. 27. 08:02
반응형

자바(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

반응형