Language/Java

[Java] Generic 메서드

p8labs 2022. 6. 25. 16:16
728x90
반응형

Generic 메서드

  • 메서드 선언 부에 지네릭 타입이 선언된 메서드를 지네릭 메서드라고 한다.
  • 원래 static 메서드에는 타입 매개변수를 쓸수 없다.
    하지만 메서드에 제네릭 타입을 선언하고 사용하는 것은 가능하다
 public static <T extends Vehicle> void repair(VehicleContainer<T> vehicleContainer)

 

  • 사용할때는 아래와 같이 타입을 명시해 줘야 한다.
 VehicleServiceCenter.<Boat>repair(boatVehicleContainer);
 VehicleServiceCenter.<Car>repair(carVehicleContainer);

 

Generic 메서드 예제 1

  • 이제 선언부에 제네릭 타입을 선언해 줬기 때문에 매개변수로 지네릭을 받을수 있다.
@Slf4j
public class VehicleServiceCenter {
    public static <T extends Vehicle> void repair(VehicleContainer<T> vehicleContainer) {
        log.info("container list size : {}", vehicleContainer.getSize());
        for(Vehicle vehicle : vehicleContainer.getVehicleList()) {
            log.info("{} 수리완료", vehicle.toString());
        }
    }
}

 

Generic 메서드 예제 2

  • 매개변수를 여러개 받을수도 있다.
@Slf4j
public class VehicleServiceCenterV2 {
    public static <T extends Vehicle> void repair(VehicleContainer<T> vehicleContainer1, VehicleContainer<T> vehicleContainer2) {
        log.info("container list size : {}", vehicleContainer1.getSize());
        for(Vehicle vehicle : vehicleContainer1.getVehicleList()) {
            log.info("{} 수리완료", vehicle.toString());
        }

        log.info("container list size : {}", vehicleContainer2.getSize());
        for(Vehicle vehicle : vehicleContainer2.getVehicleList()) {
            log.info("{} 수리완료", vehicle.toString());
        }
    }
}

 

 

Test

public class Test {
    public static void main(String[] args) {
        Car car1 = new Car("car1");
        VehicleContainer<Car> carVehicleContainer = new VehicleContainer<>();
        VehicleContainer<Boat> boatVehicleContainer = new VehicleContainer<>();
        
        VehicleServiceCenter.<Boat>repair(boatVehicleContainer);
        VehicleServiceCenter.<Car>repair(carVehicleContainer);
        VehicleServiceCenterV2.<Boat>repair(boatVehicleContainer, boatVehicleContainer);
    }
}

 

 

예제코드

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

 

GitHub - rnrl1215/java-exercise

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

github.com

 

728x90
반응형