티스토리 뷰
컴파일(compile): 해당 언어로 작성된 컴퓨터 프로그램을 다른 언어의 동등한 프로그램으로 변환하는 프로세스
컴파일 에러- 컴파일시에 발생하는 에러
런타임 에러- 실행 시에 발생하는 에러
논리적 에러- 실행은 되지만, 의도와 다르게 동작하는 것
런타임에러(실행 중 에러)
(1)Error : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류
(2)Exception: 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류
예외처리(Exception handling)
정의:프로그램 실행 시 발생할 수 있는 예외의 발생에 대비한 코드를 작성하는것
목적: 프로그램의 비정상 종료를 막고 정상적인 실행상태 유지


Exception 클래스들:사용자의 실수와 같은 외적인 요인에 의해 발생
RuntimeException 클래스들: 프로그래머의 실수로 발생하는 예외
Exception 키워드
try: 예외를 발생할 것으로 예상되는 코드를 블럭으로 지정하는데 사용되며, try블록 다음ㅇ에는 catch 또는 finally가 와야한다.
catch-예외를 처리하는데 사용, catch 블록만 단독으로 사용할수없어서 try블록이 앞에 와야 catch 블록이 뒤에 올수있다.

try-catch문에서의 흐름
예외발생 하지 않은 경우

예외가 발생한 경우

-이를 처리할 catch블럭을 찾아 내려감
-일치하는 catch블럭이 없으면 예외는 처리안됨
-Exception이 선언된 catch 블럭은 모든 예외 처리(마지막 catch블럭)

printStackTrace():
예외발생 당시의 호출스택(Call Stack)에 있었던 메서드의 정보와 예외 메시지를 화면 출력
getMessage() :
발생한 예외클래스의 인스턴스에 저장된 메시지를 얻을 수있다.

멀티 catch 블럭:
-내용이 같은 catch블럭을 하나로 합친 것(JDK1.7부터)
-ExceptionA와 B가 조상-자손 관계일 경우, 조상만 써주면 됨. 멀티 catch 블럭 사용할 경우, 참조변수로는 두 예외 클래스의 공통 멤버만 사용 가능.

예외발생시키기
연산자 new를 이용해서 발생시키려는 예외클래스의 객체를 만든 다음
키워드 throw를 이용해서 예외를 발생시킨다.
throw e;

checked , unchecked예외
checked예외:
컴파일러가 예외처리 여부를 체크(예외 처리 필수)RuntimeException클래스를 상속받지 않은 예외 클래스들
복구 가능성이 있는 예외이기에 반드시 예외처리하는 코드를 작성해야함
unchecked예외:
컴파일러가 예외 처리 여부를 체크 안함(예외 처리 선택)RuntimeException클래스를 상속받은 예외클래스들
복구가능성 없는 예외이기에 예외처리를 강제로 하지 않는다.

메서드에 예외선언하기
(1)예외를 처리하는 방법: try-catch문, 예외선언하기 (직접 처리하기) 위에 있는 예시들 처럼 처리하면됨!
(2)메서드가 호출시 발생가능한 예외를 호출하는 쪽에 알리는 것(떠넘기기)

finally블럭
-예외 발생여부와 관계없이 수행되어야 하는 코드를 넣는다.

사용자 정의 예외 만들기
-우리가 직접 예외 클래스를 정의할수 있다.
-조상은 Exception과 RuntimeException중에서 선택

예외 되던지기 (exception re-throwing)
-예외를처리한후 에 다시 예외를 발생시키는 것
-호출한 메서드와 호출된 메서드 양쪽 모두에서 예외처리하는 것

연결된 예외(chained exception)
-한 예외가 다른 예외를 발생시킬수 있다.
-예외 A가 예외 B를 발생시키면 A는 B의 원인 예외(cause exception)
Throwable initCause(Throwable cause)
:지정한 예외를 원인 예외로 등록
Throwable getCause()
:원인 예외를 반환
사용하는 이유:
(1)여러 예외를 하나로 묶어서 다루기 위해서

(2)checked예외를 unchecked예외로 변경하려 할때
static void startstall() throws SpaceException, MemoryException {
if(!enoughSpace()) //충분한 공간이 없으면
throw new SpaceException("설치할 공간이 부족합니다");
if(!enoughMemory()) //충분한 메모리가 없으면 개선전
throw new MemoryException("메모리가 부족합니다.");
}
-------------------------------------------------------------------------------
static void startstall() throws SpaceException{
if(!enoughSpace()) //충분한 공간이 없으면
throw new SpaceException("설치할 공간이 부족합니다"); //개선후
if(!enoughMemory()) //충분한 메모리가 없으면 개선전
throw new RuntimeException(new MemoryException("메모리가 부족합니다."));// unchecked Exception으로
//바꿔줌
}
참고문헌 :남궁성, 『자바의정석』, 도우출판
'TIL > JAVA' 카테고리의 다른 글
| java.lang패키지와 유용한 클래스 (0) | 2023.01.15 |
|---|---|
| 객체지향(OOP)인터페이스 (0) | 2023.01.12 |
| 객체지향(OOP)추상클래스(abstract class) (0) | 2023.01.11 |
| 객체지향(OOP)제어자 (0) | 2023.01.11 |
| 객체지향(OOP)다형성 (0) | 2023.01.09 |
- Total
- Today
- Yesterday
- JSON에 대해서 알아보기
- 내일배움카드
- 국비지원
- spring #springboot #스프링부트공부 #스프링부트실습 #메타코딩유튜브
- 자료구조 #CS공부
- 자료구조
- 메가바이트스쿨
- JSON
- git 개념 #spring전 git #간단한 개념만
- 스프링 # 스프링부트 #서버와클라이언트 # 공부기록
- 개발자취업부트캠프
- 알고리즘 복잡도 #알고리즘 공부 #이것이코딩테스트다 #이코테 #나동빈
- mysql #인텔리제이랑 연결 #다시설치 및 재실행
- JSON #json #개발자필수지식
- MegabyteSchool
- Spring Boot 공부
- HTTP #메타코딩
- application.yml 설정
- 패스트캠퍼스
- 국비지원교육
- 빌드 오류 #java버전오류
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |