static 변수

로로·2023년 8월 20일

🔵 static 변수 선언

static int serialNum;
static int serialNum = 10000;
  • 여러 개의 인스턴스가 같은 메모리의 값을 공유하기 위해 사용

🔵 static 변수 생성

프로그램이 메모리에 load 될때 데이터 영역 메모리에 생성됨 ex) 상수, 리터럴, static

System.out.println(staticStudent1.getSerialNum());

// static 변수는 인스턴스보다는 클래스로 직접 참조
System.out.println(StaticStudent.getSerialNum());

👉🏻 인스턴스의 생성과는 관계없이 클래스의 이름으로 직접 참조


public class StaticStudent {

    // static int serialNum = 10000;
    // 외부에서 변경을 막기 위해서 private 로 선언
    private static int serialNum = 10000;
    int studentId;
    int studentName;


    // 자동으로 학생 id를 1씩 증가시켜서 채번
    public StaticStudent(){
    
        // 같이 공유 되어서 증가될 것이며
        serialNum ++;

        // 각 인스턴스는 각각의 id를 할당받아 사용
        studentId = serialNum;
    }
    ...

🔵 지역 변수 vs 멤버 변수 vs static 변수

데이터 영역 : static, 리터럴, 상수
스택 메모리 : 지역 변수
힙 메모리 : 인스턴스가 생성될때 마다 사용

public class StaticStudent {
	...
    
    public static int getSerialNum(){
    
        // 지역 변수 O -> 메서드 호출 시 생성 ~ 호출 시 종료
        int i = 0;
        i ++;
        System.out.println(i);

        // 인스턴스(멤버) 변수 X -> 인스턴스 생성되었을때
        // 인스턴스 변수는 꼭 인스턴스가 생성되어야 하므로
        // static 메서드에서는 생성이 불확실한 인스턴스 변수 사용 불가능 
        
        // studentName = "로로";

        return serialNum; // static 변수, 클래스 변수
    }
}

profile
청로하~🏝️

0개의 댓글