[Java] 자바 레코드(Record)란? (예제 포함)

2024. 6. 4. 12:36·Back end/Java
반응형

레코드(Record)란?

  • Java 14에서 처음 소개되었고, Java 16에서 정식 기능으로 추가되었습니다.
  • 데이터 전달 객체(Data Transfer Object, DTO)를 더욱 간편하게 만들기 위한 기능을 제공합니다.
  • 파라미터에 정의한 필드는 private final로 정의됩니다.
    • private
      → 클래스 외부에서 직접 접근 불가.
      → 게터(getter)를 자동으로 생성함.
    • final
      → 초기화된 이후 값이 변경되지 않음(불변성)
      → 상속할 수 없음.
  • 게터(getter)를 자동으로 만들기 때문에 따로 정의하지 않아도 됩니다.
    • 생성자, 게터, equals(), hashCode(), toString() 메서드를 자동으로 생성함.
    • 'get' 접두사 없이 필드명과 동일하게 자동 생성됨.
  • 예제 코드
record Person(String name, int age) {
    // 기본 생성자 외에 추가 로직을 포함할 수 있는 생성자
    public Person {
        if (age < 0) {
            throw new IllegalArgumentException("Age cannot be negative");
        }
    }

    // 추가 메서드 정의 가능
    public String greet() {
        return "Hello, my name is " + name + " and I am " + age + " years old.";
    }
}

public class Main {
    public static void main(String[] args) {
        Person person = new Person("Soohyeon", 20);

        // 필드는 private final로 정의되므로 직접 접근 불가
//         person.name = "Hyeonsoo"; // 컴파일 에러: final 필드이므로 값 변경 불가
//         System.out.println(person.name); // 컴파일 에러: private 필드에 직접 접근 불가

        // 게터 메서드를 통해 필드에 접근 (게터 메서드는 자동으로 생성됨)
        System.out.println(person.name()); // Soohyeon
        System.out.println(person.age());  // 20
        System.out.println(person.greet()); // Hello, my name is Soohyeon and I am 20 years old.
    }
}
반응형

'Back end > Java' 카테고리의 다른 글

[Java] List<Map<String, String>> 형식을 String[] 형식으로 변경하는 방법  (0) 2024.08.02
[Java] JUnit과 AssertJ를 활용한 효과적인 단위 테스트 작성 방법  (0) 2024.06.05
[Java] Scanner 클래스의 next()와 nextLine() 차이  (0) 2024.03.19
[Java] Stream.distinct() 중복 제거  (0) 2024.03.08
[Java] Stream의 filter() 메소드 (ft.collect())  (0) 2024.02.29
'Back end/Java' 카테고리의 다른 글
  • [Java] List<Map<String, String>> 형식을 String[] 형식으로 변경하는 방법
  • [Java] JUnit과 AssertJ를 활용한 효과적인 단위 테스트 작성 방법
  • [Java] Scanner 클래스의 next()와 nextLine() 차이
  • [Java] Stream.distinct() 중복 제거
Kim-SooHyeon
Kim-SooHyeon
개발일기 및 알고리즘, 블로그 운영에 대한 글을 포스팅합니다. :) 목표: 뿌리 깊은 개발자 되기
    반응형
  • Kim-SooHyeon
    soo_vely의 개발로그
    Kim-SooHyeon
  • 전체
    오늘
    어제
    • 분류 전체보기 (253)
      • 알고리즘 (108)
        • 자료구조 (3)
        • Java (104)
        • Python (1)
      • Back end (70)
        • Spring Project (27)
        • Java (21)
        • API (1)
        • Python (0)
        • Django (3)
        • Linux (1)
        • 서버 (2)
        • 에러로그 (11)
        • 부스트 코스 (1)
      • Front end (9)
        • HTML, CSS (4)
        • JavaScript (4)
        • JQuery (0)
      • 기타 프로그래밍 (4)
        • Android Studio (1)
        • Arduino (2)
        • Azure Fundamental(AZ-900) (1)
      • 개발도구 (23)
        • Git (12)
        • SVN (0)
        • Eclipse (2)
        • 기타 Tool (9)
      • Database (16)
        • Oracle (10)
        • MySQL (0)
        • H2 Database (3)
        • ORM & JPA (1)
      • 자격증 (10)
        • 컴활 1급 (7)
        • 컴활 2급 (2)
        • SQLD (1)
      • 기타 (13)
        • 블로그 운영 (6)
        • 문서 (1)
        • 기타 (6)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    BOJ
    단계별풀기
    1차원 배열
    Git
    solved.ac
    문자열
    springboot
    구현
    오라클
    github
    알고리즘
    spring
    배열
    java
    for문
    백준알고리즘
    jpa
    Oracle
    백준 자바
    백준
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Kim-SooHyeon
[Java] 자바 레코드(Record)란? (예제 포함)
상단으로

티스토리툴바