questions - Modern-Java-in-Action/Online-Study GitHub Wiki

읡λͺ…ν΄λž˜μŠ€μ™€ thisν‚€μ›Œλ“œ μŠ€μ½”ν”„ @λ°•νƒœμ˜

public static class MeaningOfThis {
  public final int value = 4;
  public void doIt() {
    int value = 6;
    Runnable r = new Runnable() {
      public final int value = 5;
      @Override
      public void run() {
        int value = 10;
        System.out.println(value);
        System.out.println(this.value);
      }
    };
    r.run();
  }
}

10행에 run() λ©”μ„œλ“œ λ‚΄λΆ€μ˜ μ§€μ—­λ³€μˆ˜ valueλ₯Ό 좜λ ₯ν•˜λŠ” μ½”λ“œλ₯Ό μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. μ‹€ν–‰κ²°κ³ΌλŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

10
5

final ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•΄λ„ λ³€μˆ˜ μ‰λ„μž‰μ€ μΌμ–΄λ‚˜κ³  valueλ‘œλŠ” λ©”μ„œλ“œ λ‚΄λΆ€ μ§€μ—­λ³€μˆ˜(9ν–‰)κ°€ ν˜ΈμΆœλ˜μ–΄ 10을 좜λ ₯ν•©λ‹ˆλ‹€.
this.valueλŠ” κ°€μž₯ κ°€κΉŒμš΄ μŠ€μ½”ν”„μ˜ 객체(Runnable) 멀버 λ³€μˆ˜(4ν–‰)에 μ ‘κ·Όν•˜μ—¬ 5λ₯Ό 좜λ ₯ν•œ κ²ƒμž…λ‹ˆλ‹€.
μΆ”κ°€λ‘œ, λžŒλ‹€μ—μ„œλŠ” λ³€μˆ˜ μ‰λ„μž‰μ΄ μΌμ–΄λ‚˜μ§€ μ•ŠλŠ”λ‹€κ³  ν•©λ‹ˆλ‹€.

λ³€μˆ˜ μ‰λ„μž‰: 마치 그림자λ₯Ό λ“œλ¦¬μš°λ“―μ΄, μŠ€μ½”ν”„μ— 따라 μƒμœ„ μŠ€μ½”ν”„μ˜ 멀버가 ν˜„μž¬ μŠ€μ½”ν”„μ˜ 멀버에 μ˜ν•΄ κ°€λ €μ§€λŠ” 것을 말함.

int x = 50;
public void foo(){
    int x = 10;
    System.out.println(x); //κ²°κ³ΌλŠ” 10
}