https://www.youtube.com/watch?v=n28M8iryFPw
| 제네릭(Generic)
다양한 타입의 객체들을 다루는 메서드나 클래스에 컴파일 시의 타입 체크를 해주는 기능
=> 객체의 타입 안정성을 높이고 , 형변환의 번거로움이 줄어든다.
제네릭 구조
public class Box<T> {}
T : 타입 매개변수
Box<T> : 제네릭 클래스
제네릭의 장점
1) 강력한 타입 체크를 해준다.
2) 형변환을 하지 않아도 된다.
제네릭 사용법
참조변수와 생성자에 대입된 타입이 일치해야 한다.
ex)
Box<Apple> appleBox = new Box<Apple>();
Box<Grape> grapeBox = new Box<Grape>();
Box<Fruit> fruitBox = new Box<Apple>(); => X apple이 fruit을 상속해도 불가능하다.
제네릭 클래스가 상속 관계인 것은 괜찮다.
Box<Fruit> fruitBox = new FruitBox<Fruit>();
List<Fruit> fruits = new ArrayList<Fruit>();
Box<Fruit> grapeBox = new FruitBox<Apple>(); => X 단, 여전히 대입되는 타입은 같아야 한다.
제한된 제네릭
public class Box<T>{
List<T> items = new ArrayList<>();
void add(T item){
items.add(item);
}
}
=> 제네릭의 문제점 내가 넣고싶은 타입만 넣고 싶은데 위와 같은 T가 있을 때 어떤 타입이든 다 들어올 수 있음
public class Box<T extends Fruit>{
List<T> items = new ArrayList<>();
void add(T item){
items.add(item);
}
}
=> Fruit을 상속하는 타입만 올 수 있다.
제네릭의 타입 매개변수
T - Type
E - Element
K - Key
V - Value
N - Number
사용자 본인이 원하는 대로 표기하여 사용해도 문제가 되지 않지만, 이와 같이 표기하는 것이 관례이다.
제네릭 메서드
public <T> T foo(List<T> list){}
<T> : 타입 매개변수
T : 리턴 타입
foo : 메소드 명
List<T> list : 매개변수
***만약 전달되는 타입 매개변수의 범위를 제한하고 싶다면?
public <T> T foo(List<T extends Fruit> list){} => X
public <T extends Fruit> T foo(List<T> list){} => O
제네릭 메서드의 사용
제네릭 메서드의 타입과 제네릭 클래스의 타입은 서로 다른 것이다.
public class Box<T>{
public <T> void printParamClass(T t){
System.out.println(t.getClass());
}
}
ex)
Box<Fruit> box = new Box<>();
box.printParamClass("String");
box.printParamClass(1);
box.printParamClass(3.14);
만약 메서드의 타입과 클래스의 타입이 같다면 각 타입이 전달될 수 없다.
***제네릭 메서드는 제네릭 클래스가 아닌 일반 클래스에서도 사용이 가능
public class MyClass{
public <T> void printParamClass(T t){
System.out.println(t.getClass());
}
}
와일드 카드
? 기호로 표현되며, 어떠한 타입도 될 수 있다.
사용
와일드 카드를 사용하여 모든 타입이 들어올 수 있도록 수정
public static void printList(List<? extends Object> list){
for(Object elem : list){
System.out.println(elem + " ");
}
'IT Study > YouTube 영상 후기' 카테고리의 다른 글
10분 테코톡 - 웹 접근성 & 표준 (0) | 2022.12.24 |
---|---|
10분 테코톡 - 정규 표현식 (0) | 2022.12.24 |
10분 테코톡 - MVC 패턴 2 (0) | 2022.12.24 |
10분 테코톡 - MVC 패턴 1 (0) | 2022.12.24 |
10분 테코톡 - OOP(객체지향 프로그래밍) (0) | 2022.12.23 |
댓글