예외처리
- 프로그램 오류
- 예외클래스 계층 구조
- 예외처리
- 예외처리 방법
- Exception과 오버라이딩
- 사용자 정의 예외
프로그램 오류
- 프로그램 수행시 치명적 상황이 발생하여 비정상 종료 상황이 발생한 것, 프로그램 에러라고도 함
- 오류의 종류:
- 컴파일 에러: 프로그램의 실행을 막는 소스 상의 문법 에러, 소스 구문을 수정하여 해결
- 런타임 에러: 입력 값이 틀렸거나, 배열의 인덱스 범위를 벗어났거나, 계산식의 오류 등 주로 if문 사용으로 인한 에러 처리
- 시스템 에러: 컴퓨터 오작동으로 인한 에러
- 오류 해결 방법
- 소스 수정으로 해결 가능한 에러를 예외(Exception)라고 한다
- 예외 상황 구문을 처리 하는 방법인 예외처리를 통해 해결
예외 클래스 계층 구조
- Exception과 에러 클래스 모두 Object 클래스의 자손이며 모든 예외의 조상은 Exception 클래스
- 반드시 예외 처리해야하는 Checked Exception과 해주지 않아도 되는 Unchecked Exception으로 나뉨
예외처리(Exception)
- Unchecked Exception으로 주로 프로그래머의 부주의로 인한 오류인 경우가 많음
- 예외처리 보다는 코드를 수정해야 하는 경우가 많음
- RuntimeException 후손 클래스
ArithmeticException | - 0으로 나누는 경우 발생 - if문으로 나누는 수가 0인지 검사 |
NullPointerException | - Null인 참조 변수로 객체 맴버 참조 시도시 발생 - 객체 사용 전에 참조 변수가 null인지 확인 |
NegativeArraySizeException | - 배열 크기를 음수로 지정한 경우 발생 - 배열 크기를 0보다 크게 지정해야 함 |
ArrayIndexOutOfBoundsException | - 배열의 index범위를 넘어서 참조하는 경우 - 배열명.length를 사용하여 배열의 범위 확인 |
ClassCastException | - Cast연산자 사용 시 타입 오류 - instanceof 연산자로 객체타입 확인 후 cast 연산 |
- Exception 확인하기
- Java API Documnet에서 해당 클래스에 대한 생성자나 메소드를 검색하면
- 그 메소드가 어떤 Exception을 발생시킬 가능성이 있는지 확인 가능
- 해당 메소드를 사용하려면 반드시 뒤에 명시된 예외 클래스를 처리해야 함
예외처리 방법
- Exception 처리를 호출한 메소드에게 위임
- 메소드 선언 시 Throws ExceptionName문을 추가하여 호출한 상위 메소드에게 처리 위임
- 계속 위임 하면 main()메소드까지 위임하게 되고 거기서도 처리되지 않는 경우 비정상 종료
- Exception이 발생한 곳에서 직접 처리
- try~catch문을 이용하여 예외처리
try | - exception 발생할 가능성이 있는 코드를 안에 기술 |
catch | - try 구문에서 exception 발생 시 해당하는 exception에 대한 처리 기술 - 여러 개의 exception처리가 가능하지만 exception간의 상속 관계를 고려해야 함 |
finally | - exception 발생 여부와 관계없이 꼭 처리해야 하는 로직 기술 - 중간에 return문을 만나도 finally 구문은 실행되지만 System.exit(); 를 만나면 무조건 종료 - 주로 java.io 나 java.sql 패키지의 메소드 처리 시 이용 |
- throws로 예외 던지기
- try~catch로 예외 잡기
- try~with~resource
Exception과 오버라이딩
- 오버라이딩 시 Throws 하는 exception의 개수와 상관없이 처리 범위가 좁아야 함
사용자 정의 예외
- exception 클래스를 상속받아 예외 클래스를 작성하는 것으로
- exception 발생하는 곳에서 throw new 예외클래스명()으로 발생
'Java > Java 개념' 카테고리의 다른 글
20. File (0) | 2022.10.11 |
---|---|
19. 입출력(IO) (0) | 2022.10.06 |
17. 다형성(Polymorphism) (0) | 2022.10.04 |
16. 오버라이딩(Overriding)과 오버로딩(Overloading) (0) | 2022.10.02 |
15. 상속(Inherit) (0) | 2022.10.02 |