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
    
    
  반응형
    
    
    
  'Language > Java' 카테고리의 다른 글
| [Java] Optional<T> 기본 (0) | 2023.02.06 | 
|---|---|
| [Java] SQL Mapper 만들기 (0) | 2022.10.20 | 
| [Java] Generic 와일드 카드 (0) | 2022.06.25 | 
| [Java] Generic 제한 (0) | 2022.06.21 | 
| [Java] Generic 기초 (1) | 2022.06.11 | 
 
		
	
                
                
                
                
                
                
                
                                                
                
                
                
 
										
									 
										
									
댓글