Skip to content

How to Use JPatternMatch

Eunbin Seo edited this page Aug 13, 2024 · 8 revisions

User Guide

How to Use JPatternMatch Effectively and Elegantly

asTypeOf

  • 자바 16의 패턴 매칭 instanceOf를 모방한 함수입니다.
  • 타입 체크 / 반환을 동시에 하는 패턴 매칭의 기능을 구현합니다.
   // Null check and excetue : Runnable
   asTypeOf(1, Integer.class, () -> System.out.println("expression lambda"));
   
   // Null Check and Return Result : Function
   Integer result = asTypeOf(input, String.class, Integer::parseInt);
  • Runnable의 경우 확인 객체, 확인 클래스 타입, 실행 함수의 순서로 구성됩니다.
  • Function의 경우 확인 객체, 확인 클래스 타입, 반환 객체 타입의 순서로 구성됩니다.

Pattern Match

  • 자바 내에서의 패턴 매칭을 구현합니다.
  • Project Amber의 자바 21 패턴 매칭과 ts-pattern의 패턴 매칭과 유사한 형태를 자바 8 내에서 구현합니다.

of(instance)

   // initialize JPatternMatch instance
   JPatternMatch.of(instance)
  • 비교할 instance를 토대로 객체를 생성합니다.
  • instance에는 null을 주입할 수 없습니다.
  • 생성된 객체는 초기화된 JPatternMatch 클래스를 반환합니다.

.match()

   // Start matching
   JPatternMatch.of(instance)
                .match()
  • 생성된 JPatternMatch 인스턴스에서 matching 시작을 선언합니다.
  • 부가 기능을 제공하는 것이 아닌, 메타 데이터 형태의 메서드입니다.

.returnObject(Class)

   // Set Return Type
   Instance instance = JPatternMatch.of(instance)
                                    .match()
                                    .returnObject(instance.class)
  • 수행 함수의 결과를 반환받고 싶은 경우, 반환 객체의 타입을 지정합니다.

.with(instance, lambda expression)

   // Set Compare Instance 
   JPatternMatch.of(instance)
                .with(testInstance, () -> System.out.println("첫 번째 매치 실행"))
  • 주입 객체와 비교 대상 객체를 비교합니다.
  • 비교 대상 객체의 기준은 메모리 주소가 아닌 equals 기준입니다.
  • returnObject의 경우 return을 통해 반환 값을 지정해야 합니다.

종료 함수

otherwise(lambda expression)

  // Define default action
  JPatternMatch.of(instance)
               .match()
               .otherwise(() -> System.out.println("기본 매치 실행"));
  • 매칭되는 객체가 없을 시 해당 함수를 수행합니다.
  • Runnable의 경우 함수 수행 후 객체가 만료됩니다.
  • Function의 경우 함수 수행 후 객체를 반환받습니다.
  • 함수 수행 시 객체를 변경하는 것은 가능하나, 기본 타입(Primitive Type) 변경은 불가능합니다.

익명 함수의 접근 scope가 그 이유입니다.

exhaustive()

  // Define exhaustive match
  JPatternMatch.of(instance)
               .match()
               .exhaustive(); // PatternMatchException!
  • 매칭되는 객체가 있을 경우 해당 매칭 함수를 수행하거나 결과를 반환합니다.
  • 매칭되는 객체가 없을 시 PatternMatchException을 발생시킵니다.