반응형

클래스 변수란?

클래스 내에 선언된 변수앞에 static 선언이 된 변수이다.

'인스턴스 변수의 생성과 상관없이 존재하는 변수'다.

 -> 클래스 변수는 인스턴스 생성 이전에 메모리 공간에 존재한다.

 

1. 이말은 static으로 선언된 변수는 변수가 선언된 클래스의 모든 인스턴스가 공유할 수 있다는 것을 의미한다.

2. 또한  접근 수준 지시자 public을 사용하여 public static으로 선언할시 어디서든 접근이 가능하다.

 

선언된 변수가 있는 클래스 내부에서 접근시  -> 변수의 이름을 통해 직접 접근

선언된 변수가 있는 클래스가 아닌 다른 외부클래스에서 접근시  -> 클래스 또는 인스턴스의 이름을 통해 접근

 

클래스 메소드란?

클래스 내에 정의된 메소드앞에 static 선언이 된 메소드이다.

클래스 변수와 성격이 유사하다. 즉,

 

'인스턴스 생성과 상관없이 존재하는 메소드'다.

 -> 클래스 메소드는 인스턴스 생성 이전에 메모리 공간에 존재한다.

 -> 클래스이름.static이 선언된메소스(); 를 통해서 인스턴스 생성없이 바로 호출할 수 있다.

ex) Example.saveInt(3);

 

클래스 메소드가 유용한 경우

인스턴스 변수의 값을 참조 및 수정이 필요없는 경우.

외부에 기능만을 제공하기위한 메소드인 경우.

- 한마디로 추가 변경이 필요없이 고정된 기능만을 수행할 경우이다.

 

클래스 메소드에서 인스턴스 변수에 접근이 가능할까? 답은 NO

 

메모리공간에는 클래스 메소드는 인스턴스 생성이전부터 호출가능하지만 인스턴스 변수는 인스턴스를 생성 해주어야 한다. 접근하려면 인스턴스 변수를 클래스 변수로 바꿔주어야 한다.

 

static 초기화 블록으로서의 사용

static{

  내용

}

이렇게 static블록으로 묶어주면 클래스 로딩시 자동으로 실행이되며 변수의 초기화를 내용부분에 넣게되면 클래스변수를 선언과 동시에 초기화 할수 있다

반응형

+ Recent posts