보다 더 나은 내일의 나를 위해

@Service를 record 클래스로 작성해도 괜찮을까? 본문

spring

@Service를 record 클래스로 작성해도 괜찮을까?

H-SC 2022. 6. 20. 11:56

개요

record는 자바 14 버전에서 새로 추가된 클래스의 종류 중 하나입니다. 다음 문서에서 설명하는 record의 목적은 다음과 같습니다.

데이터를 데이터로 모델링하기
- JEP 359

 record 클래스의 간단한 특징은 다음과 같이 정리할 수 있습니다.

  • record 클래스는 final 클래스이다.
  • 모든 필드가 private final로 선언된다.
  • 모든 필드에 대해 초기화하는 생성자가 생성된다.
  • 각 필드에 대해 필드 명을 딴 getter가 생성된다. (ex. private final String name -> public String name())
  • equals(), hashCode(), toString() 함수를 암묵적으로 정의한다.

이런 특징들을 봤을 때, @Service 클래스는 의존성 주입을 위해 RequiredAllArgument 생성자를 사용하기도 하고 record로 사용해도 크게 문제는 없을 것 같습니다.

 

 

 

자료

이와 관련해서 스택오버플로우에서 글을 찾을 수 있었습니다.

https://stackoverflow.com/questions/70403180/is-it-ok-to-use-java-records-with-service-restcontroller-annotations

 

Is it OK to use Java Records with @Service / @RestController annotations

I'd prefer it as a record as there is less boilerplate, but would there be issues? IntelliJ is suggesting that I turn a basic Java class @Service like this: @Service public class LocationService { ...

stackoverflow.com

다음 글의 답변에 따르면 @Service와 같은 클래스에서는 필요 없는 Getter, toString 등의 메서드들을 생성하므로 @Service 클래스를 record로 선언하는 것은 좋지 않은 생각 같다고 합니다.

 

 

 

결론

위 자료에서 보았던 의견에 대해 동의합니다. 또한 JAVA에서 설명하는 record클래스의 목적과도 맞지 않아 보이며 record는 enum과 같이 목적을 위해 제한된 형식의 클래스이므로 @Service 클래스를 record로 선언해 사용하는 것은 좋은 생각은 아닌 것 같아 보입니다.

Comments