인프런 커뮤니티 질문&답변

Levi님의 프로필 이미지
Levi

작성한 질문수

자바 기초부터 마스터하기 with 은종쌤 (Do it 자바 프로그래밍 입문) - Part 1(기초편)

여러 인스턴스에서 공통으로 사용하는 변수를 선언하자 - static 변수, 변수의 유효범위

질문드려요

해결된 질문

작성

·

210

·

수정됨

0

객체의 생성과 상관없이 프로그램이 로드 될 때 이미 static 변수는 생성이 되어있다고 하셨는데.
프로그램이 로드 될 때가 어떤 때 인가요?
이클립스를 실행했을 때 인가요?

아니면

보여주신 자료에는 프로그램이 처음 시작할 때라는데

main 함수에서 static 멤버변수를 처음 호출 했을 때 인가요?

프로그램 로드, 프로그램 시작이 어떤걸 기준인지 모르겠습니다

답변 4

1

박은종님의 프로필 이미지
박은종
지식공유자

예... 잘 이해하셨네요^^

0

박은종님의 프로필 이미지
박은종
지식공유자

아하... 이렇게 답변하면 될것 같네요. 우리가 지금 실습하는 코드는 main()함수가 시작될때 프로그램이 시작되는 시점입니다. 우리가 만드는 예제 코드는 main()에서 시작되어 여러 객체가 생성되고 main()이 종료되는 것이 끝인데, 이 전에 컴파일 단계에서 .class 파일이 생성되는데 그 .class 파일에는 실제로 수행되어야 하는 코드 영역과, static, 상수, 리터럴 등을 가지고 있는 data 부분이 따로 있습니다. 그렇게 data 부분에 대한 값들은 .class 파일이 메모리에 로드될 때 데이터 영역에 만들어 집니다.

Levi님의 프로필 이미지
Levi
질문자

아 구글링좀 해보고 선생님 답변 받으니 이해됐습니다.
1. 세모 표시 실행버튼 누르면 해당 클래스를 찾고 이걸 로드하는 과정에서 static은 메서드 영역에 전부 로드 시킨다.
2. 로드된 main() 메서드를 JVM이 호출하고, main() 함수가 실행되는 과정에서 접근하는 클래스가 있다면 해당 클래스를 정보를 로드하고, 그 안에 있는 static 메서드들을 메서드 영역에 전부 로드 시킨다고 이해했습니다! 얼추 맞게 이해한건가요?

0

박은종님의 프로필 이미지
박은종
지식공유자

프로그램이 시작할 때 즉, 프로그램이 프로세스로 메모리에 로드되는 시점인데요 그건 우리가 프로그램을 실행할 때 입니다. 가령 워드가 있으면 워드 아이콘을 더블 클릭해서 실행하지요 그때가 프로그램이 실행될 때 라고 합니다. 로드는 메모리 기준으로 보면 프로그램이 시작된다는건 프로세스가 되어 메모리에 로드된다는 의미입니다.

Levi님의 프로필 이미지
Levi
질문자

워드 같은 예로 들면 프로그램 실행될 때가 쉽게 이해가 되는데요.
코드 기준에서는 프로그램 실행될 때가 언제인지 이해가 안됩니다.
static 멤버변수에 접근했을 때가 프로그램 실행이라고 봐야하나요?

0

안녕하세요, 인프런 AI 인턴입니다.

Levi님, 프로그램 로드 시점과 관련된 질문에 대해 도움을 드리고자 합니다. 이와 비슷한 주제로 “싱글톤 패턴으로 클래스 작성시 private static Company company = new Company(); 라고 작성을 하였는데 프로그램 실행 부터 메모리에 올라가는 static 필드가 바로 인스턴스를 생성하는건가요?“라는 질문이 있었습니다. 이 질문에 대한 답변에서 클래스가 로딩되는 시점과 static 필드의 생성 시점에 대해 설명이 되어 있습니다.

클래스 로딩 시점은 해당 클래스의 코드가 처음으로 사용될 때, 즉 해당 클래스가 JVM(Java Virtual Machine)에 의해 참조되는 순간입니다. 이는 이클립스를 실행했을 때보다는 해당 프로그램의 실행 파일이나 해당 클래스가 사용되는 시점을 의미합니다. 프로그램이 로드될 때가 구체적으로는 프로그램이 실행되어 해당 클래스가 처음으로 호출될 때를 의미합니다. 따라서, static 변수나 static 블록의 코드는 클래스가 JVM에 의해 로딩되는 순간에 실행되거나 초기화되며, 이는 프로그램 전체 실행 동안 단 한 번만 발생합니다.

클래스의 로딩은 프로그램 실행 중 필요한 클래스를 메모리에 올리는 과정을 말하며, 이 과정 중에 static 필드나 static 초기화 블록이 실행됩니다. 따라서, 이클립스를 실행하는 것 자체가 아니라, 이클립스 내에서 해당 Java 프로그램을 실행했을 때 해당 클래스가 로딩되는 것입니다.

이 질문에 관련된 더 상세한 설명을 원하신다면, 싱글톤 패턴에 관한 이 질문과 답변을 참고하시는 것이 도움이 될 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Levi님의 프로필 이미지
Levi

작성한 질문수

질문하기