[Kotlin] Kotlin Property ๋ท๋ฐ์นจ ํ๋(Backing Field)์ ์ฌ์ฉ๋ฒ
์๋ ํ์ธ์
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๋ฅผ ์ ํ์ฉํ๋ค๋ฉด ๊ฐ๋ฐ์ ํ ๋ ๋งค์ฐ ํธ๋ฆฌํ ๊ฒ ๋๋์ด๊ธฐ์
์์ผ๋ก ์์ฃผ ์ฌ์ฉํด๋ณด์์ผ ํ ๊ฒ ๊ฐ์ต๋๋ค. ๐ค