inflearn logo
강의

講義

知識共有

Readable Code: 読みやすいコードを書くための考え方

終わりに

자바 record 사용에 대해서 질문 드립니다!

解決済みの質問

128

clw86799822

投稿した質問数 19

0

안녕하세요 강사님 저번 테스트 코드 강의 부터 지금 리팩토링 강의까지 정말 잘 들었습니다!
이번 강의에서는 record를 사용하지 않으셨는데 저는 보통 VO(Value Object)나 DTO를 만들 때 다음과 같은 이유로 record를 활용합니다

그런데 프로젝트를 진행하다 보면 DTO나 VO에 로직이 점점 복잡해지고, 어느 순간 record로는 한계가 느껴져 class로 변환한 경험이 몇 번 있습니다. 이와 관련해 어떤 경우에 record를 사용하는 것이 좋을지 강사님의 의견이 궁금합니다!

 

객체지향 리팩터링 클린코드-기획전

回答 2

1

wbluke

안녕하세요, 이찬원 님!

좋은 질문이네요. record는 본질적으로 DTO와 VO에 사용되며, 말씀하신대로 불변성을 보장하면서 사이드이펙트를 줄여주는 역할을 하는데요.

언제 record를 쓰고 언제 class를 사용해야하는지 명확하게 지침을 세우기는 조금 어렵지만, 이미 잘 알고 계시는 것처럼 해당 객체가 불변성을 뛰어넘어 상태가 변하는 등의 기능을 가지게 된다면 class로 변경할 것 같아요. 아마 record의 기능을 확장하시면서 한계가 느껴졌다는 부분이 이런 부분 아니었을까 싶네요 ㅎㅎ

감사합니다. 🙂

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다.
이찬원님, 강의에 대한 긍정적인 피드백 감사합니다!

자바의 record는 보일러플레이트를 줄이면서 불변성을 손쉽게 보장할 수 있는 장점이 있어 DTO나 VO를 간결하게 표현하는 데 유리합니다. 하지만 복잡한 로직이 포함되거나 세부적인 제어가 필요한 경우에는 record보다는 클래스를 사용하는 것이 더 적절할 수 있습니다. record를 사용할 때와 클래스로 전환해야 할 때의 주요 고려사항은 다음과 같습니다:

  • 단순 데이터 표현: record는 주로 단순히 데이터를 담고 전달하는 역할을 수행할 때 유리합니다. 필드가 여러 가지 비즈니스 로직을 갖지 않을 때 사용하기 좋습니다.

  • 복잡한 로직의 필요성: 필드 값들에 대한 검증 로직이 추가된다거나, 필드의 변경이 필요할 경우 이는 record의 설계와 맞지 않습니다. 이때는 클래스를 사용하여 메소드 추가와 같은 복잡한 동작을 처리하시는 게 좋습니다.

  • 상속/인터페이스 구현: record는 다른 클래스를 상속받을 수 없으며, 인터페이스 구현 외에는 상속 구조를 가지지 않습니다. 클래스 계층 구조나 특정 인터페이스의 구현이 필요하다면 클래스를 사용해야 합니다.

따라서 데이터의 저장과 전달에만 목적이 있는 경우 record를 사용하고, 엔터티의 복잡한 로직이나 상태 변화가 요구될 때는 클래스를 통해 구현하시는 것을 추천드립니다.

더 자세한 설명을 원하시면, Spring Data JPA의 Class-based Projections (DTOs) 부분도 참고하시면 도움이 될 것입니다.

[강의 질문] 메서드 선언부

0

90

1

[강의 질문] 메서드와 추상화

0

61

2

DIP 개념에 대한 질문입니다.

0

64

1

만약 보드를 이용한 게임의 종류가 더 다양해진다면 어떻게 될 수 있을지에 대한 고민

0

86

2

DIP 설명 후반부에 IOC에 대한 질문 드립니다.

0

79

2

안녕하세요 ! 혹시 자바가 아닌 다른 객체지향 언어를 알고있어도 강의를 들어도 괜찮을까요 ?!

0

71

1

안녕하세요 메서드명 때문에 고민이 있어서 질문드립니다.

1

64

2

강의 내용 정리 및 자료 제작 툴 문의 드립니다.

0

136

2

사용할 변수 가깝게 선언하기 질문

0

93

1

오버 엔지니어링

0

150

2

학습용 java/spring 오픈소스 추천

1

368

2

중복된 메서드 줄이는 방법

0

184

2

MarketPlace에서 Sonarlint 검색이 안됩니다.

0

417

3

isLandMineCell() 메서드 질문

0

209

1

Cell[][]BOARD 매개변수받기

0

153

2

ConsoleInputHandler에서 왜 final붙여야 하는지

0

193

1

정적 생성자 메서드 of, from

0

265

2

Getter관해서

0

148

3

이름 바꾸기

0

129

2

stack 대신 queue 를 사용해 bfs 로 변경해도 되나요??

0

164

2

현업에서 ISP를 도입하려는데 인터페이스 설계에 있어서 의문이 있습니다.

0

208

2

null을 가질 수 있는 값을 인자로 넘겨야 하는 경우

0

252

3

리팩토링을 하고 난 뒤 다시보면 오히려 더 복잡해 보이는것 같은 느낌입니다..

0

255

2

조합 관계에 대해 질문있습니다.

0

166

2