certification/정보처리기사
[2023년 3회] JAVA 오류 발생 라인
gaing
2025. 4. 9. 21:23
📌 문제
다음은 오류가 발생하는 JAVA 프로그램이다. 프로그램을 분석하여 오류가 발생하는 라인을 쓰시오.
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();
}
}
☑️ 정답
7번째 라인
return name; // 컴파일 오류: non-static variable name cannot be referenced from a static context
📝 풀이 - 오류 발생 라인
public static String get() {
return name; // 오류 발생
}
- static 메서드 안에서 name이라는 변수를 사용하려고 하자 컴파일 오류가 발생한다.
- static 메서드: 객체가 없어도 호출할 수 있는 공용 메서드이다.
- name: 인스턴스 변수로, 객체가 생성되어야만 접근할 수 있다.
- 아직 객체가 만들어지지도 않았는데 그 객체 안에 있는 name이라는 값을 쓰려고 하니까 오류가 발생하는 것이다.
📝 풀이 - 해결 방법
public String get() { // static 제거
return name;
}
- static을 제거하고 name 변수에 접근하려면 객체를 통해 메서드 호출해야 한다.
Person p = new Person("Kim"); // 객체 생성
System.out.println(p.get()); // "Kim" 출력
- get() 메서드를 인스턴스 메서드로 변경하면 이제 객체를 생성한 후 get() 메서드를 호출할 수 있다.
✏️ 개념 정리 메모
- static 메서드와 인스턴스 변수의 차이
- static은 클래스 수준에서 공유되는 멤버로, 객체를 만들지 않고 클래스명으로 직접 접근할 수 있다.
- 반면, 인스턴스 변수는 객체가 생성되어야만 존재하고 객체마다 각기 다른 값을 가질 수 있다.
- static 메서드는 객체 없이 호출되기 때문에 인스턴스 변수에 접근할 수 없으며 객체를 통해서만 접근이 가능하다.
- static 메서드에서 this 키워드 사용 불가
- static 메서드가 객체 없이 호출될 수 있기 때문에 this 키워드를 사용할 수 없다.
- this는 현재 객체를 참조하는 키워드로, 객체가 존재해야 사용할 수 있다.
- static 메서드는 객체와 관련 없이 클래스 자체에서 호출되므로 this를 사용할 수 없다.