기록 > 기억
[JAVA] 제네릭 타입 본문
제네릭 타입
● 타입을 파라미터로 가지는 클래스와 인터페이스
public class 클래스명<T> { ... }
public interface 인터페이스명<T> { ... }
/* 타입 파라미터에는 구체적인 타입을 지정해야 함 */
● 비제네릭 VS 제네릭
//제네릭 타입 사용안함
List list = new ArrayList();
//Object 타입으로 자동 타입 변환
list.add("HELLO"); //String → Object
list.add(123); //int → Object
//값을 가져올 때 강제 타입 변환 해줘야 함!
String str = (String)list.get(0); //Object → String
int num = (int)list.get(1); //Object → int
/* 장점 → 모든 종류의 객체를 저장할 수 있음 */
/* 단점 → 저장할 때 Object로 타입변환하고 값을 가져올 때 또 타입변환 해줘야 함 */
//제네릭 타입 사용
List<String> list = new ArrayList<String>();
//String 타입만 저장가능
list.add("HELLO");
list.add("123");
//저장된게 String 타입이므로 값을 가져올 때 타입 변환 할 필요없음!
String str = list.get(0);
String num = list.get(1);
/* 제네릭을 사용하면 불필요한 타입 변환을 안해도 됨 */
● 멀티 타입 파라미터
public class 클래스명<A, B, ...> { ...}
public interface 인터페이스명<A, B, ...> { ... }
● 와일드카드 타입 → 제네릭 타입을 매개변수나 리턴타입으로 사용할때 제한하기 위함
<?> //제한없음
<? extends 상위타입> //상위 클래스 제한
<? super 상위타입> //하위 클래스 제한
//A ← B ← C ← D ← E
class A {}
class B extends A {}
class C extends B {}
class D extends C {}
class E extends D {}
<?> //A, B, C, D, E 가능
<? extends C> //C, D, E 가능 → C 클래스와 자식 클래스만 가능 (상위 클래스 제한)
<? super C> //A, B, C 가능 → C 클래스와 상위 클래스만 가능 (하위 클래스 제한)
'IT국비지원' 카테고리의 다른 글
[JAVA] JDBC 연결 (MySQL) (0) | 2021.11.15 |
---|---|
[JAVA] 네트워크 (0) | 2021.11.11 |
[JAVA] 컬렉션 (List, Set, Map) (0) | 2021.11.11 |
[JAVA] 스레드 (0) | 2021.10.27 |
[JAVA] 기본 API 클래스 (0) | 2021.10.26 |
[JAVA] 문자열 (String) (0) | 2021.10.26 |
[JAVA] 예외 처리 (0) | 2021.10.25 |
Comments