본문 바로가기
개발 관련 지식/JAVA

제한된 타입 파라미터

by 권태일1147 2020. 4. 6.

숫자를 연산하는 제네렉 메소드는 매개값으로 Number 타입 또는 하위 클래스인 Byte, Short, Integer, Long, Double 의 인스턴스만 가져야 한다. 이것이 제한된 타입 파라미터가 필요한 이유이다. 

제한된 타입 파라미터를 사용하려면 타입 파라미터 뒤에 extends로 클래스명이나 인터페이스명을 명시하면 된다.

public <T extends 상위타입> 리턴타입 메소드(매개변수, ...) {...}

타입 파라미터에 지정되는 구체적인 타입은 상위 타입이거나 상위 타입의 하위 또는 구현 클래스만 가능하다. 주의할 점은 메소드의 중괄호 {} 안에서 타입 파라미터 변수로 사용 가능한 것은 상위 타입의 멤버(필드, 메소드)로 제한된다.

 

다음 제한 타입 파라미터를 적용한 예제이다.

// Util.java

public class Util {
    public static <T extends Number> int comp(T t1, T t2) {
        double v1 = t1.doubleValue();
        double v2 = t2.doubleValue();
        return Double.compare(v1, v2);
    }
}

t1, t2 매개변수는 Number 또는 Number의 하위 타입의 값들이 들어갈 수 있고, doubleValue() 메소드는 숫자를 double 타입으로 바꿔준다. Double.compare() 메소드는 앞의 매개변수가 작으면 -1, 같으면 0, 크면 1을 반환한다.

// Main.java

public class Main {
    public static void main(String[] args) {
        int result1 = Util.comp(10, 20); // Util의 타입 파라미터가 Number 타입으로 제한되었기 때문에 comp의 매개변수가 Number와 동등하거나 낮아야 한다.
        System.out.println(result1);
        
        int result2 = Util.comp(4.5, 3);
        System.out.println(result2);
    }
}

결과는 -1, 1로 나온다.

'개발 관련 지식 > JAVA' 카테고리의 다른 글

람다식  (0) 2020.04.07
제네릭 타입의 상속과 구현  (0) 2020.04.06
제네릭 메소드  (0) 2020.04.06
제네릭  (0) 2020.04.06
멀티 스레드 개념  (0) 2020.04.04