반응형
자바가 아닌 코틀린을 통해 스프링부트를 개발하기 위해서 클라이언트와 통신을 할 때,
주로 사용하는 DTO 클래스 작성에 대해 정리하려고 합니다.
DTO Class 생성하기
data class BlogDto(
val query: String?,
val sort: String?,
val page: Int?,
val size: Int?
)
➡️ 위와 같은 형태로 DTO를 작성하면 됩니다.
- val로 작성하게 되면 한 번 초기화되면 변경되지 않습니다.
- String?에서 ?는 null 값도 가질 수 있음을 의미합니다.
- 코틀린에서는 "?"를 통해 null을 안전하게 할당할 수 있으며 또한 호출도 가능합니다.
data class 사용하기
'data class'를 사용하면 여러 기능들을 자동으로 코틀린이 대체해 줍니다.
1. Kotlin 컴파일러가 자동으로 유용한 메서드들을 생성해 줍니다.
- toString()
- equals()
- hashCode()
- copy() : 객체의 복사본을 생성하면서 일부 프로퍼티를 변경할 수 있음
- componentN()
// componentN()
val user = User("Alice", 30)
val (name, age) = user
println(name) // Output: Alice
println(age) // Output: 30
But, data class가 사용하지 않는 메서드를 사용하는 경우 비효율적이지 않은지?
data class를 사용하면 위에서 언급한 메서드들을 자동으로 구현해 주는 것은 너무나 편리하다고 생각이 들었습니다.
하지만, 내가 사용하지 않는 메서드들이 추가되고, 이것이 여러 클래스에 적용된다면 불필요한 코드가 계속해서 쌓이는 건 아닌지 궁금하였습니다.
Kotlin Compiler가 이를 알아서 해결해준다.
- data class를 사용하면 equals(), hasCode(), toString(), copy() 등의 메서드가 자동으로 생성됩니다. 하지만 이 메서드들이 자동으로 생성된다고 해서 성능상 부담이 발생하지 않는다. 왜냐하면 코틀린 컴파일러가 이를 최적화하여, 사용되지 않는 메서드는 호출되지 않으며, 컴파일러가 최대한 효율적으로 코드를 관리해 준다.
- data class의 자동 생성 메서드는 클래스의 메타 데이터에 추가되지만, 이는 최종 바이트코드 크기에 큰 영향을 끼치지 않는다.
반응형
'Kotlin > 코프링' 카테고리의 다른 글
코틀린 스코프 함수 총정리 - let, also, run, apply, with 제대로 사용하기 (0) | 2024.12.12 |
---|---|
[Kotlin] 코틀린 엘비스 연산자와 firstOrNull 활용법 - 쿼리 시 서버 메모리 최적화 (1) | 2024.12.08 |