2021. 04. 19(월) TIL
Java
복습
- Collection<E>
- List<E> : 순서대로 저장하고, 순서대로 조회가능
- ArrayList<E>
- Set<E> : 중복없이 저장가능
- HastSet<E>
- TreeSet<E> : 오름차순 정렬
- List<E> : 순서대로 저장하고, 순서대로 조회가능
- Map<K, V>
- 저장할 데이터가 가변성이 높은 데이터
- 저장할 데이터가 key, value의 쌍으로 연결된 데이터
- 저장된 데이터를 빠르게 검색
- HashMap<K, V>
예외처리
- 예외처리란 프로그램 실행 시 발생할 수 있는 에 대비하는 것으로 프로그램 비정상종료를 막고 실행 상태를 유지하는 것입니다.
오류의 종류
에러(Error)
- 시스템, 운영체제, JVM의 잘못으로 발생되는 것
- 개발자가 해결할 수 있는 문제가 아님
- 예외처리의 대상이 아님
예외(Exception)
- 예외는 개발자의 코딩실수나 사용자의 잘못된 프로그램 사용으로 발생하는 오류다.
- 예외는 예외처리를 통해서 비정상적인 종류를 예방할 수 있다.
- 예외는 UncheckedException과 CheckedException으로 구분한다.
UnCheckedException
- RuntimeException 클래스와 그 자식 클래스들이다.
- 주로 개발자의 코딩 실수로 발생되는 오류들이다.
- 컴파일러가 예외처리 여부를 체크하지 않는다.
- 주요 예외 클래스
- RunTimeException
- 모든 UnChecked Exception의 부모 클래스다.
- NullPointerException
- 참조변수의 값이 null인 상태에서 필드나 메소드를 사용할 때 발생하는 예외 클래스다.
- ClassCastException
- 클래스 형변환이 가능하지 않을 때 발생하는 예외 클래스다.
- ArithmeticException
- 나눗셈에서 어떤 값을 0으로 나눌 때 발생하는 예외 클래스다.
- IndexOutOfBoundsException
- 배열, 리스트, 문자열에서 인덱스 범위를 벗어난 위치를 조회했을 때 발생하는 예외 클래스다.
- NumberFormatException
- 숫자가 아닌 문자를 포함하고 있는 문자열을 정수나 실수로 변환할 때 발생하는 예외 클래스다.
- Integer.parseInt(s), Double.parseDouble(s) 등을 실행할 때 발생한다.
- RunTimeException
package day1;
public class ExceptionApp1 {
public static void main(String[] args) {
// 개발자의 코딩 실수로 발생하는 예외들
// - RuntimeException 클래스 및 그 하위예외클래스들은 개발자의 코딩 실수가
// 그 원인이 되는 예외다.
// - 해당 예외가 발생하는 수행문 혹은 메소드에 대해서는 예외처리 여부를
// 체크하지 않는다.
// - 개발자는 해당 예외가 발생되지 않도록 코딩실수를 최대한 줄여야 한다.
// - 개발자는 필요에 따라서 try ~ catch 구문으로 예외상황 발생시 실행할 수행문을
// 작성할 수 있다.
// NullPointerException
// 참조변수가 null값을 가지고 있다. 즉 그 참조변수는 객체를 참조하고 있지 않는 상태다.
// 그 참조변수로 해당 클래스에서 제공하는 속성이나 기능을 사용하려는 경우 발생하는 예외다.
// String text = null;
// System.out.println(text.length());
// IndexOutOfBoundsException
// ArrayIndexOutOfBoundsException
// 배열의 인덱스범위를 벗어난 인덱스를 사용했을 때 발생하는 예외다.
// StringIndexOutOfBoundsException
// 문자열의 길이를 초과한 인덱스를 사용했을 떄 발생하는 예외다.
// String[] names = {"김유신", "강감찬", "이순신"};
// System.out.println(names[1]);
// System.out.println(names[2]);
// System.out.println(names[3]);
// String text = "안녕하세요";
// String subText = text.substring(0, 10);
// System.out.println("부분문자열 : " + subText);
// ArithmeticException
// 숫자를 0으로 나눌 때 발생하는 예외다.
// System.out.println(10/0);
// ClassCastException
// 클래스 형변환이 잘못되었을 때 발생하는 예외다.
// Phone p = new SmartPhone();
// SmartPhone p1 = (SmartPhone) p;
// FeaturePhone p2 = (FeaturePhone) p;
}
static class Phone {}
static class FeaturePhone extends Phone {}
static class SmartPhone extends Phone {}
}
CheckedException
- Exception 클래스와 Exception 클래스의 하위 클래스중에서 RuntimeException 클래스의 하위 클래스가 아닌 예외클래스다.
- 사용자의 잘못된 사용으로 인해 발생하는 오류들이다.
- 컴파일러가 예외처리 구현 여부를 반드시 체크한다.
- 예외처리 관련 코드가 구현되어 있지 않으면 컴파일 오류가 발생한다.
- 최신의 라이브러리나 프레임워크에서는 CheckedException의 사용비중이 점점 줄어들고 있다.
- 주요 클래스
- Exception
- 모든 Checked Exception의 부모 클래스다.
- ClassNotFoundException
- 클래스파일을 찾을 수 없을 때 발생하는 예외클래스다.
- IOException
- 읽기/쓰기 하는 도중 오류가 발생했을 때 발생하는 예외클래스다.
- 네트워크를 통해서 다른 컴퓨터와 데이터 교환중 오류가 발생했을 때 발생하는 예외클래스다.
- FileNotFoundException
- 파일을 찾을 수 없을 때 발생하는 예외 클래스다.
- SQLException
- 데이터베이스 엑세스 작업 중 오류가 발생했을 때 발생하는 예외클래스다.
- Exception
예외처리하기
- try ~ catch 구문을 사용해서 직접 에외를 처리할 수 있다.
- throws를 사용해서 예외처리를 위임할 수 있다.
try ~ catch 구문으로 예외처리하기
-
예외처리는 try ~ catch 구문을 사용한다.
-
try ~ catch 구문 작성법
try { 예외발생이 예상되는 수행문; 예외발생이 예상되는 수행문; 수행문; } catch(예외클래스타입 변수명) { } catch(예외클래스타입 변수명) { } catch(Exception 변수명) { }
-
try 블록에서는 예외발생이 예상되는 수행문을 적는다.
-
catch 블록은 try 블록에서 예외가 발생했을 때 해당 예외를 잡는다.
-
catch 블록에서 예외를 잡지않으면 프로그램이 비정상적으로 종료된다.
-
try 블록에서 여러 종류의 예외발생이 예상되는 수행문을 적었을 경우에는 그 예외의 종류만큼 catch 블록을 추가한다.
-
catch 블록에서는 발생한 예외를 잡고, 그 예외발생시 실행할 수행문을 적는다.
-
catch 블록에서는 작업내용
- 발생한 예외정보를 로그로 기록하기
- 사용자에게 에외발생원인 안내하기
- 개발자에게 오류 수정을 위한 디버깅메세지 출력하기
- 발생한 예외를 다른 예외로 바꾸기
-
catch 블록을 작성할 때는 부모예외클래스를 잡는 catch블록을 아래쪽에 적는다.
-
맨 마지막 catch 블록에는 Exception 클래스를 지정해서 예상하지 못한 예외도 잡을 수 있도록 한다.
-
try ~ catch 구문으로 에외처리시 수행문 실행
try { 예외발생이 예상되는 수행문1; 수행문2; 수행문3; } catch (발생이예상되는예외클래스명 변수명) { 예외 발생시 실행될 수행문4; 예외 발생시 실행될 수행문5; } 수행문6;
- 수행문1에서 예외발생하지 않는 경우 실행되는 수행문
- 예외발생이 예상되는 수행문1
- 수행문2
- 수행문3
- 수행문6
- 수행문1에서 예외가 발생하는 경우 실행되는 수행문
- 예외발생이 예상되는 수행문1
- 예외 발생시 실행될 수행문4
- 예외 발생시 실행될 수행문5
- 수행문6
- 수행문1에서 예외발생하지 않는 경우 실행되는 수행문
throws로 예외처리 위임하기
- 메소드에서 발생하는 예외를 직접 처리하지 않고, 그 메소드를 호출하는 측에서 예외처리를 위임하는 것이다.
- throws 키워드를 사용해서 예외처리를 위임할 수 있다.
- 예외를 위임하기
public void method() throws 예외클래스명, 예외클래스명, ... { 예외발생이 예상되는 수행문; 예외발생이 예상되는 수행문; }
- 해당 메소드에서 예외처리와 관련한 코드의 작성을 할 필요가 없다.
- 예외처리를 각각의 메소드에서 직접 개별적으로 처리하지 않고, 한 군데에서 일괄처리하게 만들 수 있다.
예외클래스의 주요 API
- Throwable
- Error, Exception의 부모 클래스
- 오류와 관련된 모든 메소드들이 구현되어 있다.
- 모든 Error, Exception 클래스는 Throwable에 구현된 메소드를 상속받고, 사용할 수 있다.
- 특별한 경우가 아니면 사용자정의 예외클래스를 정의할 때 생성자만 정의해도 된다.
- 주요 생성자
- public Throwable() { ... }
- 기본생성자
- public Throwable(String message) { ... }
- 오류와 관련된 메세지를 전달받는 생성자
- public Throwable(String message, Throwable cause) { ... }
- 오류와 관련된 메세지 및 오류의 원인이 되었던 이전 예외객체를 전달받는 생성자
- public Throwable(Throwable cause) { ... }
- 오류의 원인이 되었던 이전 예외객체를 전달받는 생성자
- public Throwable() { ... }
- 주요 메소드
- Throwable getCouse()
- 오류발생의 원인이 되었던 오류를 반환한다.
- String getMessage()
- 오류와 관련된 상세한 메세지를 반환한다.
- void printStackTrace()
- 오류 발생과 관련되어서 실행되었던 코드를 화면에 출력한다.
- 오류검출을 위한 디버깅 작업에서 참조한다.
- void printStackTrace(PrintStream s)
- 오류 발생과 관련되어서 실행되었던 코드를 화면이 아닌 다른 곳에 출력하게 할 수 있다.
- void printStackTrace(PrintWriter s)
- 오류 발생과 관련되어서 실행되었던 코드를 화면이 아닌 다른 곳에 출력하게 할 수 있다.
- Throwable getCouse()
출처 : https://github.com/eungsu/documents/edit/master/01-java/10-%EC%98%88%EC%99%B8%EC%B2%98%EB%A6%AC.md
Author And Source
이 문제에 관하여(2021. 04. 19(월) TIL), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@eastgun_/2021.-04.-19월-TIL저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)