들어가기 전

record란걸 몰랐던 저는 스파르타에서 1차 프로젝트를 함께 하는 팀원덕에 새로운 자료형을 배우게 되었습니다.
ps. 감사합니다 팀원1님,,
record란?
코딩에서 record는 불변 객체 (immutable object)를 표현하기 위해 사용되는 데이터 구조입니다.
사용목적 :
- 데이터의 불변성을 유지하면서 속성을 정의하고 처리할 수 있도록 함.
이러한 목적을 갖고 있는 record는 "객체지향적 프로그래밍"에 적합합니다.
주요 특징 :
- 불변성(Immutable) : record는 기본적으로 불변객체이기 때문에 상태 변경이 없는 객체를 다루는데 유용함
- 간결함(conciseness) : 기본생성자, toString(), equals(), hashCode() 등을 자동으로 구현해주기 때문에 코드가 간결
- 구조적 평등(Structural equality) : 값 기반 비교를 제공하며, 객체의 참조 값이 아니라 내부 값들이 동일한지 비교
Application example
간단한 예시부터 실제 현재 프로젝트에 적용한 부분까지 이어나가 보겠습니다.

일반적인 Class로 Point라는 DTO를 생성하고 기본생성자와 toString()을 정의하는 경우에는 다음과 같이 코드의 길이도 늘어나며,
위의 예시같은 경우에는 쉬운 예제기 때문에 데이터를 쉽게 찾고, 수정이 가능하지만 실제 데이터의 경우

다음과 같이 데이터 양이 많아 기본생성자.toString,getter 등을 작성하게 되면 간결함이 현저하게 줄어들게 됩니다.
이러한 문제를 해결하기 위해 쉬운 예제의 자료형을 class -> record로 바꾸게 되면 다음과 이미지와 같이 바꿀 수 있는데,

그 이유는, 주요 특징에서 언급한 기본생성자와 toString() 등을 기본적으로 생성해주기 때문에 다음 한 줄로 refactor 할 수 있습니다.
프로젝트 적용

다음은 기존에 알고 있던 DTO클래스를 이용해 RequestDTO의 코드입니다.
record를 사용하지 않았기 때문에 파라미터가 없는 기본 생성자를 자동으로 만들어주는 @NoArgsConstructor 와
모든 필드를 파라미터로 받는 생성자를 자동으로 생성하는 @AllArgsConstructor. @Getter 어노테이션을 클래스명 위에 달아줘야 합니다.
그러나 record 자료형을 사용하게 되면 다음과 같이 어노테이션이 여러개 붙지 않아 훨씬 깔끔하고, 멀티스레딩 환경에서 동시성 문제를 방지 할 수 있습니다

record 장,단점 정리
장점
- 불변성으로 인해 코드의 예측 가능성과 안정성 증가
- 값 기반 비교를 통해 객체의 동일성 쉽게 비교
- 생성자, equals(), hashCode(), toString() 등의 메서드를 자동으로 생성하므로 코드 작성 간편
단점
- 불변성으로 인해 객체가 필요한 경우 불편함
=> DTO, ValueObject 등에서 유용하게 사용할 수 있음.
후기
"프로그래밍은 객체지향적이여야 한다."
인터넷에서, 현장에서, 인생선배이자 현재 백엔드 개발자 선배로부터 꾸준히 들어왔던 말이었습니다.
프로그래밍에 대해 자세히 알지 못헀을 때 처음 시작한 프로젝트의 구조는 지금보면 숨이 막힐 정도의 구조를 갖고 있었고

그 다음 프로젝트에선 기능별로 분리하고, 파일 내에서 코드를 어떻게 구현해야 하는지 신경썼지만

record와 같이 자료형을 통한 객체지향적 프로그래밍은 이번에 처음 알게 되어 (적용 과정에서 꽤나 애 먹긴 했지만,,) 매우 유익했습니다.
'Java' 카테고리의 다른 글
| [Java] reverse() (1) | 2024.11.13 |
|---|---|
| [Java] Thread Join (2) | 2024.11.12 |
| [Java] What is NullPointException? (0) | 2024.09.24 |
| [Java] Linear Search AND Binary Search (2) | 2024.09.03 |
| [Java] "float" vs "double" in precision (4) | 2024.08.31 |
