앞선 인터페이스 포스팅에서 확장하여 예제를 공유드립니다.
// 일반적인 인터페이스와 관련된 예제
// 자바 인터페이스 정의
public interface Vehicle {
void startEngine();
void stopEngine();
}
// 다양한 구현 클래스
public class Car implements Vehicle {
@Override
public void startEngine() {
System.out.println("Car engine started");
}
@Override
public void stopEngine() {
System.out.println("Car engine stopped");
}
}
public class Boat implements Vehicle {
@Override
public void startEngine() {
System.out.println("Boat engine started");
}
@Override
public void stopEngine() {
System.out.println("Boat engine stopped");
}
}
// 플러그인 아키텍처 예제
public class VehicleManager {
private List<Vehicle> vehicles = new ArrayList<>();
public void addVehicle(Vehicle vehicle) {
vehicles.add(vehicle);
}
public void startAllEngines() {
for (Vehicle vehicle : vehicles) {
vehicle.startEngine();
}
}
}
public class Main {
public static void main(String[] args) {
VehicleManager manager = new VehicleManager();
Vehicle car = new Car();
Vehicle boat = new Boat();
manager.addVehicle(car);
manager.addVehicle(boat);
manager.startAllEngines(); // 출력: Car engine started, Boat engine started
}
}
List<T>는 제네릭 리스트로, T가 어떤 타입이든 리스트를 생성할 수 있게 합니다.public class Box<T> {
private T item;
public void setItem(T item) {
this.item = item;
}
public T getItem() {
return item;
}
}
public class Main {
public static void main(String[] args) {
Box<String> stringBox = new Box<>();
stringBox.setItem("Hello");
System.out.println(stringBox.getItem()); // 출력: Hello
Box<Integer> integerBox = new Box<>();
integerBox.setItem(123);
System.out.println(integerBox.getItem()); // 출력: 123
}
}
추상 클래스:
인터페이스:
// 추상 클래스 정의
public abstract class AbstractVehicle {
abstract void startEngine();
abstract void stopEngine();
void honk() {
System.out.println("Honking!");
}
}
// 인터페이스 정의
public interface Electric {
void chargeBattery();
}
// 클래스에서 추상 클래스와 인터페이스 구현
public class ElectricCar extends AbstractVehicle implements Electric {
@Override
public void startEngine() {
System.out.println("Electric car engine started");
}
@Override
public void stopEngine() {
System.out.println("Electric car engine stopped");
}
@Override
public void chargeBattery() {
System.out.println("Charging battery");
}
}
public class Main {
public static void main(String[] args) {
ElectricCar myCar = new ElectricCar();
myCar.startEngine();
myCar.honk();
myCar.chargeBattery();
myCar.stopEngine();
}
}
이와 같이 인터페이스와 추상 클래스는 각자의 강점을 살려 혼합하여 사용하면 보다 유연하고 확장 가능한 객체 지향 프로그램을 작성할 수 있습니다.