작성
·
429
0
안녕하세요 태현님!
이 강의 덕분에 코틀린을 재미있게 학습하고 있습니다.
Custom Getter 에 대해 질문이 있어서 질문드립니다.
name 을 대문자로 만드는 것을 예시로 Custom Getter 를 사용하는 것과, 프로퍼티로써 사용하는 것에 대해 설명해주셨는데요, 제가 잘 이해하지 못했는지.. 두 방법에 대해 차이가 있는것 같습니다.
Custom Getter 를 사용할 경우
fun main() {
val personTest = PersonTest("abc", 10)
println(personTest.name)
}
class PersonTest (
name: String,
var age: Int
) {
init {
if (age <= 0) {
throw IllegalArgumentException("나이는 ${age}일 수 없습니다." )
}
println("초기화 블록")
}
val name = name
get() = field.uppercase()
}
위의 경우 ABC가 출력이 됩니다.
생성자를 통해 name 값이 "abc"로 객체가 생성되었으나, custom getter 를 통해 uppercase 되어서 ABC 로 출력되는 것을 볼 수 있습니다.
프로퍼티를 사용하는 경우
fun main() {
val personTest = PersonTest("abc", 10)
println(personTest.name)
println(personTest.uppercaseName)
}
class PersonTest (
val name: String,
var age: Int
) {
init {
if (age <= 0) {
throw IllegalArgumentException("나이는 ${age}일 수 없습니다." )
}
println("초기화 블록")
}
val uppercaseName: String
get() = this.name.uppercase()
}
위의 경우는 그대로 "abc" 가 출력이 됩니다.
당연히 personTest 객체를 통해 프로퍼티인 upppercaseName을 출력하면 ABC가 출력이 되지만요..
강의에서 태현님께서 backing field 를 사용하지 않고, 프로퍼티를 통해 사용한다고 하셨는데.. 둘의 작동이 다른 것 같아서요!
제가 짐작컨데, 말씀하신 내용이
backing field 처럼 사용되는 경우가 많지 않다.
주로 getter 로 값을 가져오는 경우에는 값 자체를 가져오는 경우가 많으므로 프로퍼티를 통해 값을 가져오도록 한다.
라고 이해해도 되는 것일까요?
답변 1
1
안녕하세요, Joshua Kim님!! 질문 주셔서 감사합니다~!!! 😊
강의에서 태현님께서 backing field 를 사용하지 않고, 프로퍼티를 통해 사용한다고 하셨는데.. 둘의 작동이 다른 것 같아서요!
라고 말씀해주셨는데요!!! 정확하십니다~~ 👍 둘의 작동이 같은 것은 아니고 "결과적으로" backing field를 사용해서 대문자 ABC를 가져올 수도 있고 property (upperCaseName)를 사용해서 대문자 ABC를 가져올 수도 있다는 의미였어요!
그리고 그 중 property를 더 많이 쓰는 이유가
backing field 처럼 사용되는 경우가 많지 않다.
주로 getter 로 값을 가져오는 경우에는 값 자체를 가져오는 경우가 많으므로 프로퍼티를 통해 값을 가져오도록 한다.
말씀해주신 1번, 2번이 정확하게 맞습니다. 👍👍
완벽하게 이해하신 것 같습니다.
혹시라도 아직 해결되지 않으신 점이나 다른 궁금한 점 생기시면 언제든 편하게 질문 남겨주세요.
감사합니다!! 🙏
고맙습니다!