[Java] 제네릭 메소드

이준영·2023년 12월 11일
0

🟫 Java

목록 보기
17/21
post-thumbnail

요약

1. 제네릭 메소드 정의
2. 제네릭 메소드의 제한된 타입 매개변수 선언

1. 제네릭 메소드

클래스 전부가 아닌 메소드 하나에 대해서만 제네릭 선언을 하고 싶을 경우 제네릭 메소드를 선언할 수 있습니다.


class Box<T> {
    private T ob;
    
    public void set(T o) {
        ob = o;
    }
    public T get() {
        return ob;
    }
}

class BoxFactory {

	//제네릭 메소드
    public static <T> Box<T> makeBox(T o) {
        Box<T> box = new Box<T>();
        box.set(o);
        return box;
    }
}

static 옆의 < T >는 제네릭 클래스에서 Box< T > 와 같다고 생각하면 이해하기 편합니다.

public static <T> Box<T> makeBox(T o)

//<T>를 지워보면 Box<T>를 반환하는 메소드라는걸 파악하기 쉽다.
public static Box<T> makeBox(T o) 
제네릭 클래스와 제네릭 메소드의 타입 매개변수 T 결정 시점 차이
  • 제네릭 클래스 - 인스턴스 생성 시점
Map<String,Integer> map = new HashMap<>();
  • 제네릭 메소드 - 메소드 호출 시점
Box<String> sBox = BoxFactory.<String>makeBox("Sweet");
Box<Double> dBox = BoxFactory.<Double>makeBox(7.59);   //오토박싱 진행
❗️ < String>, < Double>은 생략 가능
Box<String> sBox = BoxFactory.makeBox("Sweet");
Box<Double> dBox = BoxFactory.makeBox(7.59);   //오토박싱 진행


2. 제네릭 메소드 타입 매개변수 제한하기

제네릭 클래스에서 extends 키워드를 통해 타입 인자로 올 수 있는 클래스를 제한할 수 있습니다.

class BoxFactory {
    public static <T extends Number> Box<T> makeBox(T o) {
        Box<T> box = new Box<T>();
        box.set(o);
        return box;
    }
    public static <T extends Number> T openBox(Box<T> box){
    	box.get().intValue(); // 타입 매개변수를 제한하였기에 Number의 메소드 호출 가능
        return box.get();
    }
}
profile
작은 걸음이라도 꾸준히

0개의 댓글