getterSetter

data class User(val name: String, val age: Int)

์ฝ”ํ‹€๋ฆฐ์—์„œ ๋ฐ์ดํ„ฐ ํด๋ž˜์Šค๋ž€ ์˜ˆ์‹œ๋กœ, ์œ„์™€ ๊ฐ™์ด ๋ฐ์ดํ„ฐ ํด๋ž˜์Šค๋ฅผ ์„ ์–ธํ–ˆ์„ ๋•Œ ์„ ์–ธ๋œ ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด์„œ ๋‹ค์Œ ๋ฉค๋ฒ„๋“ค์„ deriveํ•ด์ค€๋‹ค.

- equals()
- hashcode()
- toString()
- componentN()
- copy()

(equals(), hashcode()๋Š” hashcoded.md๋ฅผ ์ฐธ๊ณ )

toString์ด derive๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๊ฐ„๋‹จํ•˜๋‹ค. class๋ฅผ printํ•ด๋ณด๊ณ  data class๋ฅผ ํ”„๋ฆฐํŠธํ•ด๋ณด๋ฉด class๋Š” ์ฃผ์†Œ๊ฐ’์ด ์ถœ๋ ฅ๋˜๊ณ , data class๋Š” toString()์„ ์ด์šฉํ•œ ์ŠคํŠธ๋ง๊ฐ’์ด ์ถœ๋ ฅ๋œ๋‹ค.

class ์‚ฌ์šฉ

fun main(args: Array<String>) {
val c = Test("yap",10)
println(c)
}

class Test(
var a: String,
var b: Long
){
}

์ถœ๋ ฅ๊ฐ’

Test@31221be2

data class ์‚ฌ์šฉ

fun main(args: Array<String>) {
    val c = Test("yap",10)
    println(c)
}

data class Test(
    var a: String,
    var b: Long
){
}

์ถœ๋ ฅ๊ฐ’

Test(a=yap, b=10)

์ด๋ ‡๊ฒŒ ์ถœ๋ ฅ๋œ๋‹ค.

๋˜ํ•œ, ์ด๋Ÿฌํ•œ "Test(a=yap, b=10)"๊ฐ™์€ ์ŠคํŠธ๋ง์ด ์•„๋‹ˆ๋ผ, {"a":"yap", "b":"10"} ์ด๋ ‡๊ฒŒ objectํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด jackson์˜ objectmapper๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

val requestJson = objectMapper.writeValueAsString()  // ์ŠคํŠธ๋ง ์ž๋ฃŒํ˜•์˜ JSON์ถœ๋ ฅ
val jsonSend = JSONParser().parse(requestJson) as JSONObject   // ์ŠคํŠธ๋ง ์ž๋ฃŒํ˜•์˜ json์„ JSONObject ์ž๋ฃŒํ˜•์œผ๋กœ ๋ณ€๊ฒฝ
objectMapper.convertValue(jsonSend, className) // JSONObject๋ฅผ className์— ํ•ด๋‹นํ•˜๋Š” ํด๋ž˜์Šค ํƒ€์ž…์œผ๋กœ ๋ณ€๊ฒฝ

Getter, Setter

์ด์ œ getter, setter๋ฅผ ์‚ดํŽด๋ณด์ž. data class์—์„œ getter์™€ setter๋Š” ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์„๊นŒ?

fun main(args: Array<String>) {
    val c = Test("yap",10)
    c.a="yes"
    println(c)
}

data class Test(
    var a: String,
    var b: Long
){
}

์ถœ๋ ฅ๊ฐ’

Test(a=yes, b=10)

