반응형
예외처리(Exception) 란?
예외처리(Exception handling)는 프로그램이 예상치 못한 상황(예외)을 처리하는 메커니즘입니다. 자바에서 예외는 런타임 오류(Runtime Error)로서 발생할 수 있으며, 이는 프로그램의 정상적인 흐름을 방해하거나 프로그램이 비정상적으로 종료될 수 있습니다. 예외 처리는 이러한 상황에 대응하여 프로그램의 안정성을 높이고, 오류 발생 시 적절히 대응할 수 있도록 합니다.
예외의 종류
- Checked Exception (검사 예외):
- 컴파일러가 강제하는 예외로, 반드시 예외 처리를 해야 합니다. 예를 들어, 파일 입출력에서 발생할 수 있는 IOException이나 네트워크 연결에서 발생할 수 있는 SQLException 등이 있습니다.
- Unchecked Exception (비검사 예외 또는 런타임 예외):
- 명시적으로 예외 처리를 강제하지 않는 예외입니다. 프로그래머의 실수나 예상할 수 없는 상황에서 발생할 수 있습니다. 예를 들어, 배열 인덱스를 벗어나는 ArrayIndexOutOfBoundsException이나 객체 참조가 없는 NullPointerException 등이 있습니다.
- Error:
- 시스템 수준에서 발생하는 심각한 문제를 나타내는 예외로, 프로그램 코드에서 복구할 수 없는 상황을 나타냅니다. 예를 들어, OutOfMemoryError나 StackOverflowError 등이 있습니다.
- 시스템 수준에서 발생하는 심각한 문제를 나타내는 예외로, 프로그램 코드에서 복구할 수 없는 상황을 나타냅니다. 예를 들어, OutOfMemoryError나 StackOverflowError 등이 있습니다.
예외 처리 방법
자바에서 예외 처리는 try-catch 블록을 사용하여 처리할 수 있습니다.
기본적인 예외 처리 구문
try {
// 예외가 발생할 가능성이 있는 코드
// 예를 들어, 파일을 읽거나, 네트워크 연결을 시도하는 코드
} catch (IOException e) {
// IOException 예외가 발생한 경우 처리할 코드
e.printStackTrace(); // 예외 정보를 출력
} catch (Exception e) {
// 그 외의 예외가 발생한 경우 처리할 코드
e.printStackTrace();
} finally {
// 선택적으로 사용할 수 있는 finally 블록
// 정리 코드를 작성할 수 있습니다. (예: 리소스 해제)
}
- try: 예외가 발생할 수 있는 코드 블록을 지정합니다.
- catch: 발생한 예외를 처리하기 위한 블록입니다. 여러 개의 catch 블록을 사용하여 다양한 예외를 처리할 수 있습니다.
- finally: 예외 발생 여부와 관계없이 항상 실행되는 블록입니다. 주로 리소스 해제 등의 정리 작업에 사용됩니다.
예외 던지기 (Throwing Exceptions)
메서드에서 예외를 직접 던질 수도 있습니다. 이 경우 throws 키워드를 사용하여 메서드 선언부에서 해당 예외를 명시해야 합니다.
public void readFile(String fileName) throws IOException {
// 파일을 읽는 작업 수행
// 예외가 발생할 수 있는 경우 IOException 던지기
}
예외 처리의 장점
- 프로그램의 안정성 확보: 예외 처리를 통해 예상치 못한 상황에 대응하여 프로그램이 비정상적으로 종료되는 것을 방지할 수 있습니다.
- 디버깅 용이성: 예외 정보를 콘솔에 출력하거나 로그에 기록하여 디버깅을 용이하게 합니다.
- 로버스트한 코드: 예외 처리를 잘 구현한 코드는 예외 발생 시에도 정상적으로 동작할 수 있어 프로그램의 로버스트함(구조적으로 튼튼하고 건강해지는 특성)을 제공합니다.
예외 처리의 단점
- 오버헤드: 예외 처리는 추가적인 실행 시간과 메모리 사용량을 필요로 할 수 있습니다.
- 코드 가독성 저하: 너무 많은 예외 처리 코드가 있을 경우 코드 가독성이 저하될 수 있습니다.
요약
예외 처리는 프로그램의 안정성을 높이고, 예상치 못한 상황에 대응하여 문제를 해결하는 중요한 프로그래밍 기법입니다. 적절한 예외 처리를 통해 프로그램의 신뢰성을 높이고, 유지보수성을 강화할 수 있습니다.
반응형
'Programming > Java, Kotlin' 카테고리의 다른 글
[Java] JVM 이란? 자바 메모리(메모리 각 영역에 객체, 메소드 및 변수를 저장하는 법) (0) | 2024.06.22 |
---|---|
[Java] 멀티스레드, 스레드풀이란? 사용예시, 장단점, 차이점 (0) | 2024.06.22 |
[Java] 컬렉션 프레임워크(Collection Framework), 동시성 컬렉션(concurrent collection) 이란? 장단점, 차이 (0) | 2024.06.22 |
[Java] Serialization란? 사용 방법, 사용 이유, 예시, 장점 (0) | 2024.06.22 |
[Java] OOPS란? 객체지향 프로그래밍(OOP, Object-Oriented Programming) 개념 (0) | 2024.06.22 |