Tutorial/tutorial

[Kotlin] Kotlin Property ๋’ท๋ฐ›์นจ ํ•„๋“œ(Backing Field)์˜ ์‚ฌ์šฉ๋ฒ•

๋ށ์š” 2022. 9. 21. 01:09

์•ˆ๋…•ํ•˜์„ธ์š”

 Backing Filed(๋’ท๋ฐ›์นจ ํ•„๋“œ)์— ๋Œ€ํ•ด์„œ ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ๊ฐ„๋‹จํ•˜๊ฒŒ 

์ •๋ฆฌํ•ด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค.

 

์šฐ์„  Java์—์„œ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ๊ฒƒ์„ Kotlin์—์„œ๋Š” Property(์†์„ฑ)์ด๋ผ๊ณ  ์นญํ•ฉ๋‹ˆ๋‹ค.

Kotlin์—์„œ๋Š” ์„ ์–ธ ํ‚ค์›Œ๋“œ์— ๋”ฐ๋ผ ์ž๋™์œผ๋กœ ์ ‘๊ทผ์ž ๋ฉ”์„œ๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๊ฒŒ ๋˜๋Š”๋ฐ, 

 

- val ์˜ ๊ฒฝ์šฐ : getter ๋งŒ ์กด์žฌ

- var ์˜ ๊ฒฝ์šฐ : setter / getter ๋‘˜ ๋‹ค ์กด์žฌ

 

์ƒ์„ฑ๋˜๋Š” ๋ฐฉ์‹์€ ์œ„์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

Backing Field๋Š” ์œ„ setter / getter๋ฅผ ์žฌ์ •์˜ํ•˜์—ฌ ์†์„ฑ๊ฐ’์„ ์ˆ˜์ • , ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

 

์ฝ”๋“œ๋ฅผ ๋ณด๋ฉฐ ์„ค๋ช… ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

 

class Person{
    val name = "DEV yo"
            get() = field.uppercase(Locale.getDefault())
}

Person์ด๋ผ๋Š” ๊ฐ์ฒด์˜ name์ด๋ผ๋Š” Property๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ (getter) ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ ํ•˜๋Š” ๋ถ€๋ถ„์œผ๋กœ return name์˜ ๊ฐ’์€ ๋ชจ๋‘ ๋Œ€๋ฌธ์ž๋กœ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.

 

class Person {
	/* ์ƒ๋žต */
    var age : Int = 25
        set(value){
            field += value
        }
    var gender : String = ""
        set(value){
            field = "$name ๋‹˜์€ $value "
        }
}

Person์ด๋ผ๋Š” ๊ฐ์ฒด์˜ age ์™€ gender Property๋ฅผ ์„ค์ • (setter)ํ•  ๋•Œ ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ ํ•˜๋Š” ๋ถ€๋ถ„์œผ๋กœ age๋Š” ์ดˆ๊ธฐ ์„ค์ •๊ฐ’์— ์ž…๋ ฅ๋œ ๊ฐ’์„ ๋”ํ•˜๋„๋ก , gender์˜ ๊ฒฝ์šฐ์—๋Š” ์„ค์ •๋œ ์„ฑ๋ณ„์„ ๋ฐ”๋กœ Print ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐ’์„ ๋ณ€๊ฒฝ์‹œ์ผœ์ฃผ๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

 

์•„์šธ๋Ÿฌ , ๊ธฐ๋ณธ์ ์œผ๋กœ get()์€ ์žฌ์ •์˜ ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ์•„๋ž˜์™€ ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ์ƒ๋žต๋œ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

class Person{
	var age : Int = 25
    	get() = field // ํ•ด๋‹น ๋ถ€๋ถ„์€ ์ƒ๋žต ๊ฐ€๋Šฅํ•œ ๋ถ€๋ถ„
        set(value){
            field += value
        }
    var gender : String = ""
    	get() = field // ํ•ด๋‹น ๋ถ€๋ถ„์€ ์ƒ๋žต ๊ฐ€๋Šฅํ•œ ๋ถ€๋ถ„
        set(value){
            field = "$name ๋‹˜์€ $value "
        }
}

 

์ „์ฒด ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

import java.util.*

class Person {
    val name = "DEV yo"
        get() = field.uppercase(Locale.getDefault())

    var age : Int = 25
        set(value){
            field += value
        }
    var gender : String = ""
        set(value){
            field = "$name ๋‹˜์€ $value "
        }
}

fun main() {
    val person = Person()

    println("์ด๋ฆ„ : ${person.name}")
    person.age = 3
    println("๋‚˜์ด : ${person.age}")
    person.gender = "๋‚จ์ž"
    println(person.gender)
}

๊ฒฐ๊ณผ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

 

Backing Field๋ฅผ ์ž˜ ํ™œ์šฉํ•œ๋‹ค๋ฉด ๊ฐœ๋ฐœ์„ ํ•  ๋•Œ ๋งค์šฐ ํŽธ๋ฆฌํ•  ๊ฒƒ ๋А๋‚Œ์ด๊ธฐ์—

์•ž์œผ๋กœ ์ž์ฃผ ์‚ฌ์šฉํ•ด๋ณด์•„์•ผ ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๐Ÿค”