본문 바로가기
java

Generics 02 제네릭스 용어, 제네릭 타입과 다형성

by 킹차니 2022. 1. 2.

제네릭스 용어

Box<T> 제네릭 클래스. 'T의 Box' 또는 'T Box'라고 읽는다.
T      타입 변수 또는 타입 매개변수.(T는 타입 문자)
Box    원시 타입(raw type)

 

class Box <T> {} ← 제니릭 클래스 선언

사용시:
Box<String> b = new Box<String>(); ← String은 대입된 타입(매개변수화된 타입)

 

 

 제네릭 타입과 다형성

 

참조변수와 생성자의 타입은 일치해야 한다.

ArrayList<TV> tvList = new ArrayList<TV>(); // OK
ArrayList<Product> tvList = new ArrayList<TV>(); // ERROR (조상 자손 관계라도 소용없다.)

 

제네릭 클래스간의 다형성은 성립된다.

List<TV> tvList = new ArrayList<TV>(); // OK : ArrayList가 List구현
List<TV> tvList = new LinkedList<TV>(); // OK : LinkedList가 List구현

 

매개변수의 다형성도 성립

List<Product> tvList = new ArrayList<TV>(); // Product는 TV, Audio의 조상클래스
list.add(new Product()); // OK
list.add(new TV());      // OK
list.add(new Audio());   // OK
이는 ArrayList의 add메서드
boolean add(E e) 가 boolean add(Product e)로 바뀌었기 때문이다.

 

 

EX)

import java.util.ArrayList;
import java.util.List;

public class EX02 {
    public static void main(String[] args) {
        ArrayList<Product> productList = new ArrayList<Product>(); //Product 타입 저장가능
        ArrayList<TV> tvList = new ArrayList<TV>(); //TV 타입만 저장가능

        productList.add(new Product());// OK
        productList.add(new TV());     // OK
        productList.add(new Audio());  // OK

//        tvList.add(new Product());  // ERROR
        tvList.add(new TV());         // OK
//        tvList.add(new Audio());    // ERROR

        printAll(productList);
//        printAll(tvList);   // ERROR
    }

    private static void printAll(ArrayList<Product> list) {
        for (Product product : list) System.out.println(product);
    }
}

 

 

출처: 남궁성님 유튜브 강의
https://www.youtube.com/user/MasterNKS

'java' 카테고리의 다른 글

Generics 04 제한된 제네릭 클래스(제네릭스의 제약)  (0) 2022.01.03
Generics 03 Iterator, HashMap과 제네릭스  (0) 2022.01.03
Generics 01 제네릭스란?  (0) 2021.12.31
Lambda 07 Collector  (0) 2021.12.30
Optional  (0) 2021.12.30