data class๋ฅผ ์ด๋ ‡๊ฒŒ ์„ ์–ธํ•˜๋ฉด getter, setter๊ฐ€ ๋ชจ๋‘ ํ™œ์„ฑํ™”๋œ๋‹ค. Test์ƒ์„ฑ์ž์—์„œ ๋ณ€์ˆ˜๋ฅผ var๋กœ ์„ ์–ธํ•ด์„œ ์ƒˆ๋กœ์šด ๊ฐ’ ํ• ๋‹น์ด ๊ฐ€๋Šฅํ•˜๊ณ , ๋ณ€์ˆ˜ ์„ ์–ธ์— ์ ‘๊ทผ ์ œํ•œ์ž๋ฅผ ๋ถ™์ด์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ public ์ ‘๊ทผ ์ œํ•œ์ž๊ฐ€ ๋ถ™์–ด ์žˆ๋Š” ๊ฒƒ๊ณผ ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. (์ฝ”ํ‹€๋ฆฐ์˜ val, var์€ ๋งˆ์น˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ const, let๊ณผ ๊ฐ™๋‹ค.)

์ฝ”ํ‹€๋ฆฐ์—์„œ๋Š” ์ (.)ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ getter์™€ setter๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ž๋ฐ”์ฒ˜๋Ÿผ getName(), setName() ๊ฐ™์€ ๋ฉ”์†Œ๋“œ๋ฅผ ๋งŒ๋“ค ํ•„์š” ์—†์ด instance.name ์ฒ˜๋Ÿผ ์“ฐ๋ฉด ์ฝ”ํ‹€๋ฆฐ ๋‚ด๋ถ€์ ์œผ๋กœ getter, setter๋ฅผ ๋งŒ๋“ค์–ด ์ฒ˜๋ฆฌํ•ด์ค€๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

(์  ํ‘œ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์ฝ”ํ‹€๋ฆฐ์—์„œ์˜ getter์™€ setter์˜ ํ˜•ํƒœ๋Š” ๊ฐ™๋‹ค. ์•„๋ž˜ ์ฝ”๋“œ์—์„œ c.a๋ฅผ ๊ทธ๋ƒฅ ์‚ฌ์šฉํ•˜๋ฉด getter์ด๊ณ , c.a์— ๊ฐ’์„ ํ• ๋‹นํ•˜๋ฉด setter๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.)

์ด์ œ getter, setter๋ฅผ ์ œํ•œํ•ด๋ณด์ž.

์•„๋ž˜ ์ฝ”๋“œ์™€ ๊ฐ™์ด ๋ณ€์ˆ˜๋ฅผ val์œผ๋กœ ์„ ์–ธํ•˜๋ฉด setter๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค. ๊ทผ๋ฐ ๋ฌธ์ œ๋Š” val์ด๋ฏ€๋กœ data class๋‚ด๋ถ€์—์„œ๋„ ๊ฐ’์„ ๋ฐ”๊ฟ€ ์ˆ˜๊ฐ€ ์—†๋‹ค. ๋˜ํ•œ ์•„์ง ์ ‘๊ทผ ์ œํ•œ์ž๊ฐ€ public์ด๋ฏ€๋กœ getter๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

fun main(args: Array<String>) {
    val c = Test("yap",10)
    c.a="yes"
    println(c)
}

data class Test(
    val a: String,
    var b: Long
){
}

์ถœ๋ ฅ๊ฐ’

{error...}

์ด๋ ‡๊ฒŒ ๋˜๋ฉด ํ•œ ๋ฒˆ ์ƒ์„ฑํ•œ ์ธ์Šคํ„ด์Šค์˜ ๋ฉค๋ฒ„๋“ค์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ’์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๊ฒŒ ์„ค์ •ํ•˜๋ ค๋ฉด ๊ฒฐ๊ตญ var์„ ์„ ์–ธํ•ด์•ผ ํ•œ๋‹ค.

fun main(args: Array<String>) {
    val c = Test("yap",10)
    c.jump()
    println(c)
}

data class Test(
    private var a: String,
    var b: Long
    ){
    fun jump(){
        this.a="power"
    }
}

var a ์„ ์–ธ์œผ๋กœ ๊ฐ’์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๊ฒŒ ์„ค์ •ํ–ˆ๊ณ , private๋กœ ๋‚ด๋ถ€์—์„œ๋งŒ ๊ฐ’์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๊ฒŒ ํ–ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด setter๋ฅผ ์‚ฌ์šฉ์ œํ•œํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทผ๋ฐ ์ƒˆ๋กœ ์ƒ๊ธด ๋ฌธ์ œ๋Š” ์—ฌ๊ธฐ์—์„œ aํ•„๋“œ์— ๋Œ€ํ•ด private๋ฅผ ์„ ์–ธํ–ˆ์œผ๋ฏ€๋กœ getter๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๋‹จ์ ์ด ์กด์žฌํ•œ๋‹ค.

