Java/[국비] JAVA

[국비][JAVA] 그 외 제어자(지정자) Static 이해 및 클래스 영역/스택영역/힙영역 이해

줌인. 2024. 6. 1. 22:41

▶ static 변수 및 메서드의 이해

https://zoooom-in.tistory.com/58

 

[김영한_자바기본][7. 자바 메모리 구조와 static] static 변수 및 메서드 이해 (p.15-31)

객체 인스턴스가 필요한 이유는 멤버 변수(인스턴스)변수를 사용하기 위함 static(정적 변수/클래스 변수)는 공통으로 사용되며, static변수/메서드는 클래스 자체에 접근해 사용 그러나 클래스 stat

zoooom-in.tistory.com

 

▶ 자바 메모리 구조와 static

https://zoooom-in.tistory.com/57

 

[김영한_자바기본][7. 자바 메모리 구조와 static] 자바 메모리 구조 이해 / 스택과 큐 자료 구조(p.1-

메서드 영역: 프로그램의 클래스 정보와 정적 변수를 저장하는 공간힙 영역: 동적으로 생성되는 객체들을 저장하는 공간스택 영역: 메서드 호출 및 파라미터를 임시로 저장하는 공간**메인 메서

zoooom-in.tistory.com

 

 

static으로 정의된 변수나 메서드는 클래스 로딩 시점에 메서드 영역에 생성되며,
인스턴스(객체)를 생성하지 않아도 접근할 수 있음
단, static(정적) 변수/메서드는 클래스에 하나만 존재


[자료 구조]

실행 순서
1 메서드 영역
2 스택 영역
3 힙 영역(동적)

 

소멸 순서
1 스택 영역
2 힙 영역(동적) 
3 메서드 영역

 

 

[코드 예시_Main]

public class S4Main {//메서드 영역은 프로그램 시작과 종료에 실행됨

    public static void main(String[] args) {
        //String company 접근을 위해서 Car 클래스의 정적 변수 company에 값을 할당합니다.
        Car.company = "기아"; // 설계도 자체에 값을 주는 것으로, 모든 인스턴스에서 동일한 값을 갖게 됩니다.
        System.out.println(Car.company);

        Car.info(); //설계도 자체 기능 확인 : Car 클래스의 정적 메서드 info를 호출합니다.

    }
}

 

[코드 예시_Car]

public class Car {
    //메서드영역은 우리가 사용할 클래스를 로딩하고, company멤버변수가 생성된 후 main을 읽고, 스텍에 전달한다.
    public static String company;
    public final int price = 30; //final은 상수에 주로 사용

    //멤버 메서드
    public static void info() {//static 메서드
        System.out.println(Car.company); //static 변수 접근 가능
        //System.out.println(this.company); //static은 this 생성 불가 -> 힙영역 생성 보장X
        //System.out.println(Car.price); --> 인스턴스 변수에 접근 불가 -> 힙영역 생성 보장X
    }

    public void info2() {
        Car.info(); //static 메서드 접근 가능 : static은 프로그램 시작 전부터 만들어졌기에 사용 가능
        System.out.println(Car.company); //static 변수 접근 가능
        final int num = 30;
    }
}

 

 

[도식화 이해] 

static은 객체를 생성하지 않고, 클래스 자체로 접근이 가능

728x90