Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- java list 출력
- 코딩부트캠프후기
- java map 출력
- 프로그래머스제일작은수
- 비전공자sqld
- java기본자료형
- 인터프린터언어
- javaJVM
- java set 출력
- 격파르타장점
- java set 저장
- 격파르타후기
- 프로그래머스
- java알고리즘
- 컴파일
- 항해99후기
- 격파르타비전공자
- java참조자료형
- 격파르타합격후기
- sqld자격증합격
- 항해15기
- 노베이스부트캠프
- java map
- java 자료구조 활용
- javaJRE
- 작은수제거하기
- java list 저장
- java map 저장
- java최솟값구하기
- java알고리즘문제풀이
Archives
- Today
- Total
코딩과 결혼합니다
230921 - 자바의 정석 chapter 08 본문
728x90
⭐프로그램 오류
- 프로그램 실행 중 어떤 원인에 의해서 오작동을 하거나 비정상적으로 종료되는 경우가 있다.
- 이러한 결과를 초래하는 원인을 프로그램 에러 또는 오류라고 한다.
- 컴파일 에러 : 컴파일 시에 발생하는 에러
- 런타임 에러 : 실행 시에 발생하는 에러
- 논리적 에러 : 실행은 되지만, 의도와 다르게 동작하는 것
에러 : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류
예외 : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류
⭐예외 클래스의 계층 구조
- Exception 클래스와 그 자손들 - 'checked 예외' (예외 처리 필수)
- 사용자가 발생하는 예외
- 입력된 데이터 형식이 잘못된 경우, 존재하지 않는 파일의 이름을 입력하는 경우...
- RuntimeException 클래스와 그 자손들 - 'unchecked 예외' (컴파일러가 예외 처리 여부를 확인하지 x, 예외 처리 선택)
- 프로그래머의 실수로 발생하는 예외
- 배열의 범위를 벗어나는 경우, 클래스 간의 잘못된 형 변환을 하는 경우...
⭐예외 처리 하기(try - catch 문)
- 정의 : 프로그램 실행 시 발생할 수 있는 예외에 대비한 코드를 작성하는 것
- 목적 : 프로그램의 비정상 종료를 막고, 정상적인 실행 상태를 유지하는 것
- 하나의 try 블럭 다음에 여러 종류의 예외 처리를 할 수 있도록 하나 이상의 catch블럭이 올 수 있다.
- 이 중 발생한 예외의 종류는 일치하는 단 한 개의 catch 블럭만 수행된다.
- 발생한 예외의 종류와 일치하지 catch문이 없으면 예외는 처리되지 않는다.
- if 문과 달리, try 블럭이나 catch 블럭 내에 포함된 문장이 하나뿐이어도 중괄호{}를 생략할 수 없다.
⭐try - catch 문에서의 흐름
- try 블럭 내에서 예외 발생
- 1. 발생한 예외와 일치하는 catch 블럭이 있는지 확인
- 2. 일치하는 catch 블럭을 찾게 되면, 그 catch 블럭 내의 문장들을 수행하고 전체 try -catch 문을 빠져나가서 그 다음 문장을 계속해서 수행한다.\
- try 블럭 내에서 예외가 발생하지 않은 경우
- catch 블럭을 거치지 않고 전체 try-catch문을 빠져 나가서 수행을 계속한다.
⭐예외의 발생과 catch 블럭
- printSrackTrace() : 예외 발생 당시의 호출 스택에 있었던 메서드의 정보와 예외 메시지를 화면에 출력한다.
- getMessage() : 발생한 예외 클래스의 인스턴스에 저장된 메시지를 얻을 수 있다.
- 멀티 catch 블럭
- JDK 1.7부터 여러 catch블럭을 'ㅣ'기호를 이용해서, 하나의 catch블럭으로 합칠 수 있게 되었다.
- 즉, 내용이 같은 catch블럭을 하나로 합친 것이다.
- 'ㅣ'기호로 연결할 수 있는 예외 클래스의 개수에는 제한이 없다.
- 단, 조상과 자손의 관계에 있다면 합칠 수 없다.(컴파일 에러)
- 멀티 catch 블럭의 참조변수로는 공통 멤버만 사용할 수 있다.
⭐예외 발생 시키기
- 키워드 throw를 사용해서 프로그래머가 예외를 발생시킬 수 있다.
⭐메서드 예외 선언하기
- 메서드의 선언부에 키워드 throw를 사용해서 메서드 내에서 발생할 수 있는 예외를 적는다. 그리고 예외가 여러 개인 경우 쉼표로 구분한다.
- 만약 모든 예외의 최고 조상인 Exception 클래스를 메서드에 선언하면, 이 메서드는 모든 종류의 예외가 발생할 가능성이 있다는 뜻이다.
- 메서드의 throw에 예외를 명시하는 것은 예외 처리를 하라는 것이 아니라, 자신을 호출한 메서드에게 예외를 전달하여 예외 처리를 떠맡기는 것이다.
⭐finally블럭
- 예외의 발생 여부와 관계없이 실행되어야 하는 코드
- 선택적으로 사용할 수 있으며, try - catch - finally의 순서로 구성된다. 예외 미발생시에는 try - finally
- try 또는 catch 블럭에서 return문을 만나도 finally블럭은 수행된다.
⭐자동 자원 반환 - try with resources문
- JDK 1.7부터 try with resources 문이라는 try - catch 문의 변형이 추가되었다.
- try with resources 문의 괄호 안에 객체를 생성하는 문장을 넣으면, try 블럭을 벗어나는 순간 자동적으로 close()가 호출된다. 그다음 catch 또는 finally 블럭이 수행된다.
- try with resources 문에 의해 자동으로 close()가 호출될 수 있으려면 클래스가 AutoCloseable이라는 인터페이스를 구현한 것이어야 한다.
⭐ 사용자 정의 예외 만들기
- 기존의 예외 클래스를 상속받아서 새로운 예외 클래스 작성
⭐예외 되던지기
- 예외를 처리한 후에 다시 예외를 발생시켜 호출한 메서드로 전달
- 예외가 발생한 메서드와 이를 호출한 메서드, 양쪽에서 예외를 처리해야 하는 경우에 사용한다.
- 반환 값이 있는 return문의 경우, catch 블럭에도 return 문이 있어야 한다. 예외가 발생했을 경우에도 값을 반환해야 하기 때문이다.
- catch 블럭에서 예외 던지기를 해서 호출한 메서드로 예외를 전달하면, return문이 없어도 된다.
⭐연결된 예외
- 한 예외가 다른 예외를 발생시킬 수 있다.
- 원인 예외 : 예외 A가 예외 B를 발생시켰다면 A를 B의 원인예외라 한다.
- 여러 예외를 큰 분류의 예외로 묶을 때, 연결된 예외로 처리한다.
- 필수 예외를 선택 예외로 변경할 때 연결된 예외로 처리한다.
'2세 > Java' 카테고리의 다른 글
230926 - 자바의 정석 chapter 10 (날짜와 시간 & 형식화) (0) | 2023.09.27 |
---|---|
230924 - 자바의 정석 chapter 09 (0) | 2023.09.25 |
230919 - 자바의 정석 chapter 07 (362p ~411p) (0) | 2023.09.19 |
230918 - 자바의 정석 chapter 07 (308~361p) (0) | 2023.09.18 |
230917 - 자바의 정석 chapter 06 (261p ~307p) (0) | 2023.09.17 |