해결된 질문
작성
·
1.2K
·
수정됨
2
안녕하세요 강사님. 별도로 코프링 프로젝트를 진행하던 도중 궁금한 점이 생겨서 질문드립니다!
프로젝트를 진행하다 보면 API가 늘어날수록 DTO의 개수도 어마어마하게 많아지는 경우가 많은데, 이 경우 코틀린에서는 어떻게 DTO를 관리하는게 좋을지 고민입니다.
코틀린은 자바와 달리 public 클래스를 파일과 1:1로 대응시킬 필요가 없다보니 하나의 파일 마다 각 엔티티별로 연관된 DTO를 모아놓는 사례도 보이더라구요.
이런 경우에 기존에는 자바를 쓸때처럼 패키지로 나눠서 DTO를 관리하고 있었는데 1번 그림처럼 하나의 파일에 연관된 DTO를 모아서 관리하는 것과 2번 그림처럼 패키지로 나눠서 DTO를 관리하는 것 중에 어느게 더 좋은 방법일까요?
답변 1
2
안녕하세요 콜라곰님! 🙂 좋은 질문 감사드립니다!!
명확한 정답은 없는 문제이지만, 제 생각을 말씀드려보겠습니다!
말씀해주신 것처럼 프로젝트가 커지게 되면 DTO
가 꽤~ 많아지게 됩니다!
그런데 여기서 한 가지 흥미로운 점은, 프로젝트가 커질수록 IDE 왼쪽에 있는 폴더 구조에서 클래스를 찾는 일도 점점 드물어지죠!
IntelliJ를 사용하는 경우, command + shift + O
(windows / linux : ctrl + shift + N) 단축키를 사용해 객체를 검색, 특정 클래스에 진입하는 경우가 많아 집니다!
자 그리고 command + shift + O
를 자세히 보면
Classes가 있고 Files가 있습니다. 기본적으로는 Files로 선택되어 있는데, 이 경우 파일 이름을 통해 클래스를 찾게 됩니다.
예를 들어, MemberRequests.kt 안에
data class MemberSaveRequest(
...
)
data class MemberUpdateRequest(
...
)
가 있다면, MemberSaveRequest
나 MemberUpdateRequest
를 검색하더라도 Files에서는 결과물이 나오지 않습니다. 이를 찾으려면 MemberRequests 라고 입력해야 하죠!
하지만 command + shift + O
창을 열어 놓은 후, shift + tab (혹은 여러번의 tab) 을 눌러 Classes를 선택하면, 특정 파일 안에 있는 클래스까지 검색 대상이 되어 마음 놓고 특정 클래스를 찾을 수 있습니다.
결론적으로 이 내용을 통해 말씀드리고 싶은 부분은,
프로젝트가 커지면 대부분 검색을 통해 클래스를 찾게 되고 (또는 타고 타고 클래스를 찾게 되고)
한 파일에 여러 클래스가 있더라도 검색 기능에는 지장이 없으며
매~~우 간혹 패키지로 클래스를 찾아야 하는 경우, 패키지의 구조가 매우 이상하지만 않다면 특정 객체를 찾는데 크게 문제가 없다
입니다!
바꿔 생각하면 한 패키지 내에 클래스가 많아진다고 하더라도 어차피 패키지를 들어가 클래스를 찾는 경우는 드물어 지기 때문에 해당 패키지 자체를 열 일이 없어지고 불편함을 느끼지 못하게 됩니다! 그렇다고 한 파일 안에 여러 클래스를 놓는다고 해서 단점이 생기지도 않죠!! 😊
그렇습니다!! 결론적으로 저는 말씀해주신 1번 방법과 2번 방법 모두 좋은 방법이라고 생각하고 제가 주로 사용하는 방법은 1번과 2번의 혼합입니다..!!
기본적으로는 클래스 별로 파일을 만드려고 하지만, 한 DTO가 여러 DTO를 물고 있는 경우는 DTO 들을 한 파일에 넣어두는 스타일입니다.
// 반환되는 DTO가 또 다른 DTO를 참조하고 있는 예시
data class ADto(
val b: BDto
)
data class BDto(
val name: String,
val age: Int
)
이런 스타일을 사용하고 있는 이유는 1) 제가 Java를 먼저 했다보니 관성적으로 한 파일 - 한 클래스가 익숙한 것도 있고요! 2) command + shift + O
이후에 shift + tab
을 누르는게 귀찮아서도 있습니다 ㅎㅎㅎ...
물론 이 스타일을 항상 사용할 수는 없습니다! 예를 들어 프로젝트가 복잡해지면, UserDto
를 5개의 API에서 사용해야 할 수도 있고, 요청과 응답에서 같은 DTO를 쓸 수도 있거든요!
결국, 적당히 합리적인 방법을 일관성있게 사용하는것이 좋지 않나 싶습니다..!! ㅎㅎㅎ
답변이 도움이 되었으면 좋겠습니다. 감사합니다!!! 🙇🙇
저도 자바를 먼저 했다보니 클래스 별로 파일을 만들어서 패키지로 구분했었는데 한 파일에 모아놓는 사례도 있고, 코틀린 공식 문서에도 밀접하게 연관된 클래스는 하나의 파일에 모아놓는걸 권장하길래 고민중이었는데 한가지 방법만 고집할 필요는 없었네요!
항상 친절하고 상세하게 답변해주셔서 감사합니다 😄