데브허브 | DEVHUB | [10분 테코톡] 대니의 Record 그렇게 쓰는거 아닌데[10분 테코톡] 대니의 Record 그렇게 쓰는거 아닌데
- Record는 Java 14에 도입되어 16에 정식 적용된 클래스로, 간결한 표현과 불변성을 목적으로 합니다. 🚀
- 기존 불변 클래스의 반복적인 보일러플레이트 코드(생성자, getter, equals, hashCode, toString 등) 작성을 자동화하여 개발자의 실수를 줄여줍니다. 🛠️
- Record는
Record 인터페이스를 상속받는 final 클래스이며, 헤더에 선언된 필드를 private final로 자동 생성하고, 해당 필드에 대한 접근자(getter), equals, hashCode, toString 메서드를 자동으로 구현합니다. 🤖
- Record 필드에는 원시값이나 불변 객체(예: String, Wrapper 클래스)를 사용하는 것이 권장되며, List와 같은 가변 객체는 불변성 목적에 부합하지 않아 주의해야 합니다. 🔒
- 접근자 메서드 이름은
getFieldName() 대신 fieldName() 형태로 제공되어 불필요한 get 접두사를 제거하고, Record의 데이터 구조 표현 목적에 충실합니다. 🏷️
- Record는 DTO, VO, 그리고 간단한 데이터 검증 및 변환 로직을 포함하는 객체 등 단순한 데이터 저장 및 전달 목적에 적합합니다. 📦
- JVM은 Record의
equals 메서드를 INVOKEDYNAMIC을 통해 동적으로 최적화된 바이트코드로 생성하여, 일반 클래스의 equals보다 훨씬 간결하고 효율적으로 처리하며, JIT 컴파일러의 인라인 최적화에 유리합니다. ⚡
- 복잡한 비즈니스 로직을 포함하거나, 필드가 가변 객체인 경우, 또는 자동 생성되는
equals, hashCode 등이 불필요한 경우에는 Record 사용을 재고해야 합니다. 🤔
- Record는 개발자의 실수를 줄이고 코드의 간결성을 높이며, JVM 레벨에서 최적화된 성능을 제공하는 유용한 클래스입니다. ✨