[php] 팩토리 디자인 패턴

소프트웨어 개발에서 팩토리 디자인 패턴은 객체 생성 로직을 캡슐화하여 클라이언트에게는 적절한 객체를 생성할 수 있는 인터페이스를 제공합니다. 이 패턴은 객체를 생성함으로써 클라이언트 코드에 대한 의존성을 줄이고 유지보수성을 향상시킵니다.

왜 필요한가?

일반적으로 객체를 생성하는 코드는 클라이언트 코드와 밀접하게 연결되어 있습니다. 이로 인해 특정 클래스의 변경은 클라이언트 코드에 영향을 미칠 수 있습니다. 팩토리 디자인 패턴은 이러한 의존성을 완화할 수 있으며, 객체 생성 로직을 한 곳에 캡슐화하여 중복을 줄이고 유연성을 높일 수 있습니다.

어떻게 구현되는가?

아래는 PHP에서의 팩토리 디자인 패턴의 간단한 예제이다.

interface Vehicle {
    public function drive();
}

class Car implements Vehicle {
    public function drive() {
        echo "Driving a car";
    }
}

class Bike implements Vehicle {
    public function drive() {
        echo "Riding a bike";
    }
}

class VehicleFactory {
    public static function create($vehicleType) {
        switch($vehicleType) {
            case 'car':
                return new Car();
            case 'bike':
                return new Bike();
            default:
                throw new Exception("Invalid vehicle type");
        }
    }
}

// 클라이언트 코드
$car = VehicleFactory::create('car');
$car->drive(); // "Driving a car" 출력

위의 예제에서 VehicleFactory 클래스는 create 메서드를 통해 클라이언트에게 적절한 객체를 생성합니다. 클라이언트 코드는 생성된 객체가 어떻게 생성되었는지에 대해 알 필요가 없습니다. 이로써 객체 생성 로직과 클라이언트 코드 간의 결합도를 낮출 수 있습니다.

마치며

팩토리 디자인 패턴은 객체 생성을 캡슐화하여 유연성을 향상시킵니다. 이를 통해 클라이언트 코드와 객체 생성 로직 간의 결합을 줄일 수 있고, 유지보수성을 높일 수 있습니다. 이러한 이점으로 인해 많은 소프트웨어에서 이 패턴이 활용되고 있습니다.

참고 문헌: