일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- jsp
- servlet
- two pointers
- 웹개발
- DB
- msa개념
- 밤비노
- Java
- 안드로이드
- 자바
- Bambino
- microservices
- jvm메모리구조
- 웹개발자
- Programming
- job
- SpringFramework
- mysql
- MSA
- BCIT
- C
- CSS
- sql
- 리액트프로젝트
- MVC
- 코드잇
- coding test
- 웹개발기초
- html
- 데이터베이스
- Today
- Total
초보 개발자의 기록
예외처리 (Exception Handling) 본문
프로그램 오류
- 프로그램이 실행 중 어떤 원인에 의해서 오작동을 하거나 비정상적으로 종료되는 경우
- 이러한 결과를 초래하는 원인을 프로그램 에러, 오류라 함
컴파일 에러 : 컴파일 시에 발생하는 에러
런타임 에러 : 실행시에 발생하는 에러
논리적 에러 : 실핸은 되지만, 의도와 다르게 동작
- 컴파일러가 소스코드의 기본적인 사항은 컴파일 시에 모두 걸러줄 수 있지만,
- 실행 도중에 발생할 수 있는 잠재적 오류까지 검사 불가능
실행시(runtime) 발생할 수 있는 프로그램의오류
- 에러 (error) : 메모리부족, 스택오버플로우같이 일단 발생하면 복구할 수없는 심각한 오류
- 예외 (exception) : 발생하더라도 프로그래머가 이에 대한 적절한 코드를 미리 작성해 비정상종료 방지
크로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류
모든 클래스의 조상은 Object이므로
Exception, Error클래스 또한 Object의 자손
RuntimeException 클래스들 : 프로그래머의 실수로 발생하는 예외
Exception 클래스들 : 사용자의 실수와 같은 외적인 요인에 의해 발생하는 예외
예외처리?
- try-catch 문 : 모든 catch블럭에 참조벼수 e하나만 사용 가능
catch블럭 안에 또 하나의 try-catch문이 포함되는 경우는 같은 이름 참조 변수 사용 불가
- 프로그램 실행 시 발생할 수 있는 예기치 못한 예외의 발생에 대비한 코드를 작성하는 것
- 목적 : 예외의 발생으로 인한 실행 중인 프로그램의 갑작스런 비정상 종료를 막고 정상적인 실행상태를 유지하게 함
try-catch문 흐름
- try블럭 내에서 예외가 발생한 경우
1. 발생한 예외에 일치하는 catch블럭이 있는지 확인
2. 일치하는 catch 블럭을 찾게되면 그 catch블럭 내의 문장들을 수행하고 try-catch문을 빠져나가 다음 문장 계속 수행
만일, 일치하는 catch 블럭을 찾지 못하면 예외처리 불가
- try블럭 내에서 예외가 발생하지 않은 경우
catch블럭을 거치지 않고 전체 try-catch문을 빠져나가 수행 진행
catch블럭
catch블럭은 () , {} 두 부분으로 나뉨
-() : 처리하고자하는 예외와 같은 타입의 참조변수 하나를 선언
첫 번쨰 catch블럭부터 차례대로 내려가면서 선언된 참조변수의 종류와 생성돈된 예외클래스의 인스턴스에 instanceof 연산자를 이용해 검사. 검사결과가 true인 catch블럭을 만날때 까지 연산
true 인 catch블럭을 찾게 되면 블럭에 있는 문장들을 모두 수행 후 try-catch문 빠져나가고 예외 처리
없을 경우에는 예외처리 되지 않음
printStackTrace(), getMessage()
- 예외가 발생했을 떄 생성되는 예외 클래스의 인스턴스에는 발생한 예외에 대한 정보가 담겨 있음
- getMessage() 와 printStackTrace() 통해 정보를 얻을 수 있음
printStackTrace() ; 예외 발생 당시의 호출스택에 있었던 메서드의 정보와 예외 메시지를 화면에 출력
getMessage() : 발생한 예외클래스의 인스턴스에 저장된 메시지를 얻을 수 있음
멀티 catch블럭
- JDK 1.7부터 여러 catch블럭을 | 기호를 이용해서 하나의 catch블럭으로 합칠 수 있게 되었음
- 멀티블럭을 이용해 중복된 코드를 줄임
- 예외 클래스 개수에는 제한이 없음
- 두 예외 클래스가 조상과 자손의 관계에 있다면 컴파일 에러가 발생함
-> 조상클래스만 입력해 불필요한 코드는 제거하라는 의미의 에러
예외 발생
1. 연산자 new를 이용해서 발생시키려는 예외 클래스의 객체를 만듬
2. 키워드 throw를 이용해서 예외를 발생시킴
RuntimeException 클래스들 : 컴파일러가 예외 처리를 확인하지 않는 unchecked예외
Exception 클래스들 : 예외처리를 확인하는 Checked예외
메서드에 예외 선언
- 메서드의 선언부에 throws를 사용해서 메서드 내에서 발생할 수 있는 예외를 적어주기만 하면 됨
- 예외가 여러개일 경우, 쉽표로 구분
- 자바에서는 메서드를 작성할 떄 메서드 내에서 발생할 가능성이 있는 에외를 메서드의 선언부에 명시하여 이 메서드를 사용하는 쪽에서는 이에 대한 처리를 하도록 강요하기 떄문에 , 프로그래머들의 노동은 낮추고 프로그램은 보다 견고한 코드를 가지게 됨
- Java API 문서를 통해 사용하고자 하는 메서드의 선언부와 Throws를 보고 확인하는 것이 좋음
- throws는 예외를 처리하는 것이 아니라, 예외가 발생할 가능성이있는 메서드를 호출한 메서드에게 예외를 전달하여 예외처리를 떠맡기는 것
finally블럭
- 예외의 발생여부에 상관없이 실행되어야할 코드를 포함시킬 목적으로 사용된다
- try-catch-finally
try : 예외가 발생할 가능성이 있는 문장들을 넣는다
catch : 예외처리를 위한 문장을 적는다
finally : 예외의 ㅂㄹ생여부에 관게없이 항상 수행되어야하는 문장들을 넣는다
예외가 발생한 경우 : try->catch->finally
예외가 발생하지 않은 경우 : try->finally
'JAVA > Basic' 카테고리의 다른 글
Java Introducion (0) | 2023.04.08 |
---|---|
입출력(I/O) (0) | 2021.08.20 |
Class 정의시 주요 구성요소 (0) | 2021.08.05 |
Getter , Setter (0) | 2021.08.05 |
연산자(Operator) (0) | 2021.08.02 |