static 메서드2
<aside> 🎊
설명
사용법
코드 설명
<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 포함하여 모든 변수와 메소드와 접근 가능
</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>