📌 면접 답변
record
- 불변성 (Immutable)을 기본으로 한다.
- 기본 클래스와 달리 모든 필드가 final 키워드로 선언
- 필드 선언으로 자동으로 생성자, getter, equals(), hashCode(), toString() 등의 메서드 자동으로 생성
- 객체 생성 후 변경 불가능
- 단순히 데이터 캡슐화 목적으로 사용
기존 코드
// 기존 클래스 기반 DTO
public class MemberDto {
private final String name;
private final String email;
private final int age;
public MemberDto(String name, String email, int age) {
this.name = name;
this.email = email;
this.age = age;
}
public String getName() {
return name;
}
public String getEamil() {
return email;
}
public int getAge() {
return age;
}
}
- 생성자 및 여러 메서드 선언
record 코드
// Record. 생성자, getter, hashCode(), equals(), toString() 자동 완성
public record MemberDto(String name, String email, int age) {}
- 간단하게 필드, 생성자, 메서드 선언
record로 생성한 모든 객체는 DTO인가 ?
- 모든 reord 객체가 DTO인 것은 아니다.
- DTO가 변경 가능해야 하는 경우 record 사용 X
- DTO가 상속이 필요한 경우 record 사용 X
- record는 단순히 데이터를 캡슐화하는 역할
- 때문에 DTO 외에도 VO 등의 다양한 용도로 쓰임
record와 VO 비교
공통점
- 객체의 상태가 변경되지 않는 것을 보장
- 데이터를 캡슐화하여 표현하는 데 초점
- 값 기반의 동등성을 가짐
- 동등성이란 서로 다른 두 객체의 값이 같은 것
- 객체의 메모리 주소가 아니라 내부 값이 같은지를 비교
차이점
- VO
- 도메인 모델내에서 특정 개념을 표현
- 도메인 로직과 밀접하게 관련
- record
- 단순히 데이터를 캡슐화하여 전달하는데 의미
→ record가 VO 구현에 적합하지만, VO의 모든 특성을 대체하지는 않는다.
record의 한계
- record는 extends를 사용하여 다른 클래스 상속 불가능
- 필드가 final로 선언되어 확장이 어려움
- 주로 데이터 전달하려는 목적으로 설계
- 때문에 비즈니스 로직 포함지 않는다.
📌 내 답변
record 키워드는 자동으로 Getter, 생성자 등을 생성해준다.
그 중 필드 값을 final로 불변하게 선언하기 때문에 데이터 전송에도 변형없이 안전하게 보낼 수 있다.
때문에 DTO로도 사용 될 수 있다.
답변 보충
- 모든 필드를 포함하는 생성자, Getter 뿐만 아니라, equals(), hahsCode(), toString() 도 자동 생성
- DTO는 데이터를 전송하기 위한 객체로, 반드시 불변일 필요는 없음
매일메일 - 기술 면접 질문 구독 서비스
기술 면접 질문을 매일매일 메일로 보내드릴게요!
www.maeil-mail.kr
매일 메일의 면접 질문 정리
'😀 Jerry > 면접 질문' 카테고리의 다른 글
[1분 면접] DB Replication이란 ? (0) | 2025.03.10 |
---|---|
[1분 면접] HTTPS란 무엇인가 ? (0) | 2025.03.06 |
[1분 면접] WAS와 웹 서버의 차이점 (0) | 2025.03.05 |
[1분 면접] SSR과 CSR 차이점 (0) | 2025.03.04 |
[1분 면접] (Connection, Socket, Read) Timeout 차이점 (0) | 2025.02.28 |