개발을 하다보면 가끔 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 에러 해결 방법
'dev > java' 카테고리의 다른 글
java.lang.ClassCastException 에러 해결 방법 (2) | 2019.12.04 |
---|---|
ArithmeticException 에러 해결 방법 (0) | 2019.08.24 |
FileNotFoundException 에러 해결 방법 (3) | 2019.08.22 |
indexOutofBoundException 에러 해결 방법 (0) | 2019.08.20 |
java.lang.NoClassDefFoundError 에러 해결 방법 (1) | 2019.08.16 |
자바 8 인 액션(java 8 in action)을 읽고... (0) | 2019.08.05 |
자바 최대공약수와 최소공배수 구하기 (0) | 2019.06.15 |
릿코드(LeetCode) - Add Two Numbers (0) | 2019.04.13 |