인프런 커뮤니티 질문&답변
자바 record 사용에 대해서 질문 드립니다!
해결된 질문
작성
·
56
0
안녕하세요 강사님 저번 테스트 코드 강의 부터 지금 리팩토링 강의까지 정말 잘 들었습니다!
이번 강의에서는 record를 사용하지 않으셨는데 저는 보통 VO(Value Object)나 DTO를 만들 때 다음과 같은 이유로 record를 활용합니다
불변성 보장
보일러플레이트 감소
그런데 프로젝트를 진행하다 보면 DTO나 VO에 로직이 점점 복잡해지고, 어느 순간 record로는 한계가 느껴져 class로 변환한 경험이 몇 번 있습니다. 이와 관련해 어떤 경우에 record를 사용하는 것이 좋을지 강사님의 의견이 궁금합니다!
답변 2
1
안녕하세요, 이찬원 님!
좋은 질문이네요. record는 본질적으로 DTO와 VO에 사용되며, 말씀하신대로 불변성을 보장하면서 사이드이펙트를 줄여주는 역할을 하는데요.
언제 record를 쓰고 언제 class를 사용해야하는지 명확하게 지침을 세우기는 조금 어렵지만, 이미 잘 알고 계시는 것처럼 해당 객체가 불변성을 뛰어넘어 상태가 변하는 등의 기능을 가지게 된다면 class로 변경할 것 같아요. 아마 record의 기능을 확장하시면서 한계가 느껴졌다는 부분이 이런 부분 아니었을까 싶네요 ㅎㅎ
감사합니다. 🙂
0
안녕하세요, 인프런 AI 인턴입니다.
이찬원님, 강의에 대한 긍정적인 피드백 감사합니다!
자바의 record는 보일러플레이트를 줄이면서 불변성을 손쉽게 보장할 수 있는 장점이 있어 DTO나 VO를 간결하게 표현하는 데 유리합니다. 하지만 복잡한 로직이 포함되거나 세부적인 제어가 필요한 경우에는 record보다는 클래스를 사용하는 것이 더 적절할 수 있습니다. record를 사용할 때와 클래스로 전환해야 할 때의 주요 고려사항은 다음과 같습니다:
단순 데이터 표현:
record는 주로 단순히 데이터를 담고 전달하는 역할을 수행할 때 유리합니다. 필드가 여러 가지 비즈니스 로직을 갖지 않을 때 사용하기 좋습니다.복잡한 로직의 필요성: 필드 값들에 대한 검증 로직이 추가된다거나, 필드의 변경이 필요할 경우 이는
record의 설계와 맞지 않습니다. 이때는 클래스를 사용하여 메소드 추가와 같은 복잡한 동작을 처리하시는 게 좋습니다.상속/인터페이스 구현:
record는 다른 클래스를 상속받을 수 없으며, 인터페이스 구현 외에는 상속 구조를 가지지 않습니다. 클래스 계층 구조나 특정 인터페이스의 구현이 필요하다면 클래스를 사용해야 합니다.
따라서 데이터의 저장과 전달에만 목적이 있는 경우 record를 사용하고, 엔터티의 복잡한 로직이나 상태 변화가 요구될 때는 클래스를 통해 구현하시는 것을 추천드립니다.
더 자세한 설명을 원하시면, Spring Data JPA의 Class-based Projections (DTOs) 부분도 참고하시면 도움이 될 것입니다.





