Java 14부터 도입된 Record에 대해 알아보겠습니다.
Record란?
레코드(Record)는 데이터를 저장하고 전달하는 간단한 방법을 제공하는 새로운 형태의 클래스입니다.
레코드는 불변(immutable)하고 값(value) 기반의 객체를 표현하는 데에 주로 사용됩니다.
Record 특징
- 간결한 문법
레코드는 클래스 선언을 간결하게 만듭니다. 불필요한 반복 코드를 줄여주고, 코드의 가독성을 향상해 줍니다. - 자동 생성자, getter 및 equals(), hashCode(), toString() 메서드
레코드는 멤버 변수를 자동으로 생성하고, 생성자, getter 및 equals(), hashCode(), toString() 메서드를 자동으로 구현해 줍니다. - 불변성(immutable)
레코드는 불변하며, 한 번 생성되면 내부 상태가 변경되지 않습니다. 이는 데이터의 안정성과 예측 가능성을 높여줍니다. - 값(value) 기반
레코드는 객체보다는 값(value)을 표현하는 데에 더 적합합니다.
Record 단점
- 유연성 제한
레코드는 불변하므로 내부 상태를 변경할 수 없습니다. 따라서 가변적인 동작이 필요한 경우에는 다른 방식으로 처리해야 합니다. - 상속과의 제약
레코드는 기본적으로 final이기 때문에 다른 클래스로부터 상속받을 수 없습니다. 이는 일부 상황에서 유연성을 제한할 수 있습니다.
이러한 단점을 고려하여 레코드를 사용할 때는 해당 상황에 맞는 적절한 설계를 고려해야 합니다.
Record 사용 예시
예를 들어 학생을 나타내는 레코드를 만들어보겠습니다.
public record Student(
String name,
int age,
String major) {
// 이곳에 추가적인 메서드나 변수를 정의할 수 있습니다.
}
위의 코드는 Student는 레코드를 정의하는 키워드입니다.
이 레코드는 name(학생의 이름), age(학생의 나이), major(학생의 전공)을 저장하는 간단한 데이터 구조입니다.
여기서 사용된 `name`, `age`, `major`는 레코드 멤버 변수입니다.
위에서의 특징처럼 레코드를 사용하면 생성자, getter, equals(), hashCode(), toString() 등의 메서드를 자동으로 생성해 줍니다.
따라서 다음과 같이 간단하게 레코드를 생성할 수 있습니다.

실행결과는!_!

이처럼 데이터를 단순하게 표현하고 처리하는 데에 유용합니다.
Record 커스터마이징
추가 메서드 및 변수 정의
레코드 선언 블록 내에 추가적인 메서드나 변수를 정의하여 레코드를 확장할 수 있습니다.
이를 통해 기본적으로 생성되는 메서드 외에도 필요한 사용자 정의 메서드를 추가할 수 있습니다.
public record Student(
String name,
int age,
String major) {
// 사용자 정의 메서드 추가
public void printInfo() {
System.out.println("Name: " + name + ", Age: " + age + ", Major: " + major);
}
}
생성자 정의
레코드에 생성자를 직접 정의하여 더 많은 유연성을 부여할 수 있습니다.
이를 통해 생성자에 기본값을 설정하거나 특정한 로직을 추가할 수 있습니다.
public record Student(
String name,
int age,
String major) {
// 생성자 정의
public Student(String name, int age) {
this(name, age, "Undeclared");
}
}
이처럼 레코드를 커스터마이징하여 요구에 맞게 유연하게 활용할 수 있습니다.
'Backend > Java' 카테고리의 다른 글
| [Java] computeIfAbsent 효율적인 데이터 캐싱과 값 처리 (0) | 2024.07.27 |
|---|---|
| [Java] abstract class 와 interface class의 차이 (0) | 2024.07.17 |
| [Java] of와 from 메서드의 차이 (0) | 2024.07.04 |
| [Java] Equals와 == 의 차이 (0) | 2024.05.25 |
| [Java] Primitive Type, Reference Type의 개념과 차이점 (0) | 2024.01.13 |