본문 바로가기

JAVA

자바 기초(Static)

1. 정적(Static)이란?

- static 이란 '정적인' 이라는 의미를 갖고 있다. 자바에서는 클래스에 고정된 멤버이다. (그래서 클래스 멤버라고도 부름)

- static 멤버들은 클래스에 고정된 멤버이기 때문에 클래스 로더가 클래스를 로딩하면 메모리에 할당 시켜준다. (클래스 로딩이 끝나면 바로 사용할 수 있다는 의미임)

 

 

2. 왜 static을 사용할까?

- static은 전역적으로 쉽게 재사용하는 멤버나 잘 변하지 않는 변수 혹은 메소드를 사용할 때 주로 사용된다. 만들어 놓고 클래스 호출, 객체 생성을 따로 할 필요없이 바로바로 사용할 수 있기 때문에 편리하다.

 

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

 

 

3. static 사용 예시

1) 기본 사용 예시

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

 

 

2) 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은 메모리에 선언이 되어 있지만, 그렇지 않은 인스턴스는 객체를 생성할 때마다 메모리를 할당하기 때문임

 

 

3) 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 메소드를 생성하면 인스턴스 생성 없이 바로 호출이 가능하다.

'JAVA' 카테고리의 다른 글

자바 기초(상속_다형성)  (0) 2022.02.21
자바 기초(상속)  (0) 2022.02.21
자바스크립트 기초(내장 객체)  (0) 2022.02.18
자바 기초(배열)  (0) 2022.02.18
자바 기초(Data Type, Class)  (0) 2022.02.17