▶ 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;
}
}
[도식화 이해]
728x90
'Java > [국비] JAVA' 카테고리의 다른 글
[국비][JAVA] 불변 객체 String의 동일성/동등성 (0) | 2024.06.03 |
---|---|
[국비][JAVA] 상속과 다형성 이해 예시 (2) | 2024.06.02 |
[국비][JAVA] this 이해하기 (0) | 2024.05.30 |
[국비][JAVA] Class, Object이해_심화 예시 (0) | 2024.05.29 |
[국비][JAVA] Class, Object이해 (0) | 2024.05.29 |