1. 다시 글을 쓴 이유
안녕하세요. 오늘은 Record에 대해서 다시 한번 작성해보려고 합니다. 생각보다 Record를 보려고 찾아주시는 분들이 많더라구요. 그래서 제가 직접 프로젝트에 도입해서 적극적으로 사용하면서 느낀 편리한 점들과 처음 사용하는 분들이 자주 하는 실수, 또 더불어서 동료들이 Record를 사용하면서 느꼈던 것 들에 대해서 공유해볼까 합니다. 아래의 작성할 코드에 대해서는, 코드 스니펫 가독성이 별로 안좋은 것 같아서 코드들은 사진으로 첨부하겠습니다. 바로 시작해 보겠습니다!
2. 개인적인 소감
새로운 프로젝트를 진행하면서, 제가 적극적으로 영업해서 모든 dto를 record로 구성해 보았습니다. 아직 진행중인 프로젝트인데도, 벌써 46개의 record가 만들어졌네요. 이전 글에서도 '편리해서 자주 사용할 것 같다'라고 했었는데요, 정말 정말 편했습니다 이거보다 좋은 게 있을까요? ㅎㅎ... 그래도 어떤 점이 편했는지 구체적으로 말해볼게요.
3. 사용하면서 느낀 장점
1. 롬복의 여러 어노테이션으로부터 해방된 것
제가 작성한 record의 일부분이에요.가독성을 위해 validation은 한 줄만 빼고 제거했습니다.
(사용 가능하다는 걸 알려드리기 위해 한줄만 남겼습니다!)
정말 간단하지 않나요? 이렇게 컴포넌트(필드)들만 선언하면 끝이에요. 이전에 dto class를 만들 때면, 의무적으로 롬복의 @Allargs @Noargs @Builder @Getter... 들을 선언하고 이후에 사용하지 않는 어노테이션들을 제거하느라 고생한적이 많았는데요, 그럴 필요가 없다는 점이 너무 좋았습니다. 또한, 그러한 부분을 신경 쓰지 않아도 되니 코드 작성하는 시간도 단축되겠죠?
2. 객체의 명확성
객체의 구조와 목적이 명확하게 드러난다는 점이 좋았습니다. 컴포넌트(필드) 만 보고도 어떤 정보를 담고 있는지를 파악할 수 있다는 것이 좋았어요. 또한, record가 다양하게 활용될 수 있지만 이번 프로젝트의 경우 주로 dto로 활용되고 있기 때문에, '데이터 전송에 사용되는 객체'라고 명확하게 인식되는 게 좋았습니다.
이는 조금 논란이 있을수도 있는 부분인데, 생성자를 만드는 부분이 좋았습니다.
사실 저는 entity <> dto 간의 변환을 할 때, 정적 팩토리 메소드를 주로 이용했는데, 이번에는 생성자를 주로 이용했어요.
왜냐하면 모든 컴포넌트를 가지는 생성자가 암시적으로 생성되기 때문에 작성하기가 용이한 점도 있었고요, 또 객체를 '생성' 하는 책임을 가진 함수로 적절한 게 '생성자' 만한 게 없다고 생각하기 때문입니다.
새로 프로젝트를 진행하면서 단일 책임 원칙과 적절한 네이밍으로 가독성 있는 코드를 작성하기 위해 노력했는데요, 정적 팩토리 메소드도 매우 매우 훌륭하지만 객체를 생성하는 것을 가장 잘 드러내는 것은 생성자라고 생각합니다. 실제로도 코드가 더 한눈에 잘 들어온다고 느꼈어요. (지극히 주관적인 관점입니다)
4. 주의할 점
record를 사용하면서, 익숙하지 않은 동료분들이 하는 여러 실수를 보았는데요.
첫 번째는, record는 class의 '생김새' 보다 method의 '생김새'를 취하고 있어요. 무슨 말이냐면요,
위에서 보여드린 사진인데요, 컴포넌트(필드) 들이 () 안에 들어가있어요. 컴포넌트들이 많기 때문에 가독성을 위해 이런 식으로 작성했는데, 사실은
이런 형태로 구성되어 있거든요. 메소드의 생김새랑 비슷하죠? 이 부분에서 헷갈리셔서, {} 사이에 컴포넌트를 작성하시는 경우도 많더라고요.
두 번째는요 모든 컴포넌트(필드) 들은 final로 선언된다는 거예요. 이것에 대해 학습하고 코드를 작성하더라도 막상 코드를 작성하다 보면 이런 경우가 있습니다.
항상 final로 선언된다는 걸 유의하시고 코드를 유연하게 작성하시면 되겠습니다!
5. 마무리
이상으로 실제로 사용하면서 느낀 점을 작성해 보았습니다. 막상 글을 작성하니 정말 별거 없네요.. 그래도 이 글을 작성하는 이유는 한 번씩 꼭 써보셨으면 하는 마음에서 입니다. 저 혼자 이렇게 편한 걸 사용하려니 너무 아쉽더라고요 ㅎㅎ
이번 프로젝트를 같이 진행한 동료들에게도 record를 사용해 보니 어떠냐고 여쭤보았는데요, 제가 느낀 장점이랑 같은 말을 하셨습니다.
1. 간결해서 좋다(lombok 관련)
2. dto라는 이름을 붙이지 않아도 명확한 객체라서 좋았다
3. 가독성이 좋다
라는 의견을 다들 주셨습니다.
java17을 사용하신다면, 꼭 한 번쯤 사용해 보셨으면 좋겠네요.
오랜만에 글 작성이라 너무 어색한데요, 앞으로는 종종 작성하도록 노력해 보겠습니다.
읽어주셔서 감사합니다!
'JAVA' 카테고리의 다른 글
Stream API의 map에 대해서 코드로 이해해보자 (2) | 2023.05.12 |
---|---|
[JAVA] Garbage Collection (GC)에 대해 알아보자 (0) | 2023.04.23 |
자바의 Record로 DTO를 만들어보자 (2) | 2023.03.22 |