카테고리 없음

static(3) - 주의사항

jjhim531 2024. 8. 8. 16:33
반응형

* static 메서드는 static만 사용할 수 있다.

- 클래스 내부의 기능을 사용할 때 정적 메서드는 static이 붙은 정적 메서드 정적 변수만 사용할 수 있다. 

- 클래스 내부의 기능을 사용할 때, 정적 메서드는 인스턴스 변수나, 인스턴스 메서드를 사용할 수 없다

 

* 반대로 모든 곳에서 static을 호출할 수 있다.

- 정적 메서드는 공용기능이다. 따라서 접근 제어자만 허라한다면 클래스를 통해 모든곳에서 static을 호출할 수 있다.

package static2;

public class DecoData {

   private int instanceValue;
   private static int staticValue;
   
   public static void staticCall() {
   //instanceValue++; //인스턴스 변수 접근, compile error
   //instanceMethod(); //인스턴스 메서드 접근, compile error
   staticValue++; //정적 변수 접근
   staticMethod(); //정적 메서드 접근
 }
 
 public void instanceCall() {
    instanceValue++; //인스턴스 변수 접근
    instanceMethod(); //인스턴스 메서드 접근
    
    staticValue++; //정적 변수 접근
    staticMethod(); //정적 메서드 접근
 }
 
 private void instanceMethod() {
    System.out.println("instanceValue=" + instanceValue);
 }
 
 private static void staticMethod() {
    System.out.println("staticValue=" + staticValue);
 }
}

결과 

1.정적 호출
staticValue=1
2.인스턴스 호출1
instanceValue=1
staticValue=2
3.인스턴스 호출2
instanceValue=1
staticValue=3

<주의>

객체의 참조값을 직접 매개변수로 전달하면 정적 메서드도 인스턴스의 변수나 메 서드를 호출할 수 있다.

public static void staticCall(DecoData data) {
   data.instanceValue++;
   data.instanceMethod();
}
728x90
반응형