data class๋ ()๋ฅผ ์ฐ๊ณ open class๋ {}๋ฅผ ์ฐ๋๋ฐ, ๋์ ์ฐจ์ด๊ฐ ๋ญ๊น?data class์ open class์ ๊ธฐ๋ณธ ์ ์ธ ๋ฐฉ์:
data class: ์ฃผ๋ก ๋ฐ์ดํฐ ์ ์ฅ์ ๋ชฉ์ ์ผ๋ก ํ๋ฉฐ, ์ฃผ ์์ฑ์(primary constructor)๋ฅผ ํตํด ํ๋กํผํฐ๋ฅผ ์ ์ธํ๋ค. ()๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ ์ํ๋ค.
data class User(
val id: String,
val name: String
)
open class: ์์์ด ๊ฐ๋ฅํ ์ผ๋ฐ ํด๋์ค์ด๋ฉฐ, ์์ฑ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ํด๋์ค ๋ณธ๋ฌธ์ ํ๋กํผํฐ๋ฅผ ์ ์ธํ ์ ์๋ค. {}๋ฅผ ์ฌ์ฉํ์ฌ ํด๋์ค ๋ณธ๋ฌธ์ ์ ์ํ๋ค.
open class User {
var id: String? = null
var name: String? = null
}
data class๋ ์ฃผ ์์ฑ์๋ฅผ ํตํด ๋ชจ๋ ํ๋กํผํฐ๋ฅผ ์ ์ธํ๊ณ ์ด๊ธฐํํ๋ค.open class๋ ์ฃผ ์์ฑ์๋ฅผ ์ฌ์ฉํ ์๋ ์๊ณ , ํด๋์ค ๋ณธ๋ฌธ์์ ํ๋กํผํฐ๋ฅผ ์ ์ธํ ์๋ ์๋ค.data class๋ equals(), hashCode(), toString(), copy(), componentN() ๋ฉ์๋๋ค์ ์๋์ผ๋ก ์์ฑํ๋ค.open class๋ ์ด๋ฌํ ๋ฉ์๋๋ค์ด ์๋์ผ๋ก ์์ฑ๋์ง ์๋๋ค.data class๋ ๋ชจ๋ ํ๋ผ๋ฏธํฐ์ ๊ธฐ๋ณธ๊ฐ์ ์ ๊ณตํ๋ฉด no-arg ์์ฑ์๋ฅผ ์๋์ผ๋ก ์์ฑํ ์ ์๋ค.open class๋ ํด๋์ค ๋ณธ๋ฌธ์ ํ๋กํผํฐ๋ฅผ ์ ์ธํ๋ฉด ๊ธฐ๋ณธ ์์ฑ์๊ฐ ์๋์ผ๋ก ์์ฑ๋๋ค.open class์ ()๋ฅผ ์ฐ๋ฉด val์ ๋งคํ์ด ์๋๊ณ , data class์ ()๋ฅผ ์ฐ๋ฉด val์ ๋งคํ์ด ๋๋ค๋ ๋ป์ผ๊น?Kotlin์ data class์ open class ๊ฐ์ ๋งคํ ๋์ ์ฐจ์ด๋ ํ๋กํผํฐ ์ ์ธ ๋ฐฉ์๊ณผ ์์ฑ์์ ๊ด๋ จ์ด ์๋ค.
data class์ () ์ฌ์ฉ:
data class๋ ์ฃผ ์์ฑ์๋ฅผ ํตํด val ํ๋กํผํฐ๋ฅผ ์ ์ธํ๋ค.
๋ชจ๋ val ํ๋กํผํฐ์ ๊ธฐ๋ณธ๊ฐ์ ์ ๊ณตํ๋ฉด, ModelMapper๊ฐ ์์ฑ์ ๊ธฐ๋ฐ ๋งคํ์ ํ ์ ์๋ค. ๊ธฐ๋ณธ ์์ฑ์๊ฐ ์๋์ผ๋ก ๋ง๋ค์ด์ง๊ธฐ ๋๋ฌธ์ด๋ค.
์์:
data class UserDto(
val id: String? = null, // ๊ธฐ๋ณธ ๊ฐ ์ ๊ณต
val name: String? = null // ๊ธฐ๋ณธ ๊ฐ ์ ๊ณต
)
ModelMapper ๋์: ๊ธฐ๋ณธ ์์ฑ์(๋ชจ๋ ํ๋กํผํฐ์ ๊ธฐ๋ณธ๊ฐ์ด ์๊ธฐ์)๋ฅผ ํตํด ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ์์ฑ์ ํ๋ผ๋ฏธํฐ๋ฅผ ๋งคํํ๋ค.
open class์ () ์ฌ์ฉ:
open class๋ ์ฃผ ์์ฑ์๋ฅผ ํตํด val ํ๋กํผํฐ๋ฅผ ์ ์ธํ ์ ์์ง๋ง, setter๊ฐ ์๊ธฐ ๋๋ฌธ์ ModelMapper๊ฐ ๊ฐ์ ํ ๋นํ ์ ์๋ค.
์์:
open class UserDto(
val id: String?,
val name: String?
)
ModelMapper ๋์: ModelMapper๋ ๊ธฐ๋ณธ ์์ฑ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด๋ฅผ ์์ฑํ ํ, setter๋ฅผ ํตํด ๊ฐ์ ํ ๋นํ๋ ค ํ์ง๋ง, val ํ๋กํผํฐ์๋ setter๊ฐ ์์ผ๋ฏ๋ก ๊ฐ์ด ํ ๋น๋์ง ์๋๋ค.
data class๋ ์์ฑ์ ๊ธฐ๋ฐ ๋งคํ์ด ๊ฐ๋ฅํ์ฌ val ํ๋กํผํฐ์ ๊ฐ์ ์ ์์ ์ผ๋ก ๋งคํํ ์ ์๋ค.open class์์ val์ ์ฌ์ฉํ๋ฉด, setter๊ฐ ์๊ธฐ ๋๋ฌธ์ ModelMapper๊ฐ ๊ฐ์ ํ ๋นํ ์ ์์ด ๋งคํ์ด ์คํจํ๋ค.