Notice
Recent Posts
Recent Comments
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

충분히 쌓여가는

지네릭스 용어, 지네릭 타입과 다형성 본문

Java/JAVA3

지네릭스 용어, 지네릭 타입과 다형성

빌드이너프 2023. 7. 26. 09:56

지네릭스 용어

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


지네릭 타입과 다형성

class Product {}
class Tv extends Product {}
class Audio extends Product {}

 

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

ArrayList<Tv> list = new ArrayList<Tv>(); // OK, 일치
ArrayList<Product> list = new ArrayList<Tv>(); // 에러, 불일치

 

지네릭 클래스간의 다형성은 성립(여전히 대입된 타입은 일치해야한다)

List<Tv> list = new ArrayList<Tv>(); // OK, 다형성. ArrayList가 List 구현
List<Tv> list = new LinkedList<Tv>(); // OK, 다형성. LinkedList가 List 구현

 

매개변수의 다형성도 성립

ArrayList<Product> list = newArrayList<Product>();
list.add(new Product());
list.add(new Tv()); // OK
list.add(new Audio()); // OK

 

코드

import java.util.*;

class Product {}
class Tv extends Product {}
class Audio extends Product {}

class GenericesPolymorphismTest {
    public static void main(String[] args) {
        ArrayList<Product> productList = new ArrayList<Product>();
        ArrayList<Tv>      tvList = new ArrayList<Tv>();
//  	ArrayList<Product> tvList = new ArrayList<Tv>(); // 에러.
// 		List<Tv>           tvList = new ArrayList<Tv>(); // OK. 다형성

        productList.add(new Tv()); // public boolean add(Product e)
        productList.add(new Audio());

        tvList.add(new Tv()); // public boolean add(Tv e)
        tvList.add(new Tv());
        // tvList.add(new Audio()); // 에러 Tv나 Tv의 자손만 가능

        printAll(productList);
        // printAll(tvList); // 컴파일 에러가 발생한다.
    }

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

Tv@27f674d
Audio@1d251891

 

 

'Java > JAVA3' 카테고리의 다른 글

지네릭 메서드  (0) 2023.07.28
와일드 카드 <?>, 지네릭 메서드  (0) 2023.07.28
제한된 지네릭 클래스, 지네릭스의 제약  (0) 2023.07.27
타입 변수  (0) 2023.07.25
지네릭스 Generices  (0) 2023.07.25