처음부터 차근차근
static 자료형과 메모리 영역 본문
static
= 정적인, 고정된
static은 클래스 객체 생성없이 class이름만으로 바로 가져다 사용할 수 있게하는 키워드이다.
싱글톤 패턴에서는 static을 사용하여 인스턴스를 하나만 생성해 메모리 공간을 효율적으로 사용한다.
static 키워드를 사용한 변수, 메소드, 클래스를 만들 수 있다.
public static int myNum = 1; // static변수 또는 정적필드
public static void run(int second) { // static메소드 또는 정적메소드
}
static 메소드, 변수 예제
class Cat{
static String name = "lala";
static void cry() { // 클래스 메소드
System.out.println("야옹");
}
void run() { // 인스턴스 메소드
System.out.println("우다다");
}
}
public class Static_ex {
public static void main(String[] args) {
Cat.cry(); // 인스턴스를 생성하지 않아도 호출 가능
Cat kitty = new Cat(); // 인스턴스 생성
kitty.run(); // 인스턴스를 생성해야만 호출 가능
}
}
static의 특징
static 메소드와 변수들은 클래스를 로딩해서 메모리 영역에 적재할 때 따로 관리가 된다.
static 메모리 영역에 할당된다는 뜻이다.
static 메모리 영역은 컴파일할 때 할당되기 때문에 프로그램이 종료할 때 까지 고정된 공간을 차지하고, 런타임 중 변경할 수 없다.
즉, 메모리에 딱 한 번 할당되고, 프로그램이 종료할 때 해제된다.
그래서 static영역에 있는 멤버들은 프로그램이 종료될 때까지 메모리가 할당된 상태로 상주하고 있기 때문에 너무 남발해서 사용하게 되면 성능에 악영향을 준다.
그리고, static 메소드나 변수들은 어디서든 참조할 수 있다는 장점을 가지고 있다.
static영역과 heap영역
static 영역에 주로 할당되는 것들은 class이다.
heap 영역에 할당되는 것들은 new 키워드로 생성한 클래스 객체이다.
두 영역의 차이점은 garbage collector이다.
힙 영역은 가비지 컬렉터가 쓸모가 없어진 변수나 객체들을 정리하는 등 관리를 하지만
static 영역은 가비지 컬렉터 관리 영역 밖에 존재한다.
그렇기 때문에 static 영역에 있는 변수와 메소드가 프로그램이 종료될 때 까지 할당된 채로 존재할 수 있는 것이다.
참고 : https://coding-factory.tistory.com/524
[Java] 자바 static의 의미와 사용법
정적(Static)이란? 정적(static)은 고정된이란 의미를 가지고 있습니다. Static이라는 키워드를 사용하여 Static변수와 Static메소드를 만들 수 있는데 다른말로 정적필드와 정적 메소드라고도 하며 이
coding-factory.tistory.com
'프로그래밍 > JAVA' 카테고리의 다른 글
문자열 합 성능 비교 (0) | 2022.09.05 |
---|---|
자바 지역변수 자동 초기화에 대하여 (0) | 2022.09.02 |
String 초기화 : 리터럴 방식과 new 방식의 차이 (0) | 2022.05.01 |