티스토리 뷰


java

개발을 하다보면 가끔 ClassNotFoundException를 만날수 있는데 어떤 상황에서 ClassNotFoundException가 발생하는지 정리해보기로 하자.

 

1) ClassNotFoundException 원인

동적으로 클래스를 문자열로 로딩을 시도하다가 클래스가 없는 경우 발생.

 

1) Class.forName( String className )

2) ClassLoader.loadClass( String className ) 외에 String으로 클래스를 찾는 여러 메소드들...

 

크게 이 두가지 클래스를 사용하는 경우에 발생한다. 요즘에는 프레임워크나 라이브러리 사용으로 Class.forName을 많이 사용하지는 않겠지만 옛날에는 JDBC를 직접적으로 연결할 때 Class.forName으로 JDBC 라이브러리를 로드해서 많이 사용했던 생각이 난다. 

 

2) ClassNotFoundException 해결방법

당연히 실행환경에서 참조해야되는 jar 파일이나 class 파일이 없는 경우가 된다. jar 파일 혹은 참조하는 class 파일이 있는지 확인해보고 넣어주면 될 것 같다. 파일이 있더라도 실제 클래스패스에 들어갈수 있는 환경인지도 확인해보면 된다.

 

 

JDBC. Class.forName 관련 팁

뭐 ... 오라클이라던지, MSSQL , MySQL 라이브러리들을 말이다. 하지만 JDBC 4.0 버전 이후로는 라이브러리 내에 META-INF-services-java.sql.Drvier 파일 내에 포함시켜둔 클래스들을 자동적으로 로드하게 되어있어 별도로 Class.forName과 같은 과정이 필요없다고 한다. 

 

이렇게 되면 데이터베이스에 종속되지 않은 설정을 할 수 있는 장점이 있긴 한데... 실제로 아직까지도 데이터베이스에 완전 독립적인 시스템을 구축하는 것은 거의 불가능에 가깝다. 물론 아주 간단한 프로그램들이 무슨 데이터베이스를 사용하든 표준적인 방법만 사용하도록 하여 종속적인 부분을 제외하고 ( jpa ) 만을 이용해서도 만들수 있겠지만... 진리의 케바케다. 

 

비슷한 NoClassDefFoundError 에러 해결 방법

 

java.lang.NoClassDefFoundError 에러 해결 방법

얼마 전 업무를 하다 java.lang.NoClassDefFoundError 를 만났는데 상당수 ClassNotFoundException와 헷갈리는 부분이 있을 것 같다. 과거에도 이 에러를 많이 만났지만 그때마다 어찌저찌 해결만 했을 뿐 명확히..

nhj12311.tistory.com


댓글
최근에 올라온 글
최근에 달린 댓글