출처: https://www.youtube.com/watch?v=MiHxFpTgAog&list=PLgXGHBqgT2TvpJ_p9L_yZKPifgdBOzdVH&index=123
Record란?
- 불변 객체
- 데이터베이스 결과 등을 단순히 담기 위한 객체에 주로 사용
- 내부 필드값의 불변성을 보장하여 유지보수에 용이
- 단점: 과정이 복잡함
- private final 로 변수 선언
- 객체를 위한 생성자 추가
- 동등성 비교를 위한 equals(), hashCode() 정의
- Getter() 정의
- 디버깅을 위한 toString() 정의
=> Boilerplate Code(자주 반복되는 코드)가 많다
=> 필드 변경 시 위의 코드들을 수정해야 함
=> Record를 사용하여 코드 단순화
어떻게 사용할까?
- 선언과 동시에 변수를 함께 선언
- static 정적 필드는 추가 가능
public record Person(String name, String address) {
private static final String value = "something";
}
- 일반 객체처럼 new 사용
- 필드값 접근 시 앞에 get이 붙지 않음
Person person = new Person("이름", "주소");
String name = person.name();
String address = person.address();
- 필요한 메서드만 재정의
public record Person(String name, String address) {
@Override
public String toString() {
return "사람입니다.";
}
}
- 생성자
public record Person(String name, String address) {
public Person {
// 파라미터 생략 가능
// 초기화 로직은 마지막에 자동으로 호출 : this.name = name 등
validate(name, address);
}
}
Q & A
- 왜 레코드는 getXXX가 아닐까?
- 레코드는 일반 클래스의 문제를 해결하는 것은 목표가 아님 -> 일반 클래스의 컨벤션을 따라갈 필요는 없음
- Lombok을 사용하면 안돼?
- @Date + @AllArgsConstructor 와 유사함
- 레코드가 더 간결
- 롬복은 플러그인, 라이브러리 설치 필요 / 유연성 향상
- 레코드는 JDK 16이상이면 별도 설치가 필요 없음
- Record를 도메인 객체에 사용할 수 있을까?
- 지양
- 레코드는 불변 데이터를 전달하기 위한 캐리어
- 확장 가능한 동작보다 불변 데이터 모델링에 집중
'프로그래밍 언어 > Java' 카테고리의 다른 글
[테코톡] 가비지 컬렉션 (0) | 2025.04.06 |
---|---|
열거 타입(Enum) (0) | 2023.10.20 |
정규표현식 (0) | 2023.10.17 |
포함관계와 추상화 구현 순서 (0) | 2023.10.16 |
추상 클래스와 인터페이스 비교 (0) | 2023.10.16 |