728x90
반응형

Static 기본 개념

static은 "정적" 또는 "고정된"이라는 의미를 갖는다.

즉, static이 붙은 경우 객체가 아닌 클래스에 속하며, 해당 클래스의 모든 인스턴스가 공유한다.

이로 인해 static 멤버는 클래스 수준에서 관리됨으로 객체 생성 없이 직접 접근할 수 있다.

 

static - class method
no static - instance method

 

Static 변수

class StaticTestClass {
    static int staticVar = 10;
}

 

위 예제에 staticVar는 StaticTestClass에 속하고 모든 StaticTestClass 객체 간에 값을 공유한다.

즉, 객체 생성 없이 StaticTestClass.staticVar 와 같이 접근 가능하다.

 

Static 메서드

class MathClass {
    static int add(int a, int b) {
        return a + b;
    }
}

public class MainClass {
    public static void main(String[] args) {
        MathClass mathClass = new MathClass();
        int result = MathClass.add(8, 2);
        System.out.println(result); // 10
    }
}

 

add method는 MathClass의 static 메서드로, 객체 생성 없이 바로 사용 가능하다.

MathClass.add(8, 2) 와 같이 호출 가능하다.

 

반대로, static을 사용하지 않는 경우 instance에 메서드 이므로 아래와 같이 객체 생성이 필요하다.

 

class MathClass {
    public int a, b;
    public int add(){
    	return this.a + this.b;
    }
}

public class MainClass {
    public static void main(String[] args) {
        MathClass mathClass = new MathClass();
        mathClass.a = 8;
        mathClass.b = 2;
        int result = mathClass.add();
        System.out.println(result);  // 10
    }
}

 

주의사항

1. static 멤버는 객체에 종속되지 않으므로 객체의 상태를 변경하지 말아야 한다.

2. static 메서드 내에서 this 키워드를 사용할 수 없다. 객체 인스턴스에 접근할 수 없기 때문이다.

3. static 멤버는 클래스 로딩 시 초기화되므로 프로그램 종료 시까지 메모리에 상주하게 된다. 이로 인해 과용 시 메모리 부하가 발생할 수 있으므로 신중하게 사용해야 한다.

 


728x90
반응형