프로그래밍 노트
  • Java 패턴 매칭(Pattern Matching)
    2025년 03월 25일 15시 40분 23초에 업로드 된 글입니다.
    작성자: Jeyeon

    1. Java의 Pattern Matching이란?

    Pattern Matching은 Java에서 보다 간결하고 읽기 쉬운 코드를 작성하기 위해 도입된 기능이다.

    이는 조건 검사를 더 효율적으로 수행하고, 복잡한 객체의 타입을 식별하여 각 상황에 맞는 동작을 실행할 수 있도록 돕는다.

    주요 예제로는 switch 문과 instanceof 연산자를 활용한 Pattern Matching이 있다. 이 기능은 조건문에서 불필요한 반복 코드를 제거하고 코드의 가독성을 높인다.

    2. Pattern Matching의 특징

    기존의 Java 코드에서는 타입 확인 후 명시적으로 타입 변환(casting)을 수행해야 했다. Pattern Matching은 이러한 과정을 자동화하여 코드량을 줄이고, 가독성을 높여 준다. 그리고 Pattern Matching을 활용하면 타입 변환에서 발생할 수 있는 오류를 미리 방지할 수 있다. 이는 컴파일 타임에서 오류를 확인할 수 있게 해 준다. 또한, 조건문 안에서 더 복잡하고 다양한 로직을 쉽게 처리할 수 있도록 설계되었다. 이를 통해 개발자는 보다 직관적이고 간결한 코드를 작성할 수 있다.

    3. 사용 예제

    Pattern Matching을 활용한 switch문은 기존의 switch문과 유사하지만, 조건에 따른 타입 변환을 더 간결하게 처리할 수 있게 해준다.

    public class PatternMatchingSwitchExample {
        public static void main(String[] args) {
            Object obj = "Hello, world!";
            
            String result = switch (obj) {
                case Integer i -> "정수입니다: " + i;
                case String s -> "문자열입니다: " + s.toUpperCase();
                case Double d -> "실수입니다: " + d;
                default -> "알 수 없는 타입입니다.";
            };
            
            System.out.println(result); // 문자열입니다: HELLO, WORLD!
        }
    }
    
    

    위 예제는 obj 타입의 변수가 어떤 타입인지 검사함과 동시에 자동으로 타입 매칭을 진행하여 case 스코프 내에서 사용할 수 있도록 제공하고 있다.

    Pattern Matching을 활용한 instanceof문은 기존의 if문과 결합하여 사용할 수 있다.

    public class PatternMatchingInstanceofExample {
        public static void main(String[] args) {
            Object obj = "Java Pattern Matching";
            
            if (obj instanceof String s) {
                System.out.println("문자열 길이: " + s.length());
            } else if (obj instanceof Integer i) {
                System.out.println("정수 값: " + i);
            } else {
                System.out.println("알 수 없는 타입입니다.");
            }
        }
    }
    

    위와 같이 instanceof로 obj가 String 타입인 경우 s라는 String 변수를 선언하여 if문 스코프 내에서 사용할 수 있게 제공해 준다.

    public static void main(String[] args) {
        Object obj = "Java Pattern Matching";
        
        if (!(obj instanceof String s)) return;
        System.out.println(s);
    }
    

    위와 같이 조건을 반전하여 사용하는 것도 가능하다

    public record Person(String name, int age) {}
    
    public class PatternMatchingWithRecordExample {
        public static void main(String[] args) {
            Object obj = new Person("Alice", 30);
            
            // Pattern Matching을 활용하여 record 타입의 객체 필드에 접근
            if (obj instanceof Person(String name, int age)) {
                System.out.println(name + " is " + age + " years old.");
            } else {
                System.out.println("Unknown object type");
            }
        }
    }
    

    위는 record 타입을 검사하는 과정이다. Person이라는 객체임이 확인되면 그 내부의 name, age 필드의 값을 가져와 변수를 선언하여 즉시 접근이 가능하도록 할 수 있다.

    정리

    ✅ Pattern Matching은 조건문을 간결하고 안전하게 만들어주는 기능

    ✅ switch와 instanceof를 간소화하여 코드 가독성 향상

    ✅ 객체 타입에 맞는 자동 캐스팅을 제공하여 타입 변환 오류 방지

    ✅ record와 결합 시, 객체 필드를 쉽게 매칭하고 코드 유지보수성 향상

    ✅ 컴파일 타임에서 오류를 발견할 수 있어 코드 안정성 향상

    댓글