'Record'는 변경할 수 없는(immutable) 데이터 개체를 쉽게 만들 수 있도록 하는 자바의 새로운 유형의 클래스입니다.

Java14 이후 버전부터 지원합니다.

 

 


 

 

Record

 

데이터 모델 POJO(Plain Old Java Object)에서 반복적인 상용구 코드를 줄이기 위해 'Record'가 도입되었습니다.

즉, 'Record'는 반복적인 개발을 단순화하고 효율성을 개선해서 오류의 위험을 최소화합니다.

 

Record는 파라미터에 접근제한자, final, 생성자 사용이 불가능합니다.

 

 

다음은 Record의 Syntax입니다.

 

record className() {

} // 클래스명

 

 

이해를 돕기 위해 간단한 코드를 작성하였습니다.

 

@Log4j2
public class Record_2 {

	
    public static void main(String[] args) {
        Person person = new Person("Leees", 23);
        log.info("name: {}, age: {}", person.name(), person.age());
        log.info("toString: {}", person.toString());

    } // main

} // end class


// @AllArgsContructor
// @NoArgsConstructor
// 파라미터에 final, 접근제한자 사용불가
record final Person(String name, int age) {;;}

 

위의 코드에서도 알 수 있듯이, 'Record'는 필드 선언과 생성자 선언을 하나로 결합한 것으로 볼 수 있습니다.

 

 

Record

 

그런데 로그를 출력할 때, 기존의 Getter가 아닌 단순 필드명으로 필드의 값을 받아오는 것을 확인할 수 있습니다.

이러한 방식을 Fluent API라고 합니다.

 

 


 

 

Fluent

 

일반적으로 필드의 값을 받아올 때, get + 필드()를 사용합니다.

그런데 Getter 메서드는 두 가지의 종류가 있습니다.

 

  1. get + 필드명()
  2. 필드명()

2번처럼 선언하는 Getter 방식을 Fluent API라고 합니다.

Lombok의 @Values 어노테이션은 다양한 기능을 제공하는데 대표적으로 Getter가 있습니다.

 

여기서 @Values가 제공하는 Getter는 일반적인 get + 필드명()으로 제공되는데, Fluent API 방식으로 변경할 수 있습니다.

 

@Log4j2
public class Record_2 {

	
    public static void main(String[] args) {
        Humun humun = new Humun("홍길동", 24);
		
    } // main

} // end class


// @Accessors 어노테이션에서 fluent는 default가 false입니다.
// 여기서 fluent를 true로 변경하면 @Value 어노테이션의 Getter를 
// Fluent API 방식으로 사용할 수 있습니다.
@Accessors(fluent = true)
@Value
class Humun {
    String name;
    int age;
    
} // end class

 

 

Lombok의 @Accessors 어노테이션을 사용하면 Fluent 방식으로 변경된다. 

 

 

@Value 어노테이션은 필드 보호를 위해 private final을 강제합니다.

 

 

 

 

 

 

 

 

'Java' 카테고리의 다른 글

객체 입출력 스트림  (0) 2023.08.18
보조 스트림  (0) 2023.08.17
파일 클래스  (0) 2023.08.17
Exception Handling  (0) 2023.07.28
Exception  (0) 2023.07.27

+ Recent posts