record 클래스 (Java 14)

2024. 12. 13. 23:51·Language/Java
반응형

record란?

Java 14에서부터 도입된 새로운 클래스 유형으로, 주로 불변 데이터 객체를 만들 때 사용된다.

기존의 클래스를 간소화하여 데이터를 보다 쉽게 표현할 수 있도록 해주는 특별한 형태이다.

주로 값 객체(value object)로 사용되며, 데이터 중심의 객체를 선언할 때 코드의 양을 줄이고,

기본적인 메서드들(`equals()`, `hashCode()`, `toString()`)을 자동으로 제공하여 개발자가 작성해야 할 코드의 양을 줄여준다.

 

 

 

 

 

record 사용

record 선언

`record`는 클래스를 정의하는 것처럼 사용하는데, 이 때 `record`를 사용하여 선언한다.

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

위 코드에서 `Person`은 `name`과 `age` 두개의 필드를 가지는 record 클래스이다.

참고로, `name`과 `age`는 `final`로 자동 선언되어 불변 속성을 가진다.

`record`는 `final` 클래스이므로 상속이 불가하다.

 

따라서, `Person` 객체는 한번 생성되면 그 필드 값을 변경할수 없다.

만약 Person 객체의 필드를 변경하려고 시도하면 컴파일 오류가 난다.

 

 

자동 제공 메서드

record 클래스는 자동으로 아래와 같은 메서드들을 제공한다.

  • `equals()` : 두 객체 값이 동일한지 비교
  • `hashCode()` : 객체의 해시코드 계산
  • `toString()` : 객체의 문자열 표현 생성
  • getter 메서드 : 필드에 접근하기 위한 메서드. `객체명.필드명`으로 구현되어 있다. 

 

커스텀 생성자

기본적으로 record는 모든 필드를 받는 생성자를 자동으로 정의한다.

만약 일부만 받고싶거나 생성자를 커스텀 하고 싶다면 class 생성자를 커스텀하듯 하면 된다.

public record Person(String name, int age) {
    public Person(String name) {
        this(name, 0);  // age는 기본값 0으로 설정
    }
}

 

 

 

사용 예시

public class RecordExample {
    public static void main(String[] args) {
        // Record 객체 생성
        Person person = new Person("Alice", 30);

        // 자동 생성된 메서드 사용
        System.out.println(person);  // toString() 호출
        System.out.println(person.name());  // getter로 직접 접근
        System.out.println(person.age());

        // 커스텀 메서드 호출
        System.out.println(person.greet());

        // equals() 사용
        Person anotherPerson = new Person("Alice", 30);
        System.out.println(person.equals(anotherPerson));  // true
    }
}

 

<출력>

Person[name=Alice, age=30]
Alice
30
Hello, my name is Alice and I am 30 years old.
true

 

 

 

 

728x90
반응형

'Language > Java' 카테고리의 다른 글

equals와 hashCode 오버라이딩  (0) 2025.03.11
[JSP] JSP(JavaServer Pages)의 정의와 기본 구성 요소  (1) 2025.01.02
직렬화(Serialization)  (0) 2024.12.12
동기화(synchronization)와 락(Lock)  (1) 2024.12.11
Java의 스레드(Thread)  (0) 2024.12.10
'Language/Java' 카테고리의 다른 글
  • equals와 hashCode 오버라이딩
  • [JSP] JSP(JavaServer Pages)의 정의와 기본 구성 요소
  • 직렬화(Serialization)
  • 동기화(synchronization)와 락(Lock)
settong
settong
    250x250
  • settong
    개 발 자 국
    settong
  • 전체
    오늘
    어제
    • 전체보기 (202)
      • Computer Science (50)
        • Network (7)
        • Operating System (18)
        • Data Structure (9)
        • Database (11)
        • Algorithm (5)
      • Language (17)
        • Java (17)
        • Javascript (0)
        • Python (0)
      • Devops (20)
        • AWS (0)
        • Naver Cloud (16)
        • CICD (3)
        • 웹 서버 관리 (1)
      • Front (0)
        • React (0)
      • Backend (5)
        • Spring (5)
      • 코딩 테스트 정복기 (110)
        • 백준 (51)
        • 프로그래머스 (53)
        • 기타 (6)
      • etc (0)
      • 경제 상식 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    github actions
    해시
    BFS
    Spring Boot
    백준
    ncp
    완전탐색
    Network
    DFS
    다이나믹프로그래밍
    벨만포드
    백트래킹
    CI/CD
    lcs
    집합
    분할정복
    프로그래머스
    다익스트라
    ncp202
    ncp200
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
settong
record 클래스 (Java 14)
상단으로

티스토리툴바