Java

chapter 10 클래스 변수와 클래스 메소드

보리콩 2022. 1. 26. 19:30

클래스 변수

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

- static으로 선언된 변수는 변수가 선언된 클래스의 모든 인스턴스가 공유하는 변수

 

클래스 변수의 접근 방법

클래스 내부 접근 - 변수의 이름을 통해 직접 접근

클래스 외부 접근 - 클래스 또는 인스턴스의 이름을 통해 접근

 

클래스 변수의 초기화 시점과 초기화 방법

클래스 변수는 인스턴스 생성 이전에 메모리 공간에 존재한다. 즉, 클래스 정보가 가상머신에 의해 읽히는 순간 메모리 공간에 할당되고 초기화된다. 따라서 생성자를 통한 클래스 변수의 초기화를 진행하지 않도록 주의해야 한다.

 

클래스 변수는 인스턴스 간에 데이터 공유가 필요한 상황에서 활용할 수 있다.

 

클래스 메소드

- static선언을 하면 클래스 메소드가 된다.

- 클래스 변수와 성격이 유사하며 인스턴스 생성 이전부터 접근이 가능하고 어느 인스턴스에도 속하지 않는다.

- 접근 방법도 클래스 변수와 같다.

 

클래스 메소드는 외부에 기능을 제공하기 위한 메소드이거나 인스턴스 변수의 값을 참조하거나 수정하지 않는 경우 활용할 수 있다.

 

클래스 메소드에서는 인스턴스 변수에 접근이 불가능하다.(인스턴스에 속하지 않으므로)

마찬가지로 인스턴스 메소드의 호출도 불가능하다.

 

 

main 메소드

main 메소드는 다음과 같이 정의한다.

public static void main(String[] args) {
	...
}

main 메소드의 호출이 이뤄지는 영역은 클래스 외부이므로 public으로 선언해야 한다. 또 main 메소드는 인스턴스가 생성되기 전에 호출되므로 static으로 선언해야 한다.

 

일반적으로 main 메소드를 담기 위한 별도의 클래스를 정의해준다. 하지만 상황에 따라 다른 클래스에 포함시킬 수도 있다.

 

 

static 초기화 블록

클래스 변수와 마찬가지로 가상머신이 클래스의 정보를 읽어 들일 때 한 번 실행이 된다. 따라서 static 초기화 블록을 사용해 클래스 변수를 선언과 동시에 초기화 할 수 있다.

class Test {
	static String date;
    
    static {		// 클래스 로딩 시 단 한번 실행이 되는 영역
    	LocalDate nDate = LocalDate.now();
        date = nDate.toString();
    }
}

 

 

static import 선언

import static java.lang.Math.PI;	// PI에 대한 static import 선언
import static java.lang.Math.*		// 모든 클래스 변수와 메소드에 대한 import 선언