본문 바로가기
JAVA

[JAVA] 제네릭 타입 파라미터 범위를 한정(제한)

by 정공자씨 2024. 5. 3.

 

 

제네틱 타입 파라미터의 제한하기

제한된 타입 매개변수(Bounded Type Parameter)

제네릭에 타입을 지정함으로써, 컴파일 타임에 오류를 발견할 수 있어 안정성이 확보되지만
어떤 타입도 사용할 수 있기 때문에 자유로움

이 때문에, 클리스의 제네릭 타입 파라미터로 원하는 타입만 들어올 수 있도록 제한하는 방법을 만들었는데, 이것이 제한된 타입 매개변수(Bounded Type Parameter)

 

타입 파라미터의 범위를 한정하는 키워드

  1. 타입 파라미터의 상한을 제한 : extends
  2. 타입 파라미터의 하한을 제한 : super

 

 

 

타입 파라미터의 상한을 제한하기(extends)

사용 문법

<T extends [제한타입]>
  • 어떤 타입이라도 들어올 수 있는 일반적인 제네릭 타입인 T에
  • extends 키워드를 사용하여, 타입 파라미터의 범위를 제한함
  • extends를 사용하면 사용할 수 있는 타입의 상한을 정해놓는 것
  • 따라서, 제한한 타입은 물론이고, 그 하위의 타입까지만 사용할 수 있음

 

 

예제

1. 클래스 타입을 한정

  • 클래스의 인스턴스 생성 시에, 클래스에서 사용하는 데이터의 범위를 정할 수 있는데
  • 이 때 원하는 참조타입을 가장 최상한인 Number클래스로 정함
  • 사용할 수 있는 타입에는  가장 최상한인 Number클래스, 그 하위타입인(Integer, Double)까지 사용할 수 있음

 

 

2. 인터페이스 타입을 한정

  • extends 키워드 다음에 올 수 있는 타입에는 일반 클래스, 추상 클래스, 인터페이스 모두 가능
  • 인터페이스를 제한하는 경우에는, 인터페이스를 구현한 클래스만 제네릭 가능
// 인터페이스
interface Eating {
    public void eatingIt();
}

// 인터페이스를 구현하는 클래스
class Animal implements Eating {
    @Override
    public void eatingIt() {
        System.out.println("사료 먹기");
    }
}

// T의 범위 제한: 인터페이스(Eating) 구현한 클래스(Animal)만 제네릭 가능
class AnimalHome <T extends Eating> { // 사용될 데이터 타입이 Animal 객체로 제한
    Animal animal;

    public AnimalHome() {
        animal = new Animal();
    }
}
public class Test {
    public static void main(String[] args) {
        // 타입 파라미터에 인터페이스를 구현한 클래스만 올 수 있음
        AnimalHome<Animal> a = new AnimalHome<>();	
    }
}

 

 

 

3. 메서드의 타입 제한

public <T extends Number> void getAge(T num) {
	
}
  • 특정 메서드 내에서 선언부에 제네릭 타입을 사용하면, 해당 메서드의 매개변수 타입이 제한됨 
  • extends 사용
    • 매개변수의 범위를 가장 최상한인 Number클래스 그 하위타입인(Integer, Double)만 받겠다는 뜻

 

 

 

 

 

 

출처

 

 

1. Generic 기초

Java는 대표적인 정적 타입 언어입니다. 즉 컴파일 시점에 사용하는 변수의 타입이 결정되며, 따라서 명시적으로 변수의 타입을 지정하거나 추론이 가능해야합니다. 만약 클래스내 일부 변수에

cla9.tistory.com

 

☕ 자바 제네릭(Generics) 개념 & 문법 정복하기

제네릭 (Generics) 이란 자바에서 제네릭(Generics)은 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법을 의미한다. 객체별로 다른 타입의 자료가 저장될 수 있도록 한다. 자바에서 배

inpa.tistory.com