티스토리 뷰
Java Record의 등장
최신 프로그래밍 언어들은 간결하고 효율적인 코드 작성을 중요하게 여깁니다. 데이터를 담는 객체를 정의할 때, 이러한 현대적인 언어들이 제공하는 기능 중 하나가 바로 불변성을 가진 데이터 홀더입니다.
Kotlin의 data class 가 개발자들에게 큰 인기를 끌면서, Java도 이에 대한 답변으로 record 를 제시했습니다. record 는 데이터를 운반하는 간단한 구조를 정의할 때 사용되며, 내부적으로 불변성을 가진 필드와 함께, 필수적인 메소드들을 자동으로 생성합니다.
Record와 Data Class 비교
Kotlin의 data class 와 마찬가지로, Java의 record 는 개발자가 수동으로 equlas(), hashCode(), toString() 등을 정의할 필요를 없애줍니다. 이는 코드의 양을 줄이고, 가독성을 높이며, 오류의 가능성을 줄입니다.
예를 들어, 로그인 응답 DTO를 Java에서 클래스로 한다면, 기존에는 다음과 같이 적었습니다.
@Getter
@Builder
@AllArgsConstructor
public class SignInResponse {
private final String accessToken;
private final String refreshToken;
}
record는 모든 필드에 대한 getter를 자동으로 제공하고, 모든 필드는 기본적으로 final입니다. 이는 추가적인 @Getter, @AllArgsConstructor, @NoArgsConstructor, @Builder 어노테이션이 필요하지 않음을 의미합니다. 즉, 더 이상 롬복 덕지덕지를 안 해도 된다는 뜻입니다.
public record SignInResponse(String accessToken, String refreshToken) {}
Kotlin의 data class는 어떨까요? Java의 record와 상당히 유사합니다.
data class SignInResponse(val accessToken: String, val refreshToken: String)
두 예시 모두 필드에 대한 자동 생성된 getter와 함께, 불변성을 가진 객체를 제공합니다.
응답 DTO에서의 활용
API 응답을 위한 DTO에서 record 또는 data class 를 사용하면, JSON이나 XML로의 직렬화 과정에서 데이터의 일관성과 무결성을 유지할 수 있습니다. 불변 객체는 멀티스레드 환경에서 데이터의 안전성을 보장하며, 클라이언트에게 정확한 정보를 전달하는 데 중요한 역할을 합니다.
Java record 와 Kotlin data class 는 DTO를 정의할 때 불필요한 코드를 줄이고, 응답 객체의 안정성을 높이는 데 큰 장점을 가집니다. 불변성은 데이터의 안전한 공유를 가능하게 하고, 자동 생성된 메소드들은 개발자가 보다 중요한 비즈니스 로직에 집중할 수 있도록 합니다. Java가 record 를 도입함으로써, Kotlin의 data class 와 비슷한 수준의 편리함과 안정성을 제공하게 되었습니다. 이제 Java 개발자들도 더 깨끗하고, 더 안전하며, 더 간결한 코드를 작성할 수 있게 되었습니다.
- Total
- Today
- Yesterday
- 상태 패턴
- 퍼싸드패턴
- 메멘토 패턴
- 프록시패턴
- 책임연쇄패턴
- 양방향연관관계
- ArrayDeque
- java문법
- 복합체 패턴
- 브리지 패턴
- springsecurity
- UML 필요성
- Iterator Pattern
- dfs
- jpa
- 빌더 패턴
- 프로토타입 패턴
- Flutter
- GithubActions
- restapi
- 플라이웨이트패턴
- FacadePattern
- 컴포지트패턴
- 구글로그인
- 반복자 패턴
- n+1
- idtoken
- Chain of Responsibility
- CompositePattern
- 책임체인패턴
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |