일단 이것저것 해 보는 블로그

(Do it! 자바, 4주차-3) getClass() 메서드 오류에 대해: non-static method getClass() cannot be referenced from a static context 본문

2026/Do it Java 스터디(2026.01.~02.)

(Do it! 자바, 4주차-3) getClass() 메서드 오류에 대해: non-static method getClass() cannot be referenced from a static context

뷔구룽 2026. 1. 28. 18:07

사용한 학습 자료: 박은종, 2025, <Do it! 자바 프로그래밍 입문 [개정판]>, 이지스퍼블리싱.

https://ebook-product.kyobobook.co.kr/dig/epd/ebook/E000010942415

 

Do it! 자바 프로그래밍 입문 [개정판] | 박은종 저자

eBook Do it! 자바 프로그래밍 입문 [개정판] | 3만 6천 부 이상 팔린 초판의 성공에 힘입어 좀 더 입문자의 눈높이에 맞춰 내용을 수정하고 최신 개발 트렌드에 맞게 개정판을 출간했습니다. 저자인

ebook-product.kyobobook.co.kr

 

상황

학습 자료 11강 실습 중 Object 클래스의 getClass() 메서드를 사용해 보았다.

자바에서 기본 제공하는 String 클래스의 정보를 가져오는 예제 실습 중, 코드를 아래와 같이 살짝 바꿔봤다.

public static void main(String[ ] args) {
	Class strClass = String.getClass( ); // String 클래스 정보 가져오기
}

 

다만 위 코드를 실행하면 아래 메시지를 출력하며 오류가 발생한다.

java: non-static method getClass() cannot be referenced from a static context

 

String 클래스 정보를 가져오는 다른 방법들은 문제 없이 출력되는데 왜 getClass() 메서드 사용할 때만 이런 오류가 발생할까?

원인 분석

Javadoc과 구글링을 통해 getClass() 메서드의 특징을 좀 더 알아보니 원인을 어느 정도 짐작해볼 수 있었다.

간단히 정리하면 아래와 같다.

 

1) getClass()는 '객체'의 클래스 정보를 반환하는 메서드라고 함.

2) 즉 어떤 클래스의 정보를 getClass()로 가져오려면, 반드시 해당 클래스를 인스턴스(객체)로 생성해야 함.

public static void main(String[ ] args) {
	Class strClass = String.getClass( ); // String 클래스 정보 가져오기
}

위 코드에서,

String 클래스를 먼저 인스턴스화하지 않았기 때문에

getClass()가 가져올 객체가 없어 오류가 발생했음을 짐작할 수 있다!

(혹시 좀 더 자세히 설명해주실 수 있는 분은 언제든 댓글 환영합니다 ㅎㅎ)

 

문제 해결

코드를 아래와 같이 수정해 문제를 해결했다.

public static void main(String[ ] args) {	
	// Class strClass = String.getClass( ); // 기존 코드, 오류 방생
	String str = new String();
        Class strClass = str.getClass(); // String 클래스를 객체(인스턴스)로 만들고 getClass()로 정보 가져오기
}

-> 먼저 String 클래스의 생성자로 인스턴스를 생성해 String 클래스 자료형 변수 str에 대입한 뒤,

str(생성한 객체)에서 getClass()를 사용해 클래스의 정보를 가져올 수 있다.

 

결론

 

자바 프로그래밍에서 기본이 되는 객체(인스턴스)와, 최상위인 Object 클래스에서 기본 제공하는 String 클래스에 대한 이해가 꽤 필요했던 과정이었다. 특히 getClass()가 실제로 생성된 객체를 필요로 한다는 점.

 

참고자료

 

Almost-Native, 자바 에러 : non-static method cannot be referenced from a static context,
https://almost-native.tistory.com/368 (260128 최종접속)

Javadoc, getClass,
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/lang/Object.html#getClass() (260128 최종접속)

John Squirrels, Java 객체 getClass() 메소드란 무엇입니까?
https://codegym.cc/ko/groups/posts/ko.627.java--getclass- (260128 최종접속)