๋” ์•Œ์•„๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด kotlin entity์—์„œ setter๋ฅผ ๋ง‰์„ ์ˆ˜ ์žˆ์„๊นŒ๋ฅผ ์ฝ์–ด๋ณด์ž.

Custom Getter, Setter

์ฝ”ํ‹€๋ฆฐ์—์„œ๋Š” getter, setter๋ฅผ ์›ํ•˜๋Š”๋Œ€๋กœ ์ปค์Šคํ…€ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

class User(_id: Int, _name: String, _age: Int){
    val id: Int = _id
        get() = field
    
    var name: String = _name
        get() = field
        set(value){
            field = value
        }
    
    var age: Int = _age
        get() = field
        set(value){
            field = value
        }
    
}

fun main(){
    val user1 = User(1, "Ingkells", 20)
    user1.age = 35
    println("user1.age = ${user1.age}")
}

์œ„๋Š” get(), set()์˜ ๊ธฐ๋ณธ ํ˜•ํƒœ๋ฅผ ์ปค์Šคํ…€ getter, setter๋กœ ๋งŒ๋“ค๋ฉด ์–ด๋–ป๊ฒŒ ๋˜๋Š”์ง€ ๋ณด์—ฌ์ค€ ๊ฒƒ์ด๋‹ค. ์ฆ‰, ์œ„ ์ฝ”๋“œ์—์„œ๋Š” get(), set()์„ ๊ตณ์ด ์„ ์–ธํ•˜์ง€ ์•Š์•„๋„ ์ฝ”ํ‹€๋ฆฐ ๋‚ด๋ถ€์ ์œผ๋กœ getter, setter๋ฅผ ๋งŒ๋“ค์–ด ์ฒ˜๋ฆฌํ•ด์ค€๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

ํ”„๋กœํผํ‹ฐ๋ฅผ var๋กœ ์„ ์–ธํ•˜๋Š” ๊ฒฝ์šฐ get(), set()์„ ํ†ตํ•œ getter, setter๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ณ , ํ”„๋กœํผํ‹ฐ๋ฅผ val๋กœ ์„ ์–ธํ•˜๋Š” ๊ฒฝ์šฐ get()์„ ํ†ตํ•œ getter๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

์œ„์—์„œ get(), set()์— field์™€ value๊ฐ€ ์‚ฌ์šฉ๋˜์—ˆ๋Š”๋ฐ, ์ด๋Š” ์˜ˆ์•ฝ์–ด์ด๋ฏ€๋กœ ๊ธฐ์–ตํ•ด๋‘๋Š” ๊ฒƒ์ด ์ข‹๊ฒ ๋‹ค.

์ปค์Šคํ…€ getter, setter๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด getํ•  ๋•Œ field.toUpperCase()๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์†Œ๋ฌธ์ž๊ฐ€ ์•„๋‹Œ ๋Œ€๋ฌธ์ž๋กœ get์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋˜๋Š” ๋“ฑ ํŽธ์˜์„ฑ์ด ์ฆ์ง„๋  ์ˆ˜๋„ ์žˆ๋‹ค.

์ •๋ฆฌํ•˜๋ฉด ์ž๋ฐ”์˜ getter, setter์™€ ์ฝ”ํ‹€๋ฆฐ์˜ getter, setter๋ฅผ ๋น„๊ตํ–ˆ์„ ๋•Œ ์ฐจ์ด์ ์€ ์ž๋ฐ”๋Š” setName(), getName()์ด๋ ‡๊ฒŒ set, get์„ ์จ์ฃผ์–ด ๋ช…์‹œ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€๋งŒ ์ฝ”ํ‹€๋ฆฐ์€ getter, setter ๋ชจ๋‘ instance.name ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์ ์ด๋‹ค.

Last updated