-
이것이 자바다 | 13장 제네릭JAVA/이것이 자바다 2022. 8. 3. 18:08
📍제네릭을 사용해야 하는 이유
📎컴파일 시 강한 타입 체크를 할 수 있음
📎타입 변환(casting)을 제거함
📍제네릭 타입 (class<T>, interface<T>)
📎모든 종류의 객체를 저장(Object)하면서 타입 변환이 발생하지 않도록 하는 방법 => 제네릭
Box<String> box = new Box<String>(); // Box 클래스 내부 public class Box<String> { private String t; public void set(String t) { this.t = t; } public String get() { return t; } }
📍멀티 타입 파라미터 (class<K, V, ...>, interface<K, V, ...>)
📎제네릭 타입은 두 개 이상의 멀티 파라미터 사용이 가능함
Product<Tv, String> product1 = new Product<Tv, String>(); // new Product<>(); 도 가능 product1.setKind(new Tv()); product2.setModel("스마트Tv"); Tv tv = product1.getKind(); String tvModel = product1.getModel();
📍제네릭 메소드 (<T, R> R method(T t))
📎제네릭 메소드는 매개 타입과 리턴 타입으로 타입 파라미터를 갖는 메소드를 말함
📎제네릭 메소드 선언 방법
public <타입파라미터, ...> 리턴타입 메소드명(매개변수, ...) {...} // 예시 public <T> Box<T> boxing(T t) {...}
📍제한된 타입 파라미터 (<T extends 최상위타입>)
📎타입 파라미터 뒤에 extends 키워드를 붙이고 상위 타입을 명시하면 제한돈 파라미터가 선언됨
상위 타입에는 인터페이스도 들어갈 수 있음
public <T extends 상위타입> 리턴타입 메소드(매개변수, ...) { ... }
📎메소드의 중괄호 {} 안에서 타입 파라미터 변수로 사용 가능한 것은 상위 타입의 멤버로 제한됨
public <T extends Number> int compare(T t1, T t2) { double v1 = t1.doubleValue(); double v2 = t2.doubleValue(); return Double.compare(v1, v2); }
📍와일드카드 타입 (<?>, <? extends...>, <? super ...>)
📎보통 ?를 와일드카드라고 부름
제네릭타입<?> : 제한 없음
제네릭타입<? extends 상위타입> : 상위 클래스 제한
제네릭타입<? super 하위타입> : 하위 클래스 제한
📍제네릭 타입의 상속과 구현
제네릭 타입도 다른 타입처럼 부모 클래스가 될 수 있음
public class ChildProduct<T, M> extends Product<T, M> {...}
'JAVA > 이것이 자바다' 카테고리의 다른 글
이것이 자바다 | 12장 멀티 스레드 (0) 2022.07.23 이것이 자바다 | 11장 기본 API 클래스 (3) (0) 2022.07.21 이것이 자바다 | 11장 기본 API 클래스 (2) (0) 2022.07.15 이것이 자바다 | 10장 예외처리 (0) 2022.07.12 이것이 자바다 | 9장 중첩 클래스와 중첩 인터페이스 (0) 2022.07.12