본문 바로가기
Framework/SpringBoot

[Java / Trouble Shooting] Static member 'com.model.Language.PYTHON' accessed via instance reference

by newtownboy 2024. 4. 4.


[Version]
⦁ 2024.04.04 / [Java / Trouble Shooting] Static member 'com.model.Language.PYTHON' accessed via instance reference
 

Static member 'com.model.Language.PYTHON' accessed via instance reference

이 오류는 클래스의 정적 멤버를 인스턴스 참조를 통해 접근하려고 할 때 발생한다. 정적 멤버는 클래스의 인스턴스와 관련이 없으며, 클래스 자체에 속하는 멤버이다. 따라서, 정적 멤버에 접근할 때는 클래스의 이름을 사용해야 한다.

 

나의 경우, switch-case문을 통해 Enum 클래스에 정의된 변수를 비교하는 과정에서 문제를 발견하였다. 먼저 최초로 작성된 코드는 다음과 같다.

Language language = problem.getLanguage();
switch (language) {
    case language.PYTHON:
    	// PYTHON 타입일 때 실행되는 로직
        break;
    case language.JAVA:
        // JAVA 타입일 때 실행되는 로직
        break;
    default:
        break;
}
Language클래스는 Problem클래스 내에 있는 Enum으로 선언된 변수이다. 해당 클래스를 인스턴스화 한 이후 case문을 통해 language.PYTHON 또는 language.JAVA와 같이 사용을 하니 발생한 문제였다.

 

Language language = problem.getLanguage();
switch (language) {
    case PYTHON:
    	// PYTHON 타입일 때 실행되는 로직
        break;
    case JAVA:
        // JAVA 타입일 때 실행되는 로직
        break;
    default:
        break;
}

따라서 인스턴스를 사용하는 것이 아닌 정적 멤버 이름을 바로 작성하여 문제를 해결하였다.