익명구현객체 오버라이딩 메소드 블록에서든, 람다식의 중괄호 블록에서든
클로저(생명주기가 다른 두 변수간에, 생명주기가 긴 쪽에서 생명주기가 짧은 변수를 사용하려는 현상) 현상 발생
--> final 상수 만들어 해결함
클로저
클래스블록 안에 선언된 또다른 클래스를 중첩클래스라고 한다.
중첩클래스는 바깥쪽 클래스에서만 쓸 목적으로 클래스 안쪽에 집어 넣음.
이렇게 할 바에는 바깥 클래스블록의 바깥에 선언하면 좋은데,
바깥쪽 클래스 전용으로 쓸 클래스를 내부 클래스(중첩 클래스)로 선언함.
익명객체에서 this는 자기 자신의 메모리주소를 가지고있지 않다.
이 람다식의 코드블록을 가지고있는 클래스의 주소를 가짐.
중첩된 클래스의 타입 레퍼런스는 위와 같음.
(바깥쪽 클래스명 $ 중첩클래스명)
람다식 코드가 들어있는 클래스의 객체(인스턴스)를 가리킴.
따라서 inner에 접근하려면 this를 사용함.
바깥클래스의 멤버에 접근하려면, 바깥 클래스.this.메소드 로 접근한다.
지역변수 타입은 var타입으로 선언 가능하다.
이 경우 컴파일러가 자동으로 타입추론해서 변수타입을 결정함.
단, 개발자 입장에서도 타입추론을 해야하므로 부담이 있음.
지역변수, 필드, 매개변수 등 혼합해서 사용할 때,
지역변수만 구분해서 사용하는 의미로 var 로 사용하면 편함.