반응형
제네릭(generic)이란?
✅ 쉽게 말하면?
자료형을 나중에 지정할 수 있는 틀
즉, 클래스나 메서드를 만들 때 타입을 고정하지 않고, 사용할 때 타입을 지정
✅ 예시
🔸 제네릭 없는 경우
ArrayList list = new ArrayList();
list.add(1);
list.add("하이");
System.out.println(list);
🔸 제네릭 사용한 경우
List<Integer> list = new ArrayList<Integer>();
list.add(1);
// list.add("하이"); 컴파일오류발생
System.out.println(list);
- 컴파일 시 타입 체크 가능 → 안전함
내가 제네릭클래스를 직접만들어 사용하면 더 와닿을 수도있음
Generic1 클래스
package generic;
public class Generic1<T> {
private T x;
public T getX() {
return x;
}
public void setX(T x) {
this.x = x;
}
}
그냥 타입매개변수(T) 만을 set , get 하는 코드뿐인 클래스
이때 타입매개변수(T)는 미리 지정하는것이 아닌 사용될 때 정해짐
Generic1<Integer> i = new Generic1<>();
i.setX(1);
//i.setX("ㅎㅎ");
Generic1<String> s = new Generic1<>();
//s.setX(1);
s.setX("ㅎㅎ");
다음과 같이 만들 때 타입이 정해지는 게 제네릭이라고 한다
2) 와일드카드에 대해 간단히
✅ 와일드카드란?
제네릭에서 ?는 **"어떤 타입이든 올 수 있음"**을 의미해.
즉, 타입을 특정하지 않고 유연하게 처리하고 싶을 때 사용함.
✅ 사용 목적
- 다양한 제네릭 타입을 하나의 메서드나 클래스에서 처리하고 싶을 때
- 상속 관계가 있는 제네릭 타입끼리도 호환성을 가지도록 만들기 위해
참고!!! 와일드카드는 제네릭 타입이나, 제네릭 메서드를 선언하는 것이 아니다.
와일드카드는 이미 만들어진 제네릭 타입을 활용할 때 사용한다.
다음예제는 List<T>를 이용한 예제
package generic;
import java.util.ArrayList;
import java.util.List;
public class WildEx {
public static void main(String[] args) {
List<Object> list = new ArrayList<>();
//wild1(list); Object 와 Number는 다른관계
wild2(list);
ArrayList<Integer> list1 = new ArrayList<>();
wild1(list1);
//wild2(list1); Integer는 String의 부모가아님
ArrayList<String> list2 = new ArrayList<>();
//wild1(list2); String 와 Number는 다른관계
wild2(list2);
}
//?가 Number의 자식 (Integer ,Float , Double 만 들어올수있음)
private static void wild1(List<? extends Number > animals) {
System.out.println("접근성공");
}
//?가 String의 부모 (String , Object)
private static void wild2(List<? super String > animals) {
System.out.println("접근성공");
}
}
다음 List<? extends Number>는 오직 숫자의 wrapper를 가지는 List만 받겠다는 의미이며
List<? super String>는 오직 String의 부모 (자신포함 , Object) 만 받겠다는 의미
'지식공부' 카테고리의 다른 글
AOP(Aspect-Oriented Programming) (0) | 2025.07.16 |
---|---|
기본형 , 참조형에 대해 (0) | 2025.07.15 |
다형성예제 (remind) (0) | 2025.07.14 |
스프링컨테이너 , 커넥션풀에 대해 (0) | 2025.07.14 |
싱글톤패턴과 의존성주입(DI)에 대해 (0) | 2025.07.13 |