[Java] static 키워드

2020. 4. 18. 20:10Programming Languages/Java

※ 이 글은 공부한 내용을 정리한 글입니다.

 

static 멤버 - 동일한 클래스의 모든 객체들에 의해 공유되는 멤버이다. 멤버는 클래스당 하나가 생성되어 클래스 멤버라고도 부른다. static 멤버는 객체 내부가 아닌 별도의 공간(클래스 코드가 적재되는 메모리)에 생성된다. 그리고 클래스 로딩 시에 멤버가 생성된다. 객체가 생기기 전에 이미 생성되어 있으며, 객체가 생기기 전에도 사용이 가능하다. 또한 객체가 사라져도 멤버는 사라지지 않으며, 멤버는 프로그램이 종료될 때 사라진다.

  non-static 멤버 static 멤버
선언

class Sample {

    int n;

    void g() {...}

}

class Sample {

    static int m;

    static void g() {...}

}

공간적 특성

멤버는 객체마다 별도로 존재

- 인스턴스 멤버라고 부름

멤버는 클래스당 하나 생성

- 멤버는 객체 내부가 아닌 별도의 공간(클래스 코드가 적재되는 메모리)에 생성

- 클래스 멤버라고 부름

시간적 특성

객체 생성 시에 멤버 생성됨

- 객체가 생길 때 멤버도 생성됨

- 객체 생성 후 멤버 사용 가능

- 객체가 사라지면 멤버도 사라짐

클래스 로딩 시에 멤버 생성

- 객체가 생기기 전에 이미 생성됨

- 객체가 생기기 전에도 사용 가능

- 객체가 사라져도 멤버는 사라지지 않음

- 멤버는 프로그램이 종료될 때 사라짐

공유의 특성

공유되지 않음

- 멤버는 객체 내에 각각 공간 유지

동일한 클래스의 모든 객체들에 의해 공유됨

static 멤버는 해당 클래스의 객체를 생성하여 활용하는 방법과 클래스명.멤버로 바로 활용하는 방법이 있다.

 

static의 활용법

- 전역 변수와 전역 함수를 만들 떄 활용

    자바에서는 어떤 변수나 함수도 클래스 바깥이 존재할 수 없으며 클래스의 멤버로 존재해야 한다.(캡슐화 원칙)

    응용프로그램 생성 시 모든 클래스에서 공유하는 전역 변수나 모든 클래스에서 호출할 수 있는 전역 함수가 필요한 경우 static은 이런 문제를 해결할 수 있다. static 멤버를 가진 대표적인 클래스로 java.lang.Math 클래스가 있다.

 

- 공유 멤버를 만들고자 할 떄 활용

    static으로 선언된 필드나 메소드는 하나만 생성되어 클래스의 객체들 사이에서 공유된다.

 

static 메소드의 제약 조건

- static 메소드는 static 멤버만 접근할 수 있다.

    static 메소드는 객체 없이도 존재하기 때문에 객체와 함께 생성되는 non-static 멤버를 사용할 수 없고 static 멤버들만 사용 가능하다. but non-static 메소드는 static 멤버들을 사용할 수 있다.

    > static 메소드는 non-static 필드 혹은 non-static 메소드를 사용할 수 없다.

- static 메소드는 this를 사용할 수 없다.

    static 메소드는 객체 없이도 존재하기 때문에 this를 사용할 수 없다.

'Programming Languages > Java' 카테고리의 다른 글

[Java] 상속(extends)  (0) 2020.04.21
[Java] final 키워드  (0) 2020.04.18
[Java] 접근 지정자  (0) 2020.04.18
[Java] 객체의 소멸과 가비지 컬렉션  (0) 2020.04.14
[Java] 메소드 오버로딩  (0) 2020.04.14