728x90
반응형
인스턴스가 모두 공유하는 값을 static변수로 선언한다. static변수에 대해 예제를 통해 살펴보자.
예제) 학생이 한명씩 생성될 때 마다 학번을 부여하는데, 학번은 1씩 증가하는 클래스를 만들어보자.
예제와 같은경우, 기준이 되는 학번은 static으로 선언해 주는 것이 좋다. (기준이 되는 학번을 인스턴스들이 모두 공유)
static | 인스턴스 |
- 데이터영역(또는 정적영역)에 따로 존재 cf.데이터 영역에는 상수,리터럴,static이 저장된다. - 전체 프로그램이 메모리에 로드될 때 할당받음(new 때문에 할당 x) - 인스턴스의 생성과 관계 없이 클래스 이름으로 직접 참조함. - 클래스변수라고 함. - 객체를 생성하지 않고 실행할 수 있음 -객체마다 생기는 것이 아님 - this사용 불가 (객체를 생성하지 않고 실행할 수 있기 때문에) |
- heap메모리(동적메모리) 사용 - new 할 때 할당받음 |
결론: static은 인스턴스가 생성될 때 마다 다른 메모리를 가지는 것이 아니라 프로그램이 메모리에 적재될 때마다 데이터 영역의 메모리에 생성됨.
다시 예제 풀이로 돌아가보자.
기준되는 학번을 넣어주는 정적변수 serialNum을 생성
Student 생성자를 만들어준다.
getter함수를 만들어줘서 serialNum을 가져와 메인함수에서 print할 수 있게 해줄거다.
int로 선언해준 i는 지역변수여서 에러가 뜨지 않았지만, 멤버변수(인스턴스 변수)인 studentName을 선언해주면 에러가 뜬다.
왜냐하면 getter는 인스턴스의 생성과 관계 없이 작동하는데, studentName 선언하게 되면 생성되지도 않은 인스턴스변수에 "홍길동"을 넣은거나 마찬가지이기 때문.
메인함수로 가서 serialNum과 학번을 출력해보겠다.
getter함수로 serialNum을 출력해주고 , james와 kate 객체를 생성해줘서 학번이 증가하는지 출력하면 된다.
<static 멤버를 객체의 멤버로 접근>
728x90
반응형
'Java > 기초' 카테고리의 다른 글
[java기초] 상속과 다형성 (0) | 2021.06.30 |
---|---|
[java 기초] 생성자 (0) | 2021.06.24 |
[java기초] 객체 생성과 참조변수 / this (0) | 2021.06.24 |
[java 기초] 용어정리 & 기초자료형과 참조자료형 (0) | 2021.06.20 |
[java기초] 객체의 협업 (0) | 2021.06.20 |
댓글