본문 바로가기
Program language/JAVA 자바

JAVA IOException오류 java.lang.NoClassDefFoundError: IOException

by tankwoong 2023. 1. 20.
반응형

 

java.lang.NoClassDefFoundError: IOException

java는 입출력에 굉장히 까다로운 언어인데 그래서 입출력시 예외처리를 해줘야한다. 

print계열은 자동적으로 예외처리가 되어있는데, 이것 이외에는 다 예외처리를 해줘야 한다. 

여기서는 throw IOException을 사용해서 예외처리를 해줘야하는데  밑의 그림을 보면 오류가 나는 것을 볼 수 있다.

 NoClassDefFoundError 에러는 컴파일 시점에 존재했던 클래스가 런타임에 존재하지 않으면

발생하는 에러라고 잘 알려져 있는데 실행시에 찾을 수 없다는 이야기이다. 

 

그래서 여러 가지 서칭을 하다가 해결점을 찾았다.

java.io를 붙여주는 것인데 io는 입출력에 대한 최상위 클래스 경로이며 IO는

Block개념으로 입력값을 받기 전 대기 상태를 지칭한다. 

 

아직 자바 초보자라 완벽하게 이해는 안되지만 현재 시점에서 이해한 수준으로 설명해보겠다. 

우리는 대부분 JRE내부에서 Class라는 것을 사용하여 입력과 출력을 진행하고 구성하였는데

 

JRE밖으로 입력과 출력을 하기 위해서는 java.io에 있는 Input Stream과 Output Stream을 사용해야 한다.

여기서 스트림은 Java8부터 지원하기 시작한 기능으로 데이터의 집합, 그룹을 의미하는 컬렉션에 저장되어 있는

엘리먼트들을 하나씩 순회하면서 처리할 수 있는 코드패턴이다.

NoClassDefFoundError 에러는 컴파일 시점에 존재했던 클래스가 런타임에 존재하지 않으면 발생하는

에러라는 점을 고려했을 때 클래스가 없다는 것에 착안하여

가장 최상위 클래스인 java.io에서 가져오겠다고 코드를 작성했다. 

그러니 깔끔하게 해결되었다. 

 

확실한 정답인지는 모르겠지만 지금까지 이해한 바로는 이것도 해결하는 한가지의 방법일 듯 하다.

 

이 방법을 적용해서 한번 시도해보기를 바란다. 

 

 

반응형