πŸ€”Β Quiz. μ•„λž˜ μ½”λ“œμ—μ„œΒ bar1Β κ³ΌΒ bar2Β λŠ” μ–΄λ–€ 차이가 μžˆμ„κΉŒμš”?

class FooBar {
    val foo = 123
    val bar1 = foo
    val bar2 get() = foo
}

πŸ€Β ν•΄μ„

λ””μ»΄νŒŒμΌ 된 μ½”λ“œλ₯Ό 톡해 μ΄ν•΄ν•΄λ³΄μž.

image.png

foo와 bar1λŠ” ν•„λ“œκ°€ 생성 λ˜μ—ˆμœΌλ©° val둜 μ„ μ–Έ ν–ˆκΈ°μ— getter만 μƒμ„±λ˜μ—ˆλ‹€.

bar1은 val bar1 = foo 둜 μ„ μ–Έλ˜μ–΄ μžˆμ§€λ§Œ μ‹€μ œλ‘œλŠ” foo의 값을 λ³΅μ‚¬ν•˜λŠ” 것이 μ•„λ‹ˆλΌ 객체의 ν•„λ“œλ‘œ μ €μž₯λœλ‹€.

즉, bar1이 μ΄ˆκΈ°ν™”λ  λ•Œ foo의 ν˜„μž¬ 값이 ν•„λ“œμ— μ €μž₯되며, μ΄ν›„μ—λŠ” λ³€κ²½λ˜μ§€ μ•ŠλŠ”λ‹€.

그런데 bar2λŠ” λΆ„λͺ… getterκ°€ 생성 λ˜μ—ˆμŒμ—λ„ ν•„λ“œλŠ” μƒμ„±λ˜μ§€ μ•Šμ•˜λ‹€.

public final int getBar2() {
  return this.foo;
}

val을 톡해 μ΄ˆκΈ°ν™”ν•œ ν”„λ‘œνΌν‹°λŠ” bar1κ³Ό 같이 λ””μ»΄νŒŒμΌ λ˜μ—ˆμ„ λ•Œ Field, getterκ°€ μƒμ„±λœλ‹€.