-
Notifications
You must be signed in to change notification settings - Fork 0
How to Use JPatternMatch
Eunbin Seo edited this page Aug 13, 2024
·
8 revisions
How to Use JPatternMatch Effectively and Elegantly
- 자바 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의 경우 확인 객체, 확인 클래스 타입, 반환 객체 타입의 순서로 구성됩니다.
- 자바 내에서의 패턴 매칭을 구현합니다.
-
Project Amber의 자바 21 패턴 매칭과ts-pattern의 패턴 매칭과 유사한 형태를 자바 8 내에서 구현합니다.
// initialize JPatternMatch instance
JPatternMatch.of(instance)- 비교할 instance를 토대로 객체를 생성합니다.
- instance에는
null을 주입할 수 없습니다. - 생성된 객체는 초기화된
JPatternMatch클래스를 반환합니다.
// Start matching
JPatternMatch.of(instance)
.match()- 생성된 JPatternMatch 인스턴스에서 matching 시작을 선언합니다.
- 부가 기능을 제공하는 것이 아닌, 메타 데이터 형태의 메서드입니다.
// Set Return Type
Instance instance = JPatternMatch.of(instance)
.match()
.returnObject(instance.class)- 수행 함수의 결과를 반환받고 싶은 경우, 반환 객체의 타입을 지정합니다.
// Set Compare Instance
JPatternMatch.of(instance)
.with(testInstance, () -> System.out.println("첫 번째 매치 실행"))- 주입 객체와 비교 대상 객체를 비교합니다.
- 비교 대상 객체의 기준은 메모리 주소가 아닌
equals기준입니다. - returnObject의 경우 return을 통해 반환 값을 지정해야 합니다.
// Define default action
JPatternMatch.of(instance)
.match()
.otherwise(() -> System.out.println("기본 매치 실행"));- 매칭되는 객체가 없을 시 해당 함수를 수행합니다.
-
Runnable의 경우 함수 수행 후 객체가 만료됩니다. -
Function의 경우 함수 수행 후 객체를 반환받습니다. - 함수 수행 시
객체를 변경하는 것은 가능하나,기본 타입(Primitive Type)변경은 불가능합니다.
익명 함수의 접근 scope가 그 이유입니다.
// Define exhaustive match
JPatternMatch.of(instance)
.match()
.exhaustive(); // PatternMatchException!- 매칭되는 객체가 있을 경우 해당 매칭 함수를 수행하거나 결과를 반환합니다.
- 매칭되는 객체가 없을 시
PatternMatchException을 발생시킵니다.