static 메서드2


<aside> 🎊

설명


사용법


  1. static메서드는 static만 사용 가능
  2. 반대로 모든 곳에서 static을 호출 가능

코드 설명


<aside> 🎯

설명


package static1;

public class DecoData {
    private int instanceValue;
    private static int staticValue;

    public static void staticCall() {
        staticValue++;
        instanceValue++; //접근 불가

        staticMethod();
        instanceMethod(); //접근 불가
    }

    //모두 접근 가능
    public void instanceCall() {
        staticValue++;
        instanceValue++;

        staticMethod();
        instanceMethod();
    }

    private void instanceMethod() {

    }

    private static void staticMethod() {

    }
}

코드를 살펴보면 static 메소드에는 static 변수와 static 메소드만 접근 가능
반대로 public 메소드에는 static 포함하여 모든 변수와 메소드와 접근 가능

DecoData.java

</aside>

<aside> 🎯

package static1;

public class staticCall {

    public static void main(String[] args) {
        System.out.println("1. 정적 호출");
        DecoData.staticCall();

        System.out.println("2. 인스턴스 호출1");
        DecoData data1 = new DecoData();
        data1.instanceCall();

        System.out.println("3. 인스턴스 호출2");
        DecoData data2 = new DecoData();
        data2.instanceCall();

        DecoData.staticCall(data1);
        
    }
}
-----------------------------------------------------
package static1;

public class DecoData {
    private int instanceValue;
    private static int staticValue;

    public static void staticCall() {
        staticValue++;
        //instanceValue++; //접근 불가

        staticMethod();
        //instanceMethod(); //접근 불가
    }
    public static void staticCall(DecoData data) {
        data.instanceValue++;
        data.instanceMethod();;
    }

하지만 해당 코드에서
public static void staticCall로 정적 메소드지만 위 코드보면 외부에서
DecoData.staticCall(data1);로 data1의 주소값을 참조해서 가져오기 때문에
static에서 static이 아닌 메서드나 변수 동작이 당연히 가능해짐

</aside>