class Person {
private String name;
public Person(String val) {
name = val;
}
public static String get() {
return name; // 오류 발생 위치
}
public void print() {
System.out.println(name);
}
}
public class Test {
public static void main(String[] args) {
Person obj = new Person("Kim");
obj.print();
}
}
이 프로그램의 오류는 Person 클래스의 get() 메서드에서 발생합니다. 문제의 원인은 다음과 같습니다:
1. 오류 발생 라인: return name;
• get() 메서드는 static으로 선언되었지만, name 변수는 static이 아닙니다.
• static 메서드는 클래스 레벨에서 호출되므로, 클래스 인스턴스 변수에 접근할 수 없습니다.
• name 변수는 static 키워드가 없기 때문에 인스턴스 변수로 간주되어 클래스의 객체가 생성된 후에 접근할 수 있는 변수입니다.
• 따라서 static 메서드에서 인스턴스 변수에 직접 접근하려고 하면 컴파일 오류가 발생합니다.
해결 방법
해결 방법은 두 가지가 있습니다:
1. get() 메서드에서 static 키워드를 제거하여 인스턴스 메서드로 만듭니다.
public String get() {
return name;
}
이렇게 하면 인스턴스 메서드가 인스턴스 변수인 name에 접근할 수 있습니다.
2. name 변수를 static으로 선언하여 클래스 레벨에서 접근할 수 있도록 수정합니다.
private static String name;
이 경우, static 메서드에서 static 변수에 접근할 수 있으므로 오류가 해결됩니다.
'전산 관련 시험 > 프로그래밍(C, JAVA, Python)' 카테고리의 다른 글
[C] 프로그래밍 언어(23.02 02) (2) | 2024.10.06 |
---|---|
[C] 프로그래밍 언어(23.2 01) (1) | 2024.10.06 |
[C] 프로그래밍 언어(23.3 09) (1) | 2024.10.05 |
[C] C언어 구조 이해 (0) | 2024.10.05 |
[C] 프로그래밍 언어 (23.3 04) (0) | 2024.10.05 |
댓글