반응형
1. ❓ IOException이란 무엇인가요?
IOException은 Input/Output Exception의 약자로, 말 그대로 데이터를 입력받거나 출력하는 과정에서 발생하는 예외를 의미합니다.
자바의 예외 계층 구조에서 Exception을 직접 상속받는 체크드 예외이기 때문에, 반드시 try-catch로 처리하거나 throws로 외부로 던져야 컴파일이 가능합니다. 이는 시스템 외부 자원(파일, 소켓 등)과의 연결은 언제든 실패할 가능성이 있다는 것을 컴파일러가 미리 경고해 주는 것입니다.
2. 🔍 주요 발생 원인과 자식들
IOException은 범위가 매우 넓어서 상황에 따라 더 구체적인 자식 예외들이 발생하곤 합니다.
| 예외 종류 | 발생 상황 |
| FileNotFoundException | 지정한 경로에 파일이 존재하지 않을 때 |
| EOFException | 파일이나 스트림의 끝에 예상보다 빨리 도달했을 때 |
| SocketException | 네트워크 연결이 끊기거나 소켓 통신 오류가 날 때 |
| UnknownHostException | IP 주소를 알 수 없는 잘못된 호스트 이름을 사용했을 때 |
3. 🛠️ 실전! IOException 처리하는 법
❌ 나쁜 예시: 단순 무시
Java
try {
FileReader fr = new FileReader("config.txt");
} catch (IOException e) {
// 아무것도 안 하거나 단순히 printStackTrace만 찍고 끝내기
}
✅ 좋은 예시: Try-with-resources 활용
자바 7부터 도입된 이 방식은 자원 반납(close())을 자동으로 보장하여 IOException 발생 시 자원이 누수되는 것을 막아줍니다.
Java
public void readFile(String path) {
try (BufferedReader br = new BufferedReader(new FileReader(path))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
System.err.println("파일을 읽는 중 오류 발생: " + e.getMessage());
// 예외 복구 로직이나 커스텀 예외 전환 수행
}
}
💡 시니어의 조언: '신뢰할 수 없는 환경'에 대비하세요
내 컴퓨터에서는 잘 돌아가던 코드가 서버에 올리면 IOException을 뱉는 경우가 많습니다. 권한 부족, 네트워크 순단, 디스크 용량 부족 등 변수는 무수히 많죠.
중급 개발자라면 단순히 에러를 잡는 데서 그치지 말고, **'재시도 로직(Retry)'**을 넣거나, 사용자에게 **'잠시 후 다시 시도해 주세요'**와 같은 친절한 메시지를 전달하는 등의 예외 복구 시나리오를 설계해야 합니다.
반응형
'개발 > Trouble Shooting' 카테고리의 다른 글
| 자바의 영원한 숙제: NullPointerException (NPE) 완벽 가이드 (0) | 2025.12.29 |
|---|---|
| 클래스가 어디로 사라졌을까? ClassNotFoundException 완벽 가이드 (0) | 2025.12.29 |
| 데이터베이스와의 소통 불능: SQLException 완벽 가이드 (0) | 2025.12.29 |
| 재귀의 늪에 빠지다: StackOverflowError 원인과 해결 방법 (0) | 2025.12.29 |
| 서버가 멈췄다! 자바 OutOfMemoryError(OOME) 완벽 분석 및 해결 가이드 (0) | 2025.12.29 |