2023. 12. 31. 11:58ㆍ정보처리,전산/자료구조
Q.
class Static{
public int a = 20;
static int b = 0;
}
public class Main{
public static void main(String[] args) {
int a;
a = 10;
Static.b = a;
Static st = new Static();
System.out.println(Static.b++);
System.out.println(st.b);
System.out.println(a);
System.out.print(st.a);
}
}
클래스 ststic 정의 후 인스턴스 a, 정적 변수 b 가 선언 되었다.
클래스 Main에 main 메서드가 있다. 변수 a선언 후 10으로 초기화 하고 static 클래스 정적 변수 b에 할당한다.
static 클래스 인스턴스 생성 후 변수 st에 할당한다.
A.
int a;
a = 10;
Static.b = a;
static.b 는 정적변수이기 때문에 Static 클래스 인스턴스와는 독립적 존재이다.
정적변수를 메모리 구조로 설명하면
#include <stdio.h>
void test()
{
int num = 0;
num++;
printf("%d\n", num);
}
int main()
{
test();
test();
}
결과는
1
1
로 나온다 이유는 test()함수를 실행할 때마다 num이 0으로 초기화 되기때문이다.
이제 num을 static변수로 바꾸면
#include <stdio.h>
void test()
{
static int num = 0;
num++;
printf("%d\n", num);
}
int main()
{
test();
test();
}
결과는
1
2
가 된다.
static 변수는 함수가 끝나고 다음 함수가 실행되더라도 이전 값이 유지되고 프로그램이 종료될 때 메모리가 해제된다.
메모리 구조를 간단하게 표현하면
지역변수는stack에 저장되어 함수 종료 시 메모리에서 사라진다.
그러나 static 변수는 프로그램 시작 시 DATA영역에 할당되고 이 변수는 함수 종료가 아니라 프로그램이 종료될 때 소멸된다.
-(static 의 기본값은 0으로 초기화 된다, 외부 참조 불가(정보은닉),매개변수로 사용할 수 없다.)
출력
- static.b 값은 10이고 출력 후에 1이 증가 하므로 일단 10이다
- 정적 변수 b는 1이 증가되고 클래스 내의 모든 인스턴스에 1이 증가한 값으로 업데이트 됨
(st.b와 static.b는 별개의 메모리 위치이다. static.b의 값을 참조하는 것이 아니라 st의 인스턴스 변수인 b를 참조.
별개의 주소가 하나의 값을 가리킴)
static.b는 클래스 자체의 정적 변수이고 st.b는 인스턴스를 통해 정적변수에 접근함.
-print(a)는 10 출력
- st.a는 static 클래스의 인스턴스 변수 a를 출력한다.
10
11
10
20
'정보처리,전산 > 자료구조' 카테고리의 다른 글
삽입 정렬 insertion Sort (0) | 2024.07.22 |
---|---|
ArrayList LinkedList (0) | 2024.04.26 |
16진수 8진수 (0) | 2024.03.29 |
이진탐색 binary search (0) | 2024.03.15 |
포인터 문제 c로 분석 (0) | 2024.01.01 |