클래스메소드와 인스턴스 메소드의 관계
1.인스턴스 메소드는 클래스 맴버(변수,메소드)에 접근 할 수 있다.
2.클래스 메소드는 인스턴스 맴버(변수,메소드)에 접근 할 수 없다.
▼아래의 예제를 하나하나 실행해보면서 적용해보면 이해가 갑니다.
class C1{
static int static_variable = 1;
int instance_variable =2 ;
static void static_static() {
System.out.println(static_variable);
}
static void static_instance() {
//클래스 메소드에서는 인스턴스 변수에 접근할 수 없다.
//System.out.println(instance_variable);
}
void instance_static() {
//인스턴스 메소드에서는 클래스 변수에 접근 할 수 있다.
System.out.println(static_variable);
}
void instance_instance() {
System.out.println(instance_variable);
}
}
public class exercise{
public static void main(String[] args) {
C1 c = new C1();
//인스턴스를 이용해 정적 메소드에 접근 -> 성공
//인스턴스 메소드가 정적 변수에 접근 -> 성공
c.static_static();
//인스턴스를 이용해 정적 메소드에 접근 -> 성공
//정적 메소드가 인스턴스 변수에 접근 -> 실패
c.static_instance();
//인스턴스를 이용해서 인스턴스 메소드에 접근 -> 성공
//인스턴스 메소드가 클래스 변수에 접근 -> 성공
c.instance_static();
//클래스를 이용해서 클래스 메소드에 접근 -> 성공
//클래스 메소드가 클래스 변수에 접근 -> 성공
C1.static_static();
//클래스를 이용해서 클래스 메소드에 접근 -> 성공
//클래스 메소드를 이용해서 인스턴스 변수에 접근 -> 실패
C1.static_instance();
//클래스를 이용해서 인스턴스 메소드에 접근 -> 실패
C1.instance_instance();
}
}
한편,
static void static_instance() {
//클래스 메소드에서는 인스턴스 변수에 접근할 수 없다.
System.out.println(instance_variable);
}
▲이부분을 활성화시키고 코드를 돌리면
이런 오류가 뜹니다. 이는 말그대로 static(class)에서 non-static 을 참조할 수 없다는 뜻입니다.
용어정리
인스턴스 변수 -> Non-Static Field
클래스 변수 -> Static Field
C1.instance_instance();
▲이부분의 코드를 실행시키면
이러한 에러가 발생합니다. 이는 위와 같은 이유로 오류가 발생하는 것입니다.
즉 결론적으로
클래스 메소드는 인스턴스 맴버(변수,메소드)에 접근 할 수 없기 때문에 오류가 발생하는 것입니다.
'프로그래밍 언어 > Java' 카테고리의 다른 글
다른 컴퓨터에서 pull/push할 때 오류 (0) | 2021.10.17 |
---|---|
Android java activity 추가했는데 어플 팅기는 문제 (AndroidManifest.xml) (0) | 2021.10.16 |
java Could not find or load main class src 에러 해결 (0) | 2021.10.14 |
java 2강 class 내의 method (0) | 2021.10.13 |
Android setHeight error 해결방법 (java에서 xml height 속성 변경하기) (0) | 2021.10.11 |