[JAVA]정적 멤버

2023. 2. 28. 18:50카테고리 없음

자바에서는 객체를 통하지 않고 사용할 수 있는 멤버를 생성하는 것이 가능합니다.

멤버가 모든 객체를 통틀어 하나만 생성되고 모든 객체가 이것을 공유하게 되는 것이죠

이러한 멤버를 정적멤버(클래스멤버)라고 합니다.

멤버를 정의할 때 앞에 static을 붙이면 정적 멤버가 되는 것입니다.

 

클래스의 멤버는 인스턴스 멤버와 정적 멤버로 나누어집니다.

인스턴스 변수는 인스턴스마다 멤버가 별로도 생성이 됩니다.

하지만 경우에 따라 모든 객체에 공통인 변수가 필요한 경우가 있습니다.

이것이 정적변수입니다.

 

 

정적 변수는 인스턴스를 생성하지 않아도 사용이 가능하며

객체를 생성하지 않고서도 사용할 수 있기에 자바에서의 전역 변수나 마찬가지입니다.

 

외부에서 정적 멤버를 사용하려면 단순히 클래스 이름 뒤에 멤버 연산자(.)를 붙이면 됩니다.

<형식>

클래스이름.변수이름

● 정적 메소드

 

변수와 마찬가지로 메소드도 정적 메소드를 만들 수 있습니다.

정적 메소드는 static 수식자를 메소드 앞에 붙이며 클래스 이름을 통하여 호출되어야 합니다.

 

<형식>

클래스이름.메소드이름(인수1, 인수2 -----)

자주 사용되는 main()메소드 앞에도 static이 붙어 있습니다.

자바 가상 기계가 객체를 생성할 필여가 없이 main() 메소드를 호출할 수 있도록 하기 위해서입니다.

 

▶정적 멤버를 사용할 시 주의할 점

 

1. 객체가 생성되지 않은 상태에서 호출되는 메소드이므로 객체 안에서만 존재하는 인스턴스 변수들은

사용할 수 없습니다. 즉 정적 변수와 지역 변수만 사용할 수 있습니다.

 

2. 정적 메소드에서 인스턴스 메소드를 호출하면 역시 오류가 됩니다.

인스턴스 메소드도 객체가 생성되어야만 사용할 수 있기 때문입니다.

 

3. 정적 메소드에서 정적 메소드를 호출하는 것은 가능합니다.

정적 메소드는 this 키워드를 사용할 수 없습니다. 그의 이유로는 this가 참조할 인스턴스가 없기 때문입니다.

 

● 정적 초기화 블록

 

정적 초기화 블록은 {} 중괄호로 감사여진 코드 블록으로 정적 변수를 초기화하는 데 사용됩니다.

 

<형식>

static {
	// 정적 변수들을 초기화한다.
    
   }

아래와 같은 형식으로 static {..... }

public class MyClass {

	static int x; //정적 변수
    int y;
    
    static {
    	x = 10;
    	System.out.println("정적 블록이 호출되었음");
        
        }
        }

정적 초기화 블록을 사용하지 않고 정적 변수를 초기화하려면 정적 메소드로 작성하면 됩니다.