전체 목록
JavaMedium#442

Java record는 어떤 문제를 해결하며 일반 class와 어떤 차이가 있나요?

#Java#record#불변객체#DTO

답변 포인트

불변 데이터 carrier를 만들 때 반복되는 boilerplate를 줄이는 문법입니다.

정답 및 해설

빠른 요약

Java record는 데이터를 담는 불변 carrier 클래스를 간결하게 만들기 위한 문법입니다. DTO, 값 객체, API 응답 모델처럼 필드와 접근자, equals/hashCode/toString이 반복되는 클래스에서 boilerplate를 크게 줄여줍니다.

Java record는 데이터를 담는 불변 carrier 클래스를 간결하게 만들기 위한 문법입니다. DTO, 값 객체, API 응답 모델처럼 필드와 접근자, equals/hashCode/toString이 반복되는 클래스에서 boilerplate를 크게 줄여줍니다.

Java
public record UserSummary(Long id, String name, String email) {}

위 선언만으로 private final 필드, 생성자, accessor, equals, hashCode, toString이 자동 생성됩니다. accessor 이름은 getName()이 아니라 name()입니다.

record는 기본적으로 불변에 가깝습니다. 필드는 final이고 setter가 없습니다. 다만 필드가 List 같은 mutable 객체라면 내부 객체 자체는 변경될 수 있으므로, 필요한 경우 방어적 복사를 해야 합니다.

Java
public record Team(List<String> members) {
  public Team {
    members = List.copyOf(members);
  }
}

일반 class처럼 메서드를 추가하거나 인터페이스를 구현할 수 있지만, 다른 클래스를 상속할 수는 없습니다. record는 “행동이 풍부한 도메인 객체”보다는 “값을 명확히 전달하는 타입”에 적합합니다.

관련 질문

같은 카테고리/태그 기준