본문 바로가기
전산 관련 시험/프로그래밍(C, JAVA, Python)

[JAVA] 프로그래밍 언어(23.3 12)

by 응_비 2024. 10. 6.
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 변수에 접근할 수 있으므로 오류가 해결됩니다.

댓글