데브코스 7일차 TIL

Heesu Song·2025년 3월 18일

데브코스 - 백엔드

목록 보기
4/32
post-thumbnail

제네릭 너가 뭔데..! 뭔데!!

JAVA

예외와 오류

예외도 객체로 취급되고 클래스로 이루어져있다. → 직접 생성 가능

throw

new 를 통해 생성된 예외를 프로그램에 적용 시킴

  • 예외 발생 시점에 따라 체크 예외, 언체크 예외로 나뉨

체크 예외

  • 컴파일 시점에 검사가 이루어짐 → 처리를 강제함
  • Exception
  • 일단 예외를 발생시키고 프로그램을 종료시킴

언체크 예외

예외 처리

try{
//예외 발생 가능성이 있는 명령문 -> 예외 인스턴스가 생김
} catch(예외타입 변수명){
//예외 발생시 처리할 명령문
} finally {
//예외 처리와 상관없이 명령문
}
  • catch가 있으면 프로그램을 종료하지 않고 그대로 실행함

오류

  • try - catch로 잡으면 안됨❗️
  • 프로그램 내부에서 해결할 수 없는 문제

제네릭

  • 특정 메서드에 매개변수 타입을 확정하기 어려울 때
  • 혹은 나중에 바꾸거나 범용성이 떨어진다고 느낄 때
  • “데이터 타입을 일반화 한다”
public class 클래스명<문자>{
	
	public 문자 field1;
	
	public 문자 method1(){
	
	}
}

→ <문자> 의 데이터 타입을 무조건 지정해줘야됨

→ 나중에 new 클래스<String>(); 로 타입을 확정해주면 클래스 내부에 <문자>로 선언된 모든 객체가 String타입으로 변경됨

→ static 변수는 제네릭 타입이 적용되지 않지만 static으로 선언된

타입구분
Type
Element
Key
Value
Number

제네릭 제한

public class 클래스<T extends Number>

// -> T 는 Numer 타입의 자체이거나 상속받은 하위 타입 이여야함
  • 다중 제약

image.png

위와 같은 상황일 경우

<T extends B & A>
--------------------
TB의 하위 클래스이면서 A의 구현체여야 올 수 있음
-> C 가능
  • 상한 제한
method1(Clazz<? extends C> a){
//C를 포함한 C의 하위 타입들만 올 수 있음
// -> C의 상위 타입들은 올 수 없음
}
  • 하한 제한
method1(Clazz<? super C> a){
//C를 포함한 C의 상위 타입들만 올 수 있음
// -> C를 상속받은 타입들은 올 수 없음
}

📍제네릭은 아직 값이 참조되지 않았기 때문에 NULL이 들어갈 수 있도록 참조 자료형만 매핑됨

Optional 예제

❓메서드에서 제네릭을 선언할 때의 방식 헷갈림

  • 메서드에서 제네릭을 선언할 때 가 메서드 선언부 앞에 따로 있는 이유가 뭘까
  • 그러면 일반 메서드 선언과 다른 부분은 제네릭 메서드를 선언할때는 반환타입 앞에 제네릭 타입을 추가해줘야함
  • 제네릭 클래스 안에서 일반적인 메서드를 선언할 때와 제네릭 메서드를 선언할 때의 차이가 헷갈림
  • 제네릭 메서드 선언하는 방법이 좀 헷갈린다
  • 제네릭 클래스 내부에서 제네릭 메서드를 선언할 때 클래스와 다른 제네릭 타입으로 선언하는 것이 가능한지 → 별개로 선언되는거기 때문에 가능하다
profile
Abong_log

0개의 댓글