ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 이것이 자바다 | 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> {...}

     

     

     

     

     

     

     

     

     

     

     

     

     

     

Designed by Tistory.