프로그래밍 언어/Java

[테코톡] Record

진진리 2025. 4. 7. 15:20

출처: https://www.youtube.com/watch?v=MiHxFpTgAog&list=PLgXGHBqgT2TvpJ_p9L_yZKPifgdBOzdVH&index=123

 

 

Record란?

  • 불변 객체
    • 데이터베이스 결과 등을 단순히 담기 위한 객체에 주로 사용
    • 내부 필드값의 불변성을 보장하여 유지보수에 용이
    • 단점: 과정이 복잡함
      • private final 로 변수 선언
      • 객체를 위한 생성자 추가
      • 동등성 비교를 위한 equals(), hashCode() 정의
      • Getter() 정의
      • 디버깅을 위한 toString() 정의

=> Boilerplate Code(자주 반복되는 코드)가 많다

=> 필드 변경 시 위의 코드들을 수정해야 함

=> Record를 사용하여 코드 단순화

 

 

어떻게 사용할까?

  • 선언과 동시에 변수를 함께 선언
  • static 정적 필드는 추가 가능
public record Person(String name, String address) {
	private static final String value = "something";
}
  • 일반 객체처럼 new 사용
  • 필드값 접근 시 앞에 get이 붙지 않음
Person person = new Person("이름", "주소");
String name = person.name();
String address = person.address();
  • 필요한 메서드만 재정의
public record Person(String name, String address) {
	
    @Override
    public String toString() {
    	return "사람입니다.";
    }
}
  • 생성자
public record Person(String name, String address) {
	
    public Person {
    	// 파라미터 생략 가능
        // 초기화 로직은 마지막에 자동으로 호출 : this.name = name 등
    	validate(name, address);
    }
}

 

 

Q & A

  • 왜 레코드는 getXXX가 아닐까?
    • 레코드는 일반 클래스의 문제를 해결하는 것은 목표가 아님 -> 일반 클래스의 컨벤션을 따라갈 필요는 없음
  • Lombok을 사용하면 안돼?
    • @Date + @AllArgsConstructor 와 유사함
    • 레코드가 더 간결
    • 롬복은 플러그인, 라이브러리 설치 필요 / 유연성 향상
    • 레코드는 JDK 16이상이면 별도 설치가 필요 없음
  • Record를 도메인 객체에 사용할 수 있을까?
    • 지양
    • 레코드는 불변 데이터를 전달하기 위한 캐리어
    • 확장 가능한 동작보다 불변 데이터 모델링에 집중

'프로그래밍 언어 > Java' 카테고리의 다른 글

[테코톡] 가비지 컬렉션  (0) 2025.04.06
열거 타입(Enum)  (0) 2023.10.20
정규표현식  (0) 2023.10.17
포함관계와 추상화 구현 순서  (0) 2023.10.16
추상 클래스와 인터페이스 비교  (0) 2023.10.16