처음부터 차근차근

static 자료형과 메모리 영역 본문

프로그래밍/JAVA

static 자료형과 메모리 영역

_soyoung 2022. 7. 31. 00:28
반응형

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

 

반응형
Comments