반응형
class Foo {
public static String classVar = "I class var"; // 정상
public String instanceVar = "I instance var"; // Error
}
public class StaticApp {
public static void main(String[] args) {
System.out.println(Foo.classVar); // 정상
System.out.println(Foo.instanceVar); // Error
}
}
클래스를 통해서 클래스 변수에 접근이 가능하지만,
인스턴스는 인스턴스를 통해 사용해야하므로 에러가 발생한다.
다음은 static 메소드와 instance 메소드를 만드는 예시이다.
static을 사용하면 객체를 생성해주지 않아도 다른 클래스에서 사용할 수 있다.
class Foo {
public static String classVar = "I class var";
public String instanceVar = "I instance var";
public static void classMethod() {
System.out.println(classVar); // OK
System.out.println(instanceVar); // Error
}
public void instanceMethod() {
System.out.println(classVar); // OK
System.out.println(instanceVar); // OK
}
}
주석에 결과가 나와 있는 그대로
classMethod 내에서 instanceVar(인스턴스 변수)는 에러가 발생하지만,
instanceMethod 내에서는 둘 다 정상 작동한다.
public static String classVar = "I class var"; 에서는 static 이 있지만
public String instanceVar = "I instance var"; 에선 static 이 없다.
static 이 있는 classMethod 안에서는 { static이 없는 Instance 변수 }는 접근할 수 없다.
반면에 public void 는 에러가 나지 않고 접근 가능하다는 것을 볼 수 있다.
void는 리턴 값이 없다는 것을 의미한다.
StaticApp 클래스에서 Foo 클래스의 메소드를 호출려고 하는데 classMethod() 만 호출 가능하다.
Foo.instanceMethod() 는 class를 통해서 접근이 불가하기 때문에 객체를 새로 생성해야만 한다.
instanceVar(인스턴스 변수)와 instanceMethod(인스턴스 메소드)에 접근이 금지되어 있다.
Static이 있을 경우 Class 소속이고 없는 경우는 Instance 소속이다.
반응형
'활동 > 호기심' 카테고리의 다른 글
Integer은 어떨 때 사용하는가 (내가 봐도 정리 깔끔) (0) | 2023.09.01 |
---|---|
for문과 foreach문은 어떨 때 쓰면 좋을까 (0) | 2023.09.01 |
클래스(class), 객체(object), 인스턴스(instance) 차이점 비교 (0) | 2023.08.28 |
자바 for문을 이용한 '공포의 별 찍기 문제' (0) | 2023.08.25 |
While문과 for문의 차이점 (+코드를 간결하게 만들어주는 람다 표현식 설명도 한 스푼) (0) | 2023.08.24 |