HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🤩
개발
/
Java
Java
/
💯
Java 기본
/기본개념/
🛡️
Record
🛡️

Record

사용 예시생성자 CustomizationRecord에 필요한 파라미터 그대로 받는 생성자다른 파라미터를 받는 생성자컴파일 에러Serialize 에러
[참고] https://www.baeldung.com/java-record-keyword
  • 불변 객체(immutable)를 쉽게 생성할 수 있도록 하는 새로운 유형의 클래스
  • JDK 16에서 정식 스펙으로 포함됨

사용 예시

public record Person(String name, int age){ }
  • 레코드 클래스를 사용하면 불변 객체를 쉽게 생성할 수 있음
  • 모든 필드에 final 이 적용 되는 것
  • 생성자 작성하지 않아도 되고 toString, equals, hashCode 메소드에 대한 구현을 자동으로 제공함
  • 기본적인 동작은 재정의할 수 있음
  • 레코드는 암묵적으로 final 클래스임. abstract 선언 불가
  • 다른 클래스 상속 받을 수 없고 인터페이스 구현은 가능함

생성자 Customization

  • validation을 위해 사용함

Record에 필요한 파라미터 그대로 받는 생성자

public record Person(String name, String address) { public Person { Objects.requireNonNull(name); Objects.requireNonNull(address); } }

다른 파라미터를 받는 생성자

public record Person(String name, String address) { public Person(String name) { this(name, "Unknown"); // 이런 식으로 this를 불러주어야 함 } }

컴파일 에러

public record Person(String name, String address) { public Person { Objects.requireNonNull(name); Objects.requireNonNull(address); } public Person(String name, String address) { this.name = name; this.address = address; } }
  • 위의 2개 생성자는 메서드 시그니쳐가 겹치게 되므로 컴파일 에러가 발생함
 

Serialize 에러

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class com.example.gccoffee.domain.OrderItem and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: com.example.gccoffee.domain.Order["orderItems"]->java.util.ArrayList[0]) at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:77) ~[jackson-databind-2.11.0.jar:2.11.0]
  • Jackson이 object를 serialize할 때, getter가 필요한데, record로 선언할 시 getter가 없음. 따로 명시해주어야 하는데, 이럴거면 그냥 class로 선언하고 @Getter 붙여주는 편이 훨씬 편할듯함