예외처리
- 확인된 예외처리 (Checked Exception)
- 컴파일 시점에 확인하는 예외.
- 반드시 예외 처리를 해줘야하는 예외.
- 미확인된 예외 (Unchecked Exception)
- 런타임 시점에 확인되는 예외.
- 예외 처리가 반드시 필요하지 않은 예외.
예외 정의
class OurBadException extends Exception {
public OurBadException() {
super("위험한 행동을 하면 예외처리를 꼭 해야합니다!");
}
}
super를 통해 Exception 클래스에 해당 문자열을 넘겨준다.
throws | throw |
메서드 이름 뒤에 붙어 이 메서드가 어떠한 예외사항을 던질 수 있는지 알려주는 예약어. | 메서드 안에서, 실제로 예외 객체를 던질 때 사용하는 예약어. |
여러 종류의 예외사항을 적을 수 있다. | 실제로 던지는 예외 객체 하나와 같이 써야 한다. |
일반 메서드의 return 키워드처럼 throw 아래의 구문들은 실행되지 않고, throw문과 함께 메서드가 종료된다. |
try ~ catch ~ finally
public class StudyException {
public static void main(String[] args) {
OurClass ourClass = new OurClass();
try {
// 1. 위험한 메소드의 실행을 "시도" 해 봅니다.
// "시도" 해보는 코드가 들어가는 블럭입니다.
ourClass.thisMethodIsDangerous();
} catch (OurBadException e) {
// 2. 예외가 발생하면, "잡아서" handling 합니다.
// 예외가 발생하는경우 "handling" 하는 코드가 들어가는 블럭입니다.
// 즉 try 블럭 내의 구문을 실행하다가 예외가 발생하면
// 예외가 발생한 줄에서 바로 코드 실행을 멈추고
// 여기 있는 catch 블럭 내의 코드가 실행됩니다.
System.out.println(e.getMessage());
} finally {
// 3. 예외의 발생 여부와 상관없이, 실행시켜야 하는 코드가 들어갑니다.
// 무조건 실행되는 코드가 들어가는 블럭입니다.
System.out.println("우리는 방금 예외를 handling 했습니다!");
}
}
}
- `try` - `catch` 는 각각 중괄호{} 를 통해 실행할 코드들을 담는다.
- `try` 단어의 “시도한다” 라는 뜻에 맞게 의 중괄호{} 안에는 예외가 발생할 수 있지만 실행을 시도할 코드를 담는다.
- `catch` 단어의 `“잡는다”`라는 의미에 맞게 중괄호{} 안에는 try 안에있는 코드를 실행하다가 예외가 났을때 실행할 코드를 담는다.
- catch 는 소괄호() 를 통해 어떤 예외클래스를 받아서 처리할지 정의해주어야 한다.
- catch 로 모든 예외를 다 받고 싶으면 Exception 을 넣어주면 된다.
- catch 로 일부 예외만 받아서 처리하고 싶으면 해당 예외 클래스명을 넣어주면 된다.
- 1개의 try 문에 catch 문은 여러개 사용할 수 있다. ex) 1try : 4catch
- 기존 `try - catch` 의 맨 마지막에 `finally` 를 붙여서 마지막에 반드시 실행할 코드를 넣을 수 있다.
제네릭
- 첫 번째로 제네릭의 효용은 타입 언어에서 “중복되거나 필요없는 코드를 줄여주는 것”.
- 두 번째 제네릭의 효용은 그러면서도 타입 안정성을 해치지 않는 것
// 1.
public class Generic<T> {
// 2.
private T t;
// 3.
public T get() {
return this.t;
}
public void set(T t) {
this.t = t;
}
public static void main(String[] args) {
// 4.
Generic<String> stringGeneric = new Generic<>();
// 5.
stringGeneric.set("Hello World");
String tValueTurnOutWithString = stringGeneric.get();
System.out.println(tValueTurnOutWithString);
}
}
이렇게 하면 `T`는 String이 되어 타입을 정할 수 있다.
'기타 > 개발일기' 카테고리의 다른 글
[TIL] Gradle, Tomcat, 테스트 코드, Lombok, Spring MVC, 정적 및 동적 페이지 (0) | 2024.01.17 |
---|---|
[TIL] 모던 자바(Java 8) (0) | 2024.01.05 |
[TIL] 프로세스와 쓰레드 (1) | 2024.01.04 |
[TIL] 클래스, 상속, 인터페이스 (0) | 2024.01.02 |
[TIL] JVM과 기본 문법 (1) | 2023.12.29 |