728x90
728x90
static 변수 (클래스 변수, 정적 변수)
// 선언
static 자료형 멤버변수명;
- 여러 객체들이 공유하는 하나의 변수(데이터)가 필요할 때 사용하는 멤버변수
- 객체가 생성되기 이전 (new 키워드 이전), 처음 프로그램이 메모리에 로딩될 때 메모리를 할당 받음
→ 객체 생성과 관계 없이 해당 멤버변수에 접근할 수 있음
→ 참조변수 대신, 클래스 이름으로 직접 참조 가능 : 클래스명.멤버변수명
- 객체(인스턴스)들이 공통으로 사용하는 영역
→ 모든 객체가 같은 값을 담고 있음
→ static 변수만 사용하면 각각의 객체가 고유한 상태 값을 가지도록 할 수 없음
→ 다른 멤버변수를 활용해서 저장하기
// 예시 : 다른 멤버변수를 활용해 각 객체들에게 고유한 값 할당 //
// 멤버변수
public static int serialNum;
private int employeeId;
// 생성자
public Employee() {
serialNum++;
this.employeeId = serialNum; // static 변수 값을 다른 멤버변수에 저장
}
// 예시 : 기기가 2대 이상인 은행에서 대기 표를 뽑을 경우 //
public class NumberPrinter {
private int id;
public static int waitNumber;
public NumberPrinter(int id) {
this.id = id;
this.waitNumber = 1; // 대기 순번은 1부터 시작함
}
// 번호표를 출력함
public void printwaitNumber() {
System.out.println("대기 순번 " + waitNumber);
waitNumber++;
}
// 출력 : 대기 순번 1 -> 대기 순번 2 -> 대기 순번 3 -> ...
}
static 메서드 (클래스 메서드, 정적 메서드)
// 구현
[접근제어자] static 자료형 메서드명(자료형 매개변수) {
코드;
}
- 객체가 생성되기 이전 (new 키워드 이전), 처음 프로그램이 메모리에 로딩될 때 메모리를 할당 받음
→ 객체 생성과 관계 없이 해당 메서드를 호출할 수 있음
→ 참조변수 대신, 클래스 이름으로 직접 호출 가능 : 클래스명.메서드명(매개변수);
- static 메서드 안에서는 (static이 아닌) 멤버변수를 활용할 수 없음
: 객체가 메모리에 로드된 상태라고 보장할 수 없기 때문임
- 지역변수는 사용 가능함
320x100
반응형
'Java > Base' 카테고리의 다른 글
[Java] 상속 관계와 메서드 오버라이드 (0) | 2023.02.09 |
---|---|
[Java] 배열 (0) | 2023.02.09 |
[Java] this 키워드와 super 키워드 (0) | 2023.02.08 |
[Java] 배열 - 도서 정보 등록·조회·삭제 프로그램 구현 (0) | 2023.02.08 |
[Java] 접근 제어 지시자와 get(), set() 메서드 (0) | 2023.02.07 |