BackEnd/Java

Java 21. Record Pattern

hanseom 2024. 12. 11. 23:00
반응형

Record Pattern

  Java 19 preview, Java 21 정식으로 출시된 Record Pattern은 Record 클래스를 instanceof pattern matching과 함께 사용할 때 내부 필드에 바로 접근할 수 있는 기능입니다.

 

  다음은 Record 클래스와 instanceof pattern matching을 함께 사용한 코드입니다.

  record Point(double x, double y) {
  }
  
  public static void findDistanceIfPoint(Object object) {
    if (object instanceof Point p) {
      double distance = Math.hypot(p.x(), p.y());
      System.out.printf("원점으로부터의 거리는 %.3f입니다.\n", distance);
    }
  }

 

  Record Pattern을 적용하면 instanceof pattern matching 시 Record 클래스를 구조분해하여 내부 필드에 바로 접근할 수 있습니다.

  record Point(double x, double y) {
  }
  
  public static void findDistanceIfPoint(Object object) {
    if (object instanceof Point(double x, double y)) { // (var x, var y) 대체 가능
      double distance = Math.hypot(x, y);
      System.out.printf("원점으로부터의 거리는 %.3f입니다.\n", distance);
    }
  }

 

  Record Pattern은 중첩된 Record 클래스에서도 사용할 수 있습니다.

  record Point(double x, double y) {
  }
  
  record Line(Point p1, Point p2) {
  }
  
  public static void findDistanceIfPoint(Object object) {
    if (object instanceof Point(double x, double y)) { // (var x, var y) 대체 가능
      double distance = Math.hypot(x, y);
      System.out.printf("원점으로부터의 거리는 %.3f입니다.\n", distance);
    }
    
    if (object instanceof Line(Point(var x1, var y1), Point(var x2, var y2))) {
      double distance = Math.hypot(x2 - x1, y2 - y1);
      System.out.printf("두 점 사이의 거리는 %.3f입니다.\n", distance);
    }
  }
반응형