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

박기정님의 프로필 이미지
박기정

작성한 질문수

(2025) 일주일만에 합격하는 정보처리기사 실기

(기출) 2023년 1회 코드해석 문제

28:00 문제

해결된 질문

작성

·

59

0

st.b는 static int b=0으로 공유하는 변수를 선언했는데

첫번째 출력에서 Static.b++로 인해 11이된것이

왜 두번째 출력에서 초기화 선언된 0이 아닌 11이 되는걸까요?

답변 3

0

주말코딩님의 프로필 이미지
주말코딩
지식공유자

클래스 변수는 클래스가 탄생하는 즉시 생성되어 있다고 생각하시면 됩니다.

Static.b = a를 하는 순간부터 이미 10이 되어있습니다.

그 다음에 객체가 생성됐어도 10인 상태를 공유합니다.

 

최초에는 0이었으나, main 함수에서 계산 전에 초기화 되어 있어서 그렇습니다.

 

0

박기정님의 프로필 이미지
박기정
질문자

10보다 0으로 초기화된게 더 이후에된게 아닌가요?

0>10>11 이 순서로 된 것일까요?

0

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

박기정님의 질문에 대해 설명 드리겠습니다. st.bstatic으로 선언된 변수라는 점에서 중요한 이해가 필요합니다. static 변수는 프로그램이 시작될 때 한번만 초기화되며, 모든 인스턴스에서 공유되는 특성을 가지고 있습니다. 따라서, static int b = 0; 으로 이루어진 초기화는 프로그램 내에서 한번만 수행됩니다.

이것이 의미하는 바는, Static.b++에 의해 b의 값이 11로 변경되었다면, 이후 이 값은 동일하게 유지된다는 것입니다. 그래서 첫 번째 출력 후 b의 값이 11이 되고, 두 번째 출력에서도 11로 나타나게 됩니다. 새로운 값으로 재할당되거나 프로그램이 종료되지 않는 한, static 변수가 초기화를 통해 새로운 값을 갖지는 않습니다.

좀 더 이러한 개념에 대해 이해를 돕고자 유사한 질문이 있었던 링크를 추천드립니다. 23년 1회 println(st.b) ?에서 비슷한 맥락을 다루면서 static 변수의 특성에 대해 자세히 설명하고 있습니다.

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

박기정님의 프로필 이미지
박기정

작성한 질문수

질문하기