Record를 DTO로 사용하는 이유가 뭔가요?

2025. 2. 3. 10:49· 백엔드 면접 질문
목차
  1. 1. Record란?
  2. 2. 기존 DTO vs Record 비교
  3. 3. Record와 스레드 안정성
  4. References

1. Record란?

 

Java 16에서 정식으로 도입된 Record는 불변(immutable) 데이터 객체를 생성하기 위한 특별한 형태의 클래스다.

주요 특징은 아래와 같은데,

 

  • 모든 필드가 private final로 선언된다.
  • 생성자, getter, equals(), hashCode(), toString()메서드가 자동 생성된다.
  • 불변성(immutability)이 보장된다.
  • java.lang.Record를 자동으로 상속한다.
  • final 클래스라 상속이 불가능하다.

 

2. 기존 DTO vs Record 비교

 

동일한 데이터 객체를 일반 클래스로 작성했을 때, Record로 작성했을 때를 비교해보자

 

일반 DTO 클래스

public class UserDTO {
    private final String name;
    private final int age;
    
    public UserDTO(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    public String getName() { return name; }
    public int getAge() { return age; }
    
    @Override
    public boolean equals(Object o) { ... }
    @Override
    public int hashCode() { ... }
    @Override
    public String toString() { ... }
}

 

Record 사용

public record UserRecord(String name, int age) { }

 

매우 간결해진다.

보일러플레이트 코드가 대폭 감소하게 되고, 코드 가독성이 증가하게 되는 것이다.

불변 객체로 데이터 일관성을 유지하게 되고, 스레드 안전성을 확보할 수 있다.

컴팩트한 설계로 메모리 사용량이 감소하게 되고, 가비지 컬렉션 부하가 감소한다.

 

3. Record와 스레드 안정성

 

Record는 불변 객체이기 때문에 스레드 안전하다. 

스레드 안전이란 여러 스레드가 동시에 같은 객체에 접근할 때도 데이터의 정합성과 일관성이 보장되는 상태를 말한다.

 

References

https://www.maeil-mail.kr/question/107

 

'백엔드 면접 질문' 카테고리의 다른 글

서버 사이드 렌더링과 클라이언트 사이드 렌더링의 차이점은 무엇인가요?  (0) 2025.01.09
TCP 3-way handshake에 대해서 설명해주세요.  (1) 2025.01.07
로그와 메트릭을 설명해주세요.  (0) 2025.01.06
HTTP 메서드에서 멱등성(Idempotent)이란 무엇인가요?  (0) 2025.01.03
웹 브라우저에 www.google.com 을 입력했을 때 어떤 과정이 이뤄지나요?  (0) 2024.12.31
  1. 1. Record란?
  2. 2. 기존 DTO vs Record 비교
  3. 3. Record와 스레드 안정성
  4. References
'백엔드 면접 질문' 카테고리의 다른 글
  • 서버 사이드 렌더링과 클라이언트 사이드 렌더링의 차이점은 무엇인가요?
  • TCP 3-way handshake에 대해서 설명해주세요.
  • 로그와 메트릭을 설명해주세요.
  • HTTP 메서드에서 멱등성(Idempotent)이란 무엇인가요?
Griotold
Griotold
Griotold
Griotold's Olive Oil
Griotold
전체
오늘
어제
  • 분류 전체보기 (94)
    • 테스트 (4)
      • Spock (1)
      • Junit (3)
    • 디자인 패턴 (1)
    • 깃 (2)
    • 리팩토링 (4)
    • 항해플러스 백엔드 5기 (3)
    • 인프런 워밍업 클럽 스터디 2기 백엔드 (4)
    • 코딩테스트 (10)
    • 자바 심화 2기 (7)
    • 백엔드 면접 질문 (19)
    • 인프라 (17)
      • docker (5)
      • CI, CD (5)
      • Monitoring (6)
      • AWS (1)
    • 데이터베이스 (1)
      • Redis (1)
    • 메시지큐 (3)
      • rabbitMQ (0)
      • kafka (3)
    • MSA (7)
    • JPA (1)
    • Spring (8)
      • Spring AI (1)
    • GraphQL (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기

공지사항

인기 글

태그

  • 오블완
  • 리팩터링
  • 항해99
  • TIL
  • 99클럽
  • backend
  • docker
  • 티스토리챌린지
  • github
  • 개발자취업
  • 배포
  • java
  • githubactions
  • micrometer
  • 자바
  • junit5
  • 읽기좋은코드
  • CICD
  • DATABASE
  • 코딩테스트준비
  • JPA
  • 백엔드
  • 이분탐색
  • prometheus
  • actuator
  • 프로그래머스
  • MSA
  • Spring
  • 백준
  • grafana

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
Griotold
Record를 DTO로 사용하는 이유가 뭔가요?
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.