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. 28. 09:42

지네릭 메서드

지네릭 타입이 선언된 메서드(타입 변수<T>는 메서드 내에서만 유효)

static <T> void sort(List<T> list, Comparator<? super T> c)

 

클래스의 타입 매개변수<T>와 메서드의 타입 매개변수 <T>는 별개

FruitBox<T>와 static <T>는 다른 타입 변수이다

static <T>는 static 메서드 안에서만 사용가능하다

class FruitBox<T> { // 지네릭 클래스
    ...
    // 지네릭 메서드
    static <T> void sort(List<T> list, Comparator<? super T> c) {
        ...
    }
}

 

메서드를 호출할 때마다 타입을 대입해야 된다(대부분 생략 가능)

static <T extends Fruit> Juice makeJuice(FruitBox<T> box) {
    String tmp = "";

    for(Fruit f : box.getList())
        tmp += f + " ";
    return new Juice(tmp);
}

 

지네릭 클래스는 객체를 생성할 때마다 지네릭 타입을 대입하지만, 지네릭 메서드는 메서드를 호출할 때마다 타입을 대입해야 한다

makeJuice를 호출할 때마다 맞는 타입(Fruit, Apple)을 대입해야 한다

FuritBox<Fruit> furitBox = new FruitBox<Furit>();
FuritBox<Apple> appleBox = new FruitBox<Apple>();
    ...
    
System.out.println(Juicer.<Fruit>makeJuice(fruitBox)); // Fruit 타입 대입
System.out.println(Juicer.<Apple>makeJuice(appleBox)); // Apple 타입 대입

System.out.println(Juicer.makeJuice(fruitBox)); // <Fruit> 생략 가능, 에러 발생할 경우 타입 적기
System.out.println(Juicer.makeJuice(appleBox)); // <Apple> 생략 가능, 에러 발생할 경우 타입 적기

 

메서드를 호출할 때 타입을 생략하지 않을 때는 클래스 이름 생략 불가

System.out.println(<Fruit>makeJuice(fruitBox)); // 에러, 클래스 이름 생략 불가
System.out.println(this.<Fruit>makeJuice(fruitBox)); // OK
System.out.println(Juicer.<Fruit>makeJuice(fruitBox)); // OK

 

지네릭 메서드와 와일드 카드 메서드 바꿔서 사용가능(둘 다 FruitBox, AppleBox 가능하기 때문)

와일드 카드: 하나의 참조변수로 서로 다른 타입이 대입된 여러 지네릭 객체를 다룰 수 있다

지네릭: 메서드를 호출할 때마다 다른 지네릭 타입을 대입할 수 있다

와일드 카드를 사용할 수 없는 경우 지네릭 메서드를 사용하면 된다

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

열거형(enum)  (0) 2023.07.30
지네릭 형변환  (0) 2023.07.29
와일드 카드 <?>, 지네릭 메서드  (0) 2023.07.28
제한된 지네릭 클래스, 지네릭스의 제약  (0) 2023.07.27
지네릭스 용어, 지네릭 타입과 다형성  (0) 2023.07.26