
제네릭 너가 뭔데..! 뭔데!!
예외도 객체로 취급되고 클래스로 이루어져있다. → 직접 생성 가능
throw
new 를 통해 생성된 예외를 프로그램에 적용 시킴
체크 예외
- 컴파일 시점에 검사가 이루어짐 → 처리를 강제함
Exception- 일단 예외를 발생시키고 프로그램을 종료시킴
언체크 예외
예외 처리
try{
//예외 발생 가능성이 있는 명령문 -> 예외 인스턴스가 생김
} catch(예외타입 변수명){
//예외 발생시 처리할 명령문
} finally {
//예외 처리와 상관없이 명령문
}
public class 클래스명<문자>{
public 문자 field1;
public 문자 method1(){
}
}
→ <문자> 의 데이터 타입을 무조건 지정해줘야됨
→ 나중에 new 클래스<String>(); 로 타입을 확정해주면 클래스 내부에 <문자>로 선언된 모든 객체가 String타입으로 변경됨
→ static 변수는 제네릭 타입이 적용되지 않지만 static으로 선언된
| 타입 | 구분 |
|---|---|
| Type | |
| Element | |
| Key | |
| Value | |
| Number |
제네릭 제한
public class 클래스<T extends Number>
// -> T 는 Numer 타입의 자체이거나 상속받은 하위 타입 이여야함
위와 같은 상황일 경우
<T extends B & A>
--------------------
T는 B의 하위 클래스이면서 A의 구현체여야 올 수 있음
-> C 가능
method1(Clazz<? extends C> a){
//C를 포함한 C의 하위 타입들만 올 수 있음
// -> C의 상위 타입들은 올 수 없음
}
method1(Clazz<? super C> a){
//C를 포함한 C의 상위 타입들만 올 수 있음
// -> C를 상속받은 타입들은 올 수 없음
}
📍제네릭은 아직 값이 참조되지 않았기 때문에 NULL이 들어갈 수 있도록 참조 자료형만 매핑됨
Optional 예제