해결된 질문
작성
·
178
답변 3
0
앗 늦어서 죄송합니다 ㅠㅠ
제가 현재 실무에서 코틀린을 사용하고 있지는 않으나 주니어때 코프링을 한 적이 있습니다. 그 때 당시 사수분께 아래와 같은 이유들로 data class 를 사용하는것을 지양하는 것이 좋다 라는 말을 들은 적이 있습니다.
(참고 레퍼런스)
- https://spoqa.github.io/2022/08/16/kotlin-jpa-entity.html
- https://tech.inflab.com/20240110-java-and-kotlin/ (요건 제외)
코틀린의 data class 는 주로 불변 객체를 다루고 있기 때문에 주 생성자로 모든 프로퍼티를 초기화 해야하는 것으로 알고있습니다. 또한 toString()
, equals()
, hashCode()
메서드 등을 오버라이드 하지 못하기 때문에 사용했을 때 예상하지 못한 문제를 일으킬 수 있고, 엔티티는 객체는 언제나 변할 수 있는 객체이기 때문에 안맞다는 생각이드는데요...
(예시가 조금 안맞을 수 있으나 자바에서 record 클래스가 나왔다고 해서 엔티티로 사용하지 않는 것처럼요 코틀린에는 val, var 이 있지만...)
그럼에도 불구하고 토이프로젝트에서 data class 를 사용하신 이유가 궁금합니다!
0
혹시 어떤 것을 사용하는지에 대해서 고민하고 계시는지 알 수 있을까요??
현재 질문자님께서 고민하고 있는 부분과 제가 작성한 부분에서 어떤 차이점을 가지고 고민하고 있는지 알려주시면 그것을 기준으로 더 좋은 설명을 드릴 수 있을꺼 같습니다!
0
안녕하세요, 인프런 AI 인턴입니다. heedoitdox님.
코틀린에서 엔티티 클래스를 data class
로 정의한 이유에 대해 궁금해 하시는군요. 코틀린의 데이터 클래스(data class)는 주로 다음과 같은 이유로 사용됩니다:
data class
를 사용하면 자동으로 equals()
, hashCode()
, toString()
, copy()
및 componentN()
함수가 생성됩니다. 이는 데이터 객체를 비교하거나 디버깅할 때 매우 유용합니다.코틀린에서 엔티티를 정의할 때 data class
를 사용하는 것은 데이터 클래스의 이러한 장점들을 활용하여 코드의 간결성 및 안정성을 크게 향상시키는 방법입니다. 관련된 질문에 대한 심도 있는 참고 링크는 아래에서 확인하실 수 있습니다:
이 링크에서는 데이터 클래스의 기능과 활용 방법에 대해 자세히 설명하고 있으니 참고하시기 바랍니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
어느정도 공감이 가는 내용인거 같습니다 ㅎㅎ
작성자님은 다음과 같은 부분에 대해서 질문을 남겨주신거 같아요.
record와 같은 형태이다.
모든 값을 초기화 해야 한다
부수적인 메서드에 대해서 오버라이딩 하여 처리 할 수 없다.
한번 하나하나씩 답변을 드리도록 하겠습니다.
record와 같은 형태이다.
먼저
data class
는record
와 거의 유사한 기능을 제공합니다.보일러플레이트 감소라고도 하는데요,
toString, equals
등등 다양한 부분을 자동으로 지원해주죠모든 값을 초기화 해야 한다.
질문주신 분께서 우려하시는 것처럼 모든 값을 넣어주어 구성해야 한다는 부분도 있지만, 어느정도 보완이 되는 형태라고 생각을 합니다.
예를들면
default value
를 활용하는 형태로 구현이 된다면, 굳이 모든 값을 넣을 필요는 없어요.요런 형태가 될 꺼 같습니다.
부수적인 메서드에 대해서 오버라이딩 하여 처리 할 수 없다.
여기서 말씀하시는 부수적인 메서드는 대표적으로
toString(), equals()
등등이 존재한다고 생각합니다. 음 그런데 이 부수적인 메서드들이 왜 오버라이딩이 안되는지는 잘 이해가 안되는거 같습니다!! 상황에 따라서 다른 부분을 말씀하셨을수도 있어서 혹시 어떤 부분에 대한 관점을 두고 이런 의견이 있으신지 궁금합니다!!저 같은 경우에는 오버라이딩을 해야하는 경우 이렇게 활용하면 처리가 된다고 생각을하기 떄문이에요!
그리고
data class
에서 굳이 val를 고집할필요는 없다고 생각을 해요.data class
가 불변이라는 것은val
로 다루기 떄문에 불변이라는거지var
를 사용하면 된다고 생각하는 주의라서.. ㅎㅎ 개인적인 의견으로 봐주셔도 무방할꺼같습니다.혹시 제가 질문에 대해서 답변을 잘못드렸거나 아니면 아직 이해가 안되는 부분이 있다면 관련해서 추가로 질문주시면 감사하겠습니다.
토이프로젝트에서 그냥
data class
를 사용한 이유는 큰 이유는 없습니다. 사실 편하기도 하고 굳이 그렇게까지 큰 불편함을 아직 느끼지는 못해서 그런 이유가 있습니다. 제가 식견이 부족해서 그런걸수도 있으니 이런 부분도 참고해주시면 좋을꺼같습니다!