자바

JAVA 자바 익명 객체의 로컬 변수 사용

알통몬_ 2017. 3. 13. 10:53
반응형


안녕하세요 알통몬입니다.

공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^

 

익명 객체의 로컬 변수 사용

 익명 객체 내부에서는 바깥 클래스의 필드나 메서드는 제한 없이 사용가능합니다. 

문제는 메서드의 매개 변수나 로컬 변수를 익명 객체에서 사용할 때입니다. 

메서드 내에서 생성된 익명 객체는 메서드 실행이 끝나도 힙 메모리 영역에 존재해서 계속 사용할  수 있습니다.

매개 변수나 로컬 변수는 메서드 실행이 끝나면 스택 메모리 영역에서 사라지기 때문에 익명 객체에서는 사옹할 수 없게 되서 문제가 발생합니다. 이 문제에 대한 해결 방법은 이전에 로컬 클래스에서 사용 제한 포스팅에서 공부했었습니다. 로컬 클래스와 익명 클래스와의 차이점은 클래스 이름의 존재 여부만 다를 뿐 동작 방식은 동일합니다. 


인터페이스

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);

}

}

반응형