1. 함수형 인터페이스와 Predicate 먼저 함수형 인터페이스란 추상 메소드를 1개를 가지는 인터페이스를 의미하며 Predicate는 1개의 제네릭 타입 인자를 받아서 boolean 을 리턴하는 추상 메소드를 가지고 있습니다. 아래는 JDK 17 기준에서 Predicate 인터페이스입니다. 추상 메소드는 test이고 그 외에도 and, negate, or, isEqual 등 여러 개의 메소드가 구현되어 있는 것을 확인할 수 있습니다. 여러 개의 메소드가 있어서 함수형 인터페이스가 아니라고 생각할 수 있지만 추상 메소드가 1개 이기 때문에 Predicate는 함수형 인터페이스가 맞습니다. @FunctionalInterface public interface Predicate { boolean test(T..
이번 포스팅에서는 자바 17의 특징 중 텍스트 블록, Switch 문, Record, Sealed 외의 특징에 대해 알아보도록 하겠습니다. 1. instanceof instanceof 체크할 때 변수를 선언할 수 있기 때문에 좀 더 간결한 코드를 작성할 수 있습니다. @Test public void oldStyleInstanceof() { Object o = new Person("troh", 33); if(o instanceof Person) { Person p = (Person) o; Assertions.assertEquals("troh", p.getName()); Assertions.assertEquals(33, p.getAge()); } } @Test public void newStyleInstan..
sealed class, interface는 상속하거나 구현할 클래스를 지정하고, 지정한 클래스 외에는 상속 또는 구현할 수 없도록 하는 기능으로 무분별한 상속과 구현을 방지할 수 있습니다. 1. sealed 클래스(인터페이스) super-class에 sealed 키워드를 사용하고 permits 키워드 뒤에 해당 클래스(인터페이스)를 상속(구현) 받을 클래스를 선언합니다. sub-class에서는 sealed, non-sealed, final 키워드를 사용하여 sealed 클래스를 상속(구현) 합니다. 아래 예제에서 Monster를 sealed 클래스로 만들었고, permits 키워드를 통해 트롤(Troll)과 오우거(Ogre) 클래스만 몬스터를 상속할 수 있도록 제한하였습니다. // Monter를 상속할..
불변성을 가지는 데이터 클래스를 위한 타입이다. 자바 14 이전 버전에서는 불변의 데이터 클래스를 생성하기 위해서는 private final 필드, 모든 필드를 초기화하는 생성자, equals 메서드, toString 메서드 등을 만들어야 했지만 자바 17(자바 14 이후) 버전에서는 Record 타입을 이용하면 자바 컴파일러가 위와 같은 코드를 자동으로 완성해 준다. 1. Record 타입의 객체 생성 - 생성자를 재 정의하거나, 다른 인수를 제공하는 생성자를 정의할 수 있지만 유효성 검사를 위해 사용하거나, 초기화 용도로만 사용해야 한다. import java.util.Objects; public record RecordPerson(String name, String address) { public ..