data class Member(
val name: String,
val age: Int
) {
val say: String
get() {
println("자기 소개를 하겠습니다.")
return "안녕하세요. 저는 $name 입니다. 나이는 $age 살 입니다."
}
}
내가 만약 여기에서 member.say를 호출하면, 과연 몇 번 실행될까?
호출 수만큼 실행한다.
@Test
fun test() {
// given
val member = Member("DolphaGo", 30)
// when
println(member.say)
println(member.say)
println(member.say)
}
실행 결과는 다음과 같다.
자기 소개를 하겠습니다.
안녕하세요. 저는 DolphaGo 입니다. 나이는 30 살 입니다.
자기 소개를 하겠습니다.
안녕하세요. 저는 DolphaGo 입니다. 나이는 30 살 입니다.
자기 소개를 하겠습니다.
안녕하세요. 저는 DolphaGo 입니다. 나이는 30 살 입니다.
이미 계산된 값인데, val로 parameter도 변경되지 않는 상태라면, 굳이 자기소개를 하겠습니다. 라는 로직을 한 번 더 탈 필요가 없다.
이를 function으로 만들어서 아예 변수레벨로 넣자.
즉 다음과 같이 개선할 수 있다.
data class Member(
val name: String,
val age: Int
) {
val say: String = myFunc()
private fun myFunc(): String {
println("자기 소개를 하겠습니다.")
return "안녕하세요. 저는 $name 입니다. 나이는 $age 살 입니다."
}
}
@Test
fun test() {
// given
val member = Member("DolphaGo", 30)
// when
println(member.say)
println(member.say)
println(member.say)
}
실행 결과는 다음과 같다.
자기 소개를 하겠습니다.
안녕하세요. 저는 DolphaGo 입니다. 나이는 30 살 입니다.
안녕하세요. 저는 DolphaGo 입니다. 나이는 30 살 입니다.
안녕하세요. 저는 DolphaGo 입니다. 나이는 30 살 입니다.
첫 실행시에만, 함수가 실행되고, 이후 값은 변수 레벨에 들어가게 되니, 불필요한 자기 소개를 하겠습니다. 라는 로직을 타지 않는다.
다음과 같은 코드가 있다고 가정해보자.
내가 만약 여기에서 member.say를 호출하면, 과연 몇 번 실행될까? 호출 수만큼 실행한다.
실행 결과는 다음과 같다.
이미 계산된 값인데, val로 parameter도 변경되지 않는 상태라면, 굳이
자기소개를 하겠습니다.
라는 로직을 한 번 더 탈 필요가 없다.이를 function으로 만들어서 아예 변수레벨로 넣자. 즉 다음과 같이 개선할 수 있다.
실행 결과는 다음과 같다.
첫 실행시에만, 함수가 실행되고, 이후 값은 변수 레벨에 들어가게 되니, 불필요한
자기 소개를 하겠습니다.
라는 로직을 타지 않는다.