지역클래스 - 지역 변수 캡처2
156
작성한 질문수 4
package nested.local;
import java.lang.reflect.Field;
public class LocalOuterV3 {
private int outInstanceVar = 3;
public Printer process(int paramVar) {
int localVar = 1; //지역 변수는 스택 프레임이 종료되는 순간 함께 제거된다.
class LocalPrinter implements Printer{
int value = 0;
@Override
public void print() {
System.out.println("value = " + value);
//인스턴스는 지역 변수보다 더 오래 살아남는다.
System.out.println("localVar = " + localVar);
System.out.println("paramVar = " + paramVar);
System.out.println("outInstanceVar = " + outInstanceVar);
}
}
LocalPrinter printer = new LocalPrinter();
//printer.print();를 여기서 실행하지 않고 Printer 인스턴스만 반환한다.
return printer;
}
public static void main(String[] args) {
LocalOuterV3 localOuter = new LocalOuterV3();
Printer printer = localOuter.process(2);
//printer.print()를 나중에 실행한다. process()의 스택 프레임이 사라진 이후에 실행
printer.print();
//추가
System.out.println("필드 확인");
Field[] fields = printer.getClass().getDeclaredFields();
for (Field field : fields) {
System.out.println("field = " + field);
}
}
}
안녕하세요 이 부분에서 막혀서 이 강의만 3번째 듣는데도 이해가 안가서 기본편의 섹션 7 자바 메모리 구조와 static쪽을 다시 보고 오려는데 그것 말고 위의 코드를 이해하는데 더 필요한 내용이 있을까요?
답변 2
0
안녕하세요. 한재님, 공식 서포터즈 David입니다.
강의 내용 중 특별히 어떤 부분이 이해되지 않는지 조금 더 자세히 함께 남겨주시면 답변에 큰 도움이 될 것 같습니다:)
감사합니다.
0
메인에서 인스턴스를 만들고
LocalOuterV3 localOuter = new LocalOuterV3();printer 에 paramVar 2를 넣어 메서드를 실행한 다음
Printer printer = localOuter.process(2);다시 인스턴스를 만들고나서 이걸 리턴하는데
LocalPrinter printer = new LocalPrinter();이 때 원래 메서드가 끝나면 GC되야할 지역변수가 인스턴스 내부에 값이 남아있는 걸까요?
원래라면
Printer printer = localOuter.process(2);이 코드 실행 이후에 process 메서드에 파라미터로 들어오는 paramVar, localVar가 읽히지 않아야 하는데, printer를 리턴해서 인스턴스 내부에 값이 남아 출력되는걸로 이해했는데 이게 맞을까요?
1
안녕하세요. 한채님
메서드가 끝난다고 GC가 되지는 않습니다 🙂
더는 참조하는 곳이 없을 때 GC의 대상이 됩니다.
이 경우 참조값이 반환되고, 해당 참조값을 또 다른 지역변수에서 계속 알 수 있기 때문에 GC의 대상이 되지 않습니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
한재님의 질문을 보니, Java의 지역 클래스와 지역 변수 캡처에 관한 이해가 필요한 것 같습니다. 특히 지역 변수가 어떻게 지역 클래스에 의해 캡쳐되고, 이들이 어떻게 메모리에서 관리되는지에 대한 부분이 핵심적인 관심사로 보입니다.
질문하신 부분은 주로 Java의 내부 클래스와 스코프, 그리고 메모리 관리에 대한 이해가 필요합니다. 이와 관련하여, 이전에 비슷한 주제로 질문하신 분들을 위한 답변들 중에서 특히 지역 변수 캡처와 관련된 설명이 포함된 답변이 있습니다. 이 설명들은 지역 클래스의 작동 방식과 지역 변수가 어떻게 캡처되며 사용되는지에 대한 좋은 이해를 제공할 수 있습니다.
지역 클래스-지역 변수 캡쳐2 질문에서는 지역 변수와 파라미터 변수가 지역 클래스 내에서 어떻게 사용되는지, 그리고
final이나 사실상final(Effectively Final)이 되어야 하는 이유에 대해 설명하고 있습니다. 컴파일 최적화와 관련하여final사용에 따른 변수 캡처 방식에 대한 설명도 들어 있습니다.지역 클래스 지역 변수 캡처 질문에서는
process()메서드 호출과LocalPrinter객체 생성 시점을 예로 들어 지역 변수 캡처의 동작 방식을 설명하고 있습니다. 이 내용은 메서드 호출 시점과 객체 생성 시점에 지역 변수의 값이 어떻게 처리되는지 이해하는 데 도움이 됩니다.
이러한 설명은 아마도 질문하신 코드에 대한 이해를 깊게 하는 데에 도움이 될 것입니다. 특히 Java의 메모리 구조와 지역 변수의 스코프 관리에 대한 이해는 이러한 코드를 분석하고 이해하는 데 핵심적인 요소입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
문제와 풀이
0
25
1
섹션 2 퀴즈 9번
0
34
2
강의노트 내용이 이해가 되지 않아서 문의드립니다.
0
48
1
중급1편, 래퍼클래스 문제와풀이2 로또제너레이터 질문
0
68
1
setVlaue질문
0
95
3
안녕하세요 코딩테스트와 병행하고 싶어서 질문드립니다.
0
95
1
findValue의 파라메터까지 래퍼클래스 배열인 이유가 있을까요?
0
76
1
아래 글처럼 toString() 강의부터 화면이 안보여요
0
99
2
TemporalAdjusters의 lastDayOfNextMonth(), lastDayOfNextYear() 메서드 지원 안함
0
84
2
오타 제보도 되나요?
0
90
2
지역 클래스 예제3 지역변수 질문
0
69
2
래퍼클래스 박싱 출력
0
60
1
자바 equals() 메소드에 대한 물리적 동일성, 논리적 동등성 질문
0
106
3
강의록 오타 제보
0
69
2
자바의 기본 클래스들에 관하여
0
71
1
실무에서 중첩(내부) 클래스 사용하나요?
0
80
1
지역 클래스 - 지역 변수 캡처3
0
55
1
12:30 의 newClassGrade 질문이 있습니다.
0
57
1
날짜와 시간 문제풀이가 막히는데
0
100
2
내부 클래스의 바깥 클래스 참조
0
68
1
스트링 풀, new String()
0
105
3
정적 중첩 클래스 사용 이유
0
97
1
status.getCode() 대신 status.code 사용
1
81
1
메서드의 지역변수명과 내부클래스의 멤버메서드에서의 지역변수명의 중복관련
0
75
1





