IOException

Kkd·2025년 2월 17일
0

매일메일 개념정리

목록 보기
87/93

1. IOException이란?

IOException (입출력 예외, Input/Output Exception)파일, 네트워크, 데이터 스트림 등의 입출력 작업 중 발생할 수 있는 예외입니다.
Java의 java.io 패키지에서 제공되며, Checked Exception(검사 예외)에 속하므로 반드시 예외 처리를 해야 합니다.

파일 읽기/쓰기 작업 중 오류 발생
네트워크 연결 문제로 인한 입출력 오류
Checked Exception → try-catch 또는 throws 필수

📌 IOException이 발생하면 파일을 읽거나 쓰는 작업이 정상적으로 수행되지 않음.


2. IOException의 주요 발생 원인

1) 파일이 존재하지 않음 (FileNotFoundException)

import java.io.*;

public class IOExceptionExample {
    public static void main(String[] args) {
        try {
            FileReader file = new FileReader("non_existing_file.txt"); // 파일이 없으면 예외 발생
        } catch (IOException e) {
            System.out.println("파일을 찾을 수 없습니다: " + e.getMessage());
        }
    }
}

📌 파일이 존재하지 않으면 FileNotFoundException이 발생하며, IOException의 하위 클래스임.


2) 파일 읽기/쓰기 작업 중 오류

import java.io.*;

public class IOExceptionExample {
    public static void main(String[] args) {
        try {
            FileWriter writer = new FileWriter("output.txt");
            writer.write("Hello, World!");
            writer.close(); // close()를 안 하면 예외 발생 가능
        } catch (IOException e) {
            System.out.println("파일 입출력 중 오류 발생: " + e.getMessage());
        }
    }
}

📌 파일에 쓰기(write) 작업을 하는 도중 예외가 발생할 수 있음.


3) 네트워크 연결 문제 (Socket, HTTP 통신)

import java.io.*;
import java.net.*;

public class IOExceptionExample {
    public static void main(String[] args) {
        try {
            URL url = new URL("http://invalid-url.com"); // 존재하지 않는 URL
            BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
        } catch (IOException e) {
            System.out.println("네트워크 오류 발생: " + e.getMessage());
        }
    }
}

📌 인터넷 연결 문제나 잘못된 URL로 인해 IOException이 발생할 수 있음.


4) 스트림을 닫지 않았을 때 발생하는 예외

import java.io.*;

public class IOExceptionExample {
    public static void main(String[] args) {
        try {
            FileInputStream inputStream = new FileInputStream("input.txt");
            inputStream.close(); // 이미 닫은 스트림을 다시 사용하려 하면 예외 발생

            int data = inputStream.read(); // IOException 발생!
        } catch (IOException e) {
            System.out.println("스트림 오류 발생: " + e.getMessage());
        }
    }
}

📌 스트림을 닫은 후 다시 접근하면 IOException 발생.


3. IOException 처리 방법

1) try-catch로 예외 처리

try {
    FileReader file = new FileReader("data.txt");
} catch (IOException e) {
    System.out.println("예외 발생: " + e.getMessage());
}

📌 try-catch를 사용하여 예외가 발생해도 프로그램이 종료되지 않도록 처리.


2) throws로 호출한 메서드에 예외 위임

import java.io.*;

public class IOExceptionExample {
    public static void readFile() throws IOException {
        FileReader file = new FileReader("data.txt");
    }

    public static void main(String[] args) {
        try {
            readFile();
        } catch (IOException e) {
            System.out.println("예외 처리: " + e.getMessage());
        }
    }
}

📌 throws를 사용하여 예외를 호출한 곳에서 처리하도록 위임할 수 있음.


3) try-with-resources (Java 7+)

import java.io.*;

public class IOExceptionExample {
    public static void main(String[] args) {
        try (FileReader file = new FileReader("data.txt");
             BufferedReader reader = new BufferedReader(file)) {
            System.out.println(reader.readLine());
        } catch (IOException e) {
            System.out.println("예외 발생: " + e.getMessage());
        }
    }
}

📌 try-with-resources를 사용하면 close()를 명시적으로 호출하지 않아도 자동으로 리소스 해제 가능.


4. IOException과 관련된 예외 클래스 (상속 구조)

📌 IOException은 Java의 여러 입출력 관련 예외의 부모 클래스!

java.lang.Exception
 └── java.io.IOException
      ├── java.io.FileNotFoundException (파일이 없음)
      ├── java.net.SocketException (네트워크 오류)
      ├── java.io.EOFException (파일 끝에 도달)
      ├── java.io.InterruptedIOException (I/O 작업 중 인터럽트 발생)

자주 발생하는 IOException 하위 클래스
| 예외 클래스 | 설명 |
|------------|--------------------------------|
| FileNotFoundException | 파일이 존재하지 않을 때 발생 |
| SocketException | 네트워크 연결 오류 |
| EOFException | 파일 끝(End of File) 도달 시 발생 |
| InterruptedIOException | I/O 작업이 인터럽트될 때 발생 |


5. IOException이 발생할 수 있는 주요 API

클래스발생 가능 예외
FileReader, FileWriterFileNotFoundException, IOException
BufferedReader, BufferedWriterIOException
FileInputStream, FileOutputStreamIOException
Socket, ServerSocketSocketException, IOException
HttpURLConnectionIOException

📌 입출력과 관련된 거의 모든 API에서 IOException이 발생할 가능성이 있음.


6. IOException vs RuntimeException (Checked vs Unchecked)

비교 항목IOException (Checked Exception)RuntimeException (Unchecked Exception)
예외 처리 필요 여부try-catch 또는 throws 필요❌ 예외 처리를 강제하지 않음
발생 원인파일, 네트워크, 입출력 관련 오류프로그래밍 실수 (NPE, IndexOutOfBounds 등)
예제FileReader, Socket, BufferedReaderNullPointerException, ArrayIndexOutOfBoundsException

📌 IOException은 Checked Exception이므로 반드시 예외 처리가 필요!
📌 Unchecked Exception (RuntimeException 하위 클래스)와는 다르게 try-catch가 필수!


7. 결론

IOException은 파일, 네트워크, 스트림 등의 입출력 작업에서 발생하는 예외
Checked Exception이므로 반드시 try-catch 또는 throws를 사용해야 함
파일이 없거나, 네트워크 문제가 발생하거나, 스트림이 닫힌 경우 발생할 수 있음
자주 발생하는 FileNotFoundException, SocketException 등과 함께 사용됨


추가 학습 자료

profile
🌱

0개의 댓글