728x90
반응형
Record 란?
- 불변한 데이터를 표현하기 위한 간결하게 객체를 생성할 수 있도록 하는 유형의 클래스
- JDK14에서 preview로 등장해 JDK16에서 정식 스펙으로 포함
public record Point(int x, int y) {
}
주요 특징
- 불변성(Immutable)
- 레코드는 한 번 생성되면 수정할 수 없다. (데이터의 무결성 유지)
- 레코드는 한 번 생성되면 수정할 수 없다. (데이터의 무결성 유지)
- 필드 암시적 정의
- 레코드는 명시적인 필드 정의 없이도 컴파일러가 자동으로 필드를 생성한다.
- 위 예제에서는 'x' 와 'y' 필드가 생성된다.
- 'equals()', 'hashCode()', 'toString()' 자동 생성
- 레코드는 기본적으로 위와 같은 메서드를 자동으로 생성한다.
- 레코드는 기본적으로 위와 같은 메서드를 자동으로 생성한다.
- 복사 생성자(Copy Constructor) 자동 생성
- 레코드는 'with' 키워드를 사용해 새로운 래코드를 생성하는 메서드를 제공한다.
- 이는 레코드의 불변성을 유지하면서 상태를 업데이트하는 방법이다.
- 디스트럭처링(Destructuring)
- 레코드는 튜플처럼 사용될 수 있어, 여러 변수에 동시에 할당할 수 있다.
Point point = new Point(3, 4);
int x = point.x();
int y = point.y();
- 'final' 특성
- record 클래스는 final 클래스(상속불가)
- 필드는 암묵적으로 'final' 특성을 가지기 때문에 값을 변경할 수 없다.
Point p1 = new Point(1, 2);
Point p2 = p1.withX(10); // x값을 변경한 새로운 레코드 생성
이런 주요 특징을 가지는 레코드(Record)는 데이터 클래스로서 불변의 데이터를 표현하고자 할 때 유용하며, 프로젝트의 코드를 간결하고 가독성 있게 만들 수 있다.
of()
record에서 of() 메서드는 해당 레코드의 인스턴스를 생성하는 정적 팩토리 메서드를 말한다.
주로 레코드의 필드를 초기화하면서 새로운 레코드 인스턴스를 생성할 때 사용한다.
public record User(
String userId,
String name,
int age
) {
// 레코드의 정적 팩토리 메서드
public static User of(String userId, String name, int age) {
// of() 메서드를 사용해 레코드의 인스턴스 객체 생성
return new User(userId, name, age);
}
// ...
}
이제 'User' 레코드를 사용하는 코드에서는 'of()' 메서드를 통해 인스턴스를 생성할 수 있다.
User user = User.of("1", "Moon", 20);
728x90
반응형
'Programming > Java' 카테고리의 다른 글
[Java] String to Date - ParseException 해결 방법 (0) | 2023.06.14 |
---|---|
[Java] static 개념 및 사용법 (1) | 2023.05.08 |
[Java] 스트림(Stream) 사용 시 주의사항 (재사용, 지역변수 접근, 무한 스트림) (0) | 2023.03.13 |
[Java] 약수의 개수 구하는 최적의 방법(알고리즘) (0) | 2022.11.20 |
[Java] Map이란? (개념, 활용, 예제 등) (0) | 2022.10.02 |