레코드

수호천사임다·2024년 10월 1일

자바

목록 보기
3/15

레코드란?

  • 불변 데이터 객체를 쉽게 생성할 수 있도록 하는 새로운 유형의 클래스
  • JDK14 도입

레코드의 주요 특징

불변성 : 레코드에 정의된 필드는 기본적으로 final로 처리되며, 생성 이후 값을 변경할 수 없다. 이로 인해 불변 객체가 자동으로 만들어진다.

자동 생성 메서드: 레코드를 선언하면 컴파일러가 자동으로 다음을 생성합니다.

생성자(Constructor): 모든 필드를 초기화하는 생성자가 자동으로 생성된다.

getter 메서드: 필드마다 필드명() 형식의 접근자 메서드가 자동으로 생성된다.

equals()와 hashCode(): 객체의 동등성을 비교하고 해시코드를 반환하는 메서드가 자동으로 생성된다.

toString(): 레코드의 필드 값을 간결한 문자열 형태로 반환하는 메서드가 자동으로 생성된다.

레코드의 장점

불변 객체 생성의 간편함: 불변 객체를 쉽게 만들 수 있으며, 동등성 검증과 데이터 출력 메서드도 자동으로 제공된다.

간결함: 필드 선언만으로 생성자와 메서드를 자동 생성하므로 코드가 매우 간결해진다.
의도 명확성: 레코드는 주로 데이터 캡슐화와 전달을 위해 사용되므로, 데이터 중심의 객체라는 의도가 명확하다.

주의점
상속 불가: 레코드는 상속을 지원하지 않으며, 다른 클래스를 상속할 수도 없다. 하지만 인터페이스는 구현할 수 있다.
불변성: 필드 값이 불변이므로 값을 변경해야 하는 경우 새로운 레코드 객체를 생성해야 한다

public class Ex02 {

	public static void main(String[] args) {
		Point p = new Point(10, 5);
		System.out.println(p.x() + ", " + p.y());
	}
}

record Point(int x, int y) {}

/*
 - 컴파일러는 헤더를 통해 내부 필드를 추론. 아래의 필드가 만들어짐
 	private final int x;
 	private final int y;
 	
 - 모든 필드를 초기화하는 생성자가 만들어짐.
 	public Point(int x, int y) {
 		this.x = x;
 		this.y = y;
 	}
 
 - toString(), equals(), hahsCode() 메소드에 대한 구현을 자동으로 
 - 각 필드의 getter은 getXxx()가 아닌 필드명을 딴 getter이 됨
  private final String name;
  => public String name() {
  		return this.name;
  }
 */

0개의 댓글