반응형
이번 글에서는 제네릭 인터페이스를 구현하는 방법을 배웁니다.
Rentable<P>라는 인터페이스에 타입 매개변수를 선언하고,
각 구현 클래스에서 해당 타입을 지정해 객체를 유연하게 생성하거나 반환할 수 있습니다.
📌 예제 코드
package ch13.sec02;
public interface Rentable<P> {
P rent(); // P 타입의 객체를 반환하는 추상 메서드
}
package ch13.sec02;
public class Home {
public void turnOnLight() {
System.out.println("전등을 켭니다.");
}
}
package ch13.sec02;
public class Car {
public void run() {
System.out.println("자동차가 달립니다.");
}
}
package ch13.sec02;
public class HomeAgency implements Rentable<Home> {
@Override
public Home rent() {
return new Home(); // Home 객체를 반환
}
}
package ch13.sec02;
public class CarAgency implements Rentable<Car> {
@Override
public Car rent() {
return new Car(); // Car 객체를 반환
}
}
package ch13.sec02;
public class GenericExample3 {
public static void main(String[] args) {
HomeAgency homeAgency = new HomeAgency();
CarAgency carAgency = new CarAgency();
Home home = homeAgency.rent();
Car car = carAgency.rent();
home.turnOnLight();
car.run();
}
}
💻 실행 결과
전등을 켭니다.
자동차가 달립니다.
💬 코드 설명
- Rentable<P> 인터페이스는 P 타입을 반환하는 rent() 메서드를 정의하고 있습니다.
- HomeAgency는 Rentable<Home>을 구현하여 집을 렌트할 수 있도록 구성되어 있고,
CarAgency는 Rentable<Car>을 구현해 자동차를 렌트할 수 있게 구성되어 있습니다. - 제네릭 덕분에 하나의 인터페이스로 여러 종류의 객체를 일관된 방식으로 처리할 수 있습니다.
- main()에서는 각각의 에이전시를 통해 객체를 받아 해당 객체의 고유 기능을 실행합니다.
💡 포인트 정리
- 제네릭 인터페이스를 선언하면, 구현 클래스에서 원하는 타입으로 구체화할 수 있습니다.
- Rentable<P>처럼 인터페이스에서 타입을 외부에 맡기면, 코드의 재사용성과 확장성이 크게 향상됩니다.
- 이 구조는 서비스 제공자-이용자 패턴, 팩토리 구조, 전략 패턴 등의 설계에서도 유용하게 사용됩니다.
📌 정리하자면, 제네릭 인터페이스는 타입에 구애받지 않고 범용적으로 사용할 수 있는 추상 구조를 만들어 줍니다.
Rentable<P>는 집이든 자동차든 원하는 타입의 객체를 반환할 수 있는 공통된 구조를 제공하고,
각 구현 클래스는 자신에게 맞는 구체 타입으로 구현하면 됩니다.
'Java > 자바 정리' 카테고리의 다른 글
124. 숫자만 비교하자! – 제한된 제네릭(T extends Number) (0) | 2025.05.15 |
---|---|
123. 메서드에도 제네릭을? – 제네릭 메서드 Boxing() (0) | 2025.05.15 |
122. 제네릭 객체도 비교할 수 있다 – 같은 타입끼리의 compare() 메서드 (0) | 2025.05.15 |
120. 타입 두 개도 OK! – 제네릭 멀티 타입 파라미터 (0) | 2025.05.15 |
119. 타입을 자유롭게! – 제네릭 클래스 만들기 (0) | 2025.05.15 |
118. 클래스 구조를 꿰뚫어보자 – Reflection으로 생성자·필드·메소드 분석하기 (0) | 2025.05.14 |