본문 바로가기
Java

[Java] static 키워드

by 스응 2023. 2. 9.
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
반응형

댓글