작성
·
383
1
강사님 강의기초 + 도서관 강의 까지보고 개인 프로젝트 중에 막혀서 질문 드립니다.. ㅜㅜ 일단 개인 프로젝트 질문 드려서 죄송합니다.. 아무리 구글링해도 답이 안나오고 코틀린 같은 경우에는 계속 안드로이드 쪽만 레퍼런스가 있어서 답을 못 찾았습니다.
단순이 Entity ->Dto 변환 문제인데 @Enumrated 를 사용하지 않고 Converter를 사용해서 변환하려 하는데 아직 코틀린이 눈에 익숙하지 않아서 그런지 봐도 잘 모르겠습니다 ㅜㅜ
이전 개인프로젝트에서 하던 방식과 똑같이 햇는데 안되는 이유도 궁금하고 , 혹시나 더 좋은 방법이 있다면 추천 부탁 드리겠습니다!!
답변 1
0
안녕하세요, wnsqud70님!! 아이고 아닙니다 ㅎㅎㅎ 제가 답변 드려볼 수 있는 부분은 드려볼게요~!
음 우선 에러가 나고 있는 부분은 (Member, TypeVariable<V>) -> Unit
타입의 "함수"가 들어가야 하는데 단순한 프로퍼티가 들어가고 있어서 에러가 나는 것 같아요!
그래서 저 부분을 고치고 싶으시다면, 저는 처음 보지만 mapper.using().map()
사용방법을 찾아보셔야 할 것 같습니다!
또한, 제가 ModelMapper와 ModelMapper의 Converter는 처음 보긴하는데 우선 상황을 보니
MemberCreateDto
라는 DTO를 Member
라는 Entity로 변환하시는 것 같습니다! (함수 of
에서 MemberCreateDto
를 받아 Member
를 만들고 있어서요!)
저라면 이런식으로 로직을 작성했을 것 같습니다 ㅎㅎ 간단히 적어볼게요!
class Member(
val name: String,
val age: Int,
val level: MemberLevel, // Entity에는 Enum이 있다.
)
enum class MemberLevel(val number) {
A(1),
B(2),
C(3),
;
}
class MemberCreateDto(
val name: String,
val age: Int,
val level: Int, // DTO는 정수를 사용한다. MemberLevel의 number가 level에 대응된다.
)
저는 converting 로직에서 별도의 라이브러리나 프레임워크를 사용하지 않는 편입니다! 따라서...
enum class MemberLevel(val number) {
A(1),
B(2),
C(3),
;
/**
* MemberLevel 자체의 level을 받아 변환되도록 합니다.
* 원래는 예외 처리를 하면 조금 더 좋겠지만, 저도 그냥 first 를 바로 쓸게요!!
*/
companion object {
fun of(level: Int): MemberLevel {
return values().first { it.number == level }
}
}
}
이렇게 필드 <-> Enum에 대한 변환 함수를 만들어 두고...!!
class Member(
val name: String,
val age: Int,
val level: MemberLevel,
) {
// 멀티모듈 프로젝트에서는 Entity가 DTO를 모르지만, 우선 비슷하게 작성하겠습니다 ㅎㅎ
companion object {
fun of(memberCreateDto: MemberCreateDto): Member {
return Member(
name = memberCreateDto.name,
age = memberCreateDto.age,
level = MemberLevel.of(memberCreateDto.level), // 위에서 만든 of를 활용
)
}
}
}
이런식으로 converting 로직을 쓸 것 같아요!
scope function(자바 개발자를 위한 코틀린 입문 - 20강. 코틀린의 scope function
)을 활용한다면 코드를 조금 더 간단히 다듬을 수 있죠!
companion object {
fun of(memberCreateDto: MemberCreateDto): Member = with(memberCreateDto) {
Member(
name = name,
age = age,
level = MemberLevel.of(level),
)
}
}
필드가 많아지더라도 IDE의 단축키를 적절히 활용하면 적은 코드로 converting이 가능해서 저는 이런식으로 코딩하는 것을 선호하게 되더라고요 ㅎㅎㅎ
답변이 도움이 되었으면 좋겠습니다!
감사합니다!! 🙏
일단 친절한 답변 너무 감사드립니다!
답변 너무 잘 읽었고 이해 충분히 했습니다 감사합니다.
제가 질문이 몇가지가 더 있는데
저는 자바에서 modelMapper을 사용한 이유가 저렇게 일일이 써주기도 귀찮고 코드도 너무 길어지는것 같아서 사용했는데.. 혹시 강사님도 자바를 사용하실때도 저런식으로 하나하나 필드값을 넣어 주셨을까요??
코틀린에서는 매핑관련 라이브러리를 잘 안쓴다는 경향이 있다고 들어서 혹시 그 이유때문에 이렇게 작성 하셨을까요??