카테고리 없음

[java] 자바 static 란? 사용하는 이유?

삐뚤어진 개발자 2021. 3. 20.

자바 static 이란?

static 이란 정적이다 라는 의미를 갖고 있습니다. 자바에서는 클래스에 고정된 멤버입니다. (그래서 클래스 멤버라고도 부릅니다.)

static 멤버들은 클래스에 고정된 멤버입니다. 그래서 클래스 로더가 클래스를 로딩하면 메모리에 할당 시켜줍니다.

(클래스 로딩이 끝나면 바로 사용할 수 있다는 의미입니다.)

 

 

static 미국·영국 [ˈstætɪk]  영국식  중요

1. (변화움직임이 없이) 고정된
2. 정지 상태의
3. (수신기의) 잡음

 

이해하기 쉽게 정리해놓은 그림을 가져왔습니다.

출처: 코딩팩토리

 

 

 

 

* static과 반대되는 개념인 Heap 영역도 같이 이해하시면 좋을 것 같습니다.

 

 

 

static 사용 이유?

그래서 static은 전역적으로 쉽게 재사용하는 멤버나 잘 변하지 않는 변수나, 메소드를 사용할때 주로 사용됩니다.

만들어 놓고 클래스 호출, 객체 생성을 따로 할 필요없이 바로바로 사용할 수 있기 때문에 사용성이 좋습니다.

 

 

하지만 static은 메모리 자원을 할당해놓고 사용하는 것이기 때문에 너무 많이 사용한다면 메모리를 많이 차지하게 되어서 프로그램이 무거워 집니다.

 

static 사용 예시

1. 기본적으로 static 멤버는 아래와 같이 선언합니다.

//일반적인 static 멤버 선언 방법
static int num = 0; 
public static void static_method(){}

 

static 필드 사용 예시

class Number{
    static int num = 0; //클래스 필드
    int num2 = 0; //인스턴스 필드
}

public class Static_ex {
	
    public static void main(String[] args) {
    	Number number1 = new Number(); //첫번째 number
    	Number number2 = new Number(); //두번쨰 number
    	
    	number1.num++; //클래스 필드 num을 1증가시킴(static)
    	number1.num2++; //인스턴스 필드 num을 1증가시킴
        
        //두번째 number의 클래스 필드 출력 (static)
    	//출력값 1
        System.out.println(number2.num); 
    	//두번째 number의 인스턴스 필드 출력
        //출력값 0
        System.out.println(number2.num2); 
    }
}

static 출력 값은 1 static으로 선언되지 않은 인스턴스의 출력 값은 0이 나왔습니다.

static은 메모리에 선언이 되어 있지만, 그렇지 않은 인스턴스는 객체를 생성할 때마다 메모리를 할당하기 때문에 그렇습니다.

 

static 메소드 사용 예시

class Name{
    static void print() { //클래스 메소드
	System.out.println("print_test!");
    }

    void print2() { //인스턴스 메소드
	System.out.println("print_test!!!!!!!!!");
    }
}

public class Static_ {
	
    public static void main(String[] args) {
        Name.print(); //인스턴스를 생성하지 않아도 바로 호출이 가능
    	
        Name name = new Name(); //인스턴스 생성
        name.print2(); //인스턴스를 생성하여야만 호출이 가능
    }
}

static 메소드를 생성하면 인스턴스 생성 없이 바로 호출이 가능합니다.

 

 

긴글 읽어 주셔서 감사합니다.

더 궁금하신 사항은 댓글로 문의해주시면 빠르게 답변드리겠습니다.

 

 

댓글