안녕하세요 알통몬입니다. 공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!! 포스팅 내용이 찾아주신 분들께 도움이 되길 바라며 더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^
|
익명 객체 내부에서는 바깥 클래스의 필드나 메서드는 제한 없이 사용가능합니다.
문제는 메서드의 매개 변수나 로컬 변수를 익명 객체에서 사용할 때입니다.
메서드 내에서 생성된 익명 객체는 메서드 실행이 끝나도 힙 메모리 영역에 존재해서 계속 사용할 수 있습니다.
매개 변수나 로컬 변수는 메서드 실행이 끝나면 스택 메모리 영역에서 사라지기 때문에 익명 객체에서는 사옹할 수 없게 되서 문제가 발생합니다. 이 문제에 대한 해결 방법은 이전에 로컬 클래스에서 사용 제한 포스팅에서 공부했었습니다. 로컬 클래스와 익명 클래스와의 차이점은 클래스 이름의 존재 여부만 다를 뿐 동작 방식은 동일합니다.
인터페이스
public interface Calculatable {
public int sum();
}
익명 객체의 로컬 변수 사용
public class Anonymous {
private int field;
public void method(final int arg1, int arg2) {
final int var1 = 0;
int var2 = 0;
field = 10;
//arg1 = 20; (x)
//arg2 = 20; (x)
//var1 = 30; (x)
//var2 = 30; (x)
Calculatable calc = new Calculatable() {
@Override
public int sum() {
int result = field + arg1 + arg2 + var1 + var2;
return result;
}
};
System.out.println(calc.sum());
}
}
실행 클래스
public class AnonymousExample {
public static void main(String[] args) {
Anonymous anony = new Anonymous();
anony.method(0, 0);
}
}
'자바' 카테고리의 다른 글
JAVA 자바 예외처리: 실행 예외(1) - NullPointerException (0) | 2017.03.13 |
---|---|
JAVA 자바 예외처리 예외와 예외 클래스 (0) | 2017.03.13 |
JAVA 자바 익명 구현 객체 생성 (0) | 2017.03.13 |
JAVA 자바 : 익명 자식 객체 생성 (0) | 2017.03.13 |
JAVA 자바 중첩 인터페이스 Interface (0) | 2017.03.13 |