인프런 커뮤니티 질문&답변

Joshua Kim님의 프로필 이미지
Joshua Kim

작성한 질문수

자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)

9강. 코틀린에서 클래스를 다루는 방법

Custom Getter 에 대해 질문이 있습니다.

작성

·

436

0

안녕하세요 태현님!

 

이 강의 덕분에 코틀린을 재미있게 학습하고 있습니다.

 

Custom Getter 에 대해 질문이 있어서 질문드립니다.

 

name 을 대문자로 만드는 것을 예시로 Custom Getter 를 사용하는 것과, 프로퍼티로써 사용하는 것에 대해 설명해주셨는데요, 제가 잘 이해하지 못했는지.. 두 방법에 대해 차이가 있는것 같습니다.

 

  1. 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 로 출력되는 것을 볼 수 있습니다.

 

  1. 프로퍼티를 사용하는 경우

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 를 사용하지 않고, 프로퍼티를 통해 사용한다고 하셨는데.. 둘의 작동이 다른 것 같아서요!

 

제가 짐작컨데, 말씀하신 내용이

  1. backing field 처럼 사용되는 경우가 많지 않다.

  2. 주로 getter 로 값을 가져오는 경우에는 값 자체를 가져오는 경우가 많으므로 프로퍼티를 통해 값을 가져오도록 한다.

라고 이해해도 되는 것일까요?

 

 

 

 

 

 

 

 

 

 

 

답변 1

1

최태현님의 프로필 이미지
최태현
지식공유자

안녕하세요, Joshua Kim님!! 질문 주셔서 감사합니다~!!! 😊

 

강의에서 태현님께서 backing field 를 사용하지 않고, 프로퍼티를 통해 사용한다고 하셨는데.. 둘의 작동이 다른 것 같아서요!

라고 말씀해주셨는데요!!! 정확하십니다~~ 👍 둘의 작동이 같은 것은 아니고 "결과적으로" backing field를 사용해서 대문자 ABC를 가져올 수도 있고 property (upperCaseName)를 사용해서 대문자 ABC를 가져올 수도 있다는 의미였어요!

 

그리고 그 중 property를 더 많이 쓰는 이유가

  1. backing field 처럼 사용되는 경우가 많지 않다.

  2. 주로 getter 로 값을 가져오는 경우에는 값 자체를 가져오는 경우가 많으므로 프로퍼티를 통해 값을 가져오도록 한다.

말씀해주신 1번, 2번이 정확하게 맞습니다. 👍👍

 

완벽하게 이해하신 것 같습니다.

혹시라도 아직 해결되지 않으신 점이나 다른 궁금한 점 생기시면 언제든 편하게 질문 남겨주세요.

감사합니다!! 🙏

Joshua Kim님의 프로필 이미지
Joshua Kim
질문자

고맙습니다!

Joshua Kim님의 프로필 이미지
Joshua Kim

작성한 질문수

질문하기