Free Lines Arrow
본문 바로가기
Language/Java

[Java] Generic 제한

by skahn1215 2022. 6. 21.
728x90
반응형

Generic 제한

  • 제네릭의 접근 제한에 대해 알아본다.
  • 앞서 Generic 기초에서 모든 타입을 받을수 있다는 것을 알았다.
  • 하지만 타입을 제한 해야 되는 일이 필요하다면?

 

Generic 제한 필요성

  • Generic 기초에서 VehicleRepairService 에서 Vehicle 외에 House 타입도 지정할수 있었다.
  • 2022.06.11 - [Language/Java] - [Java] Generic 기초
  • VehicleRepairService 에 House 가 들어가면 안된다.
    하지만 모든 타입을 다 받게 해서 House 타입도 들어간다.
// House 타입이 가능하면 안됨
House house = new House();
VehicleRepairService<House> vehicleRepairRepairService = new VehicleRepairService<>();
vehicleRepairRepairService.repair(house);



public class VehicleRepairService<T> {
    public boolean isSupport(T t) {
        return (t instanceof Vehicle);
    }

    public void repair(T t){
        if (isSupport(t)) { // Vehicle type 이 아니면 수리 불가
            Vehicle vehicle = (Vehicle) t;
            System.out.println(vehicle.getType() + " 수리완료");
        } else {
            System.out.println("수리불가");
        }
    }
}

 

 

Generic 제한 선언

  • 아래와 같이 T extends Vehicle 을 선언해 주면 
  • Vehicle 을 상속 받은 객체만 지정 할 수 있다.
VehicleRepairService<T extends Vehicle>

 

 

Generic 제한 예제

  • 제네릭 예제 클래스 다이어그램
더보기

예제를 위한 클래스 다이어 그램

  • 이제 House 타입을 받을수 없기 때문에 타입 체크를 할 필요가 없다.
public class VehicleRepairService<T extends Vehicle> {
//    public boolean isSupport(T t) { 타입을 체크할 필요가 없음
//        return (t instanceof Vehicle);
//    }

    public void repair(T t) {
        Vehicle vehicle = t;
        System.out.println(vehicle.getType() + " 수리완료");
    }
}

 

public class Test {
    public static void main(String[] args) {

        VehicleRepairService<Vehicle> vehicleRepairService = new VehicleRepairService<>();
        VehicleRepairService<Boat> boatVehicleRepairService = new VehicleRepairService<>();
        VehicleRepairService<House> repairService = new VehicleRepairService<>(); // 에러 발생
    }
}

 

 

예제코드

https://github.com/rnrl1215/java-exercise/tree/main/src/main/java/generic/restriction

 

GitHub - rnrl1215/java-exercise

Contribute to rnrl1215/java-exercise development by creating an account on GitHub.

github.com

 

728x90
반응형

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

[Java] Generic 메서드  (0) 2022.06.25
[Java] Generic 와일드 카드  (0) 2022.06.25
[Java] Generic 기초  (0) 2022.06.11
[Java] String to LocalDateTime  (0) 2022.02.12
[Java] Double의 제한사항  (0) 2021.12.11

댓글