반응형
객체지향 5대원칙(SOILD)의 원칙중 D에 해당하는것으로 의존관계생성시
자주 변환하는것이 아닌 자주 변화하지 않는것에 의존성을 더 올려서
유지보수 능력을 올리기 위한 원칙이다.
그럼 예를들어보자
농부가 과수원에서 과일을 재배하는데 아래와 같다고 하자
<?php
class Apple{
public function Culture(){
echo "사과를 재배한다.";
}
}
class Orange{
public function Culture(){
echo "오렌지를 재배합니다.";
}
}
class Farmer extends Apple{
public function Culture(){
parent::Culture();
}
}
$farmer = new Farmer();
$farmer->Culture();
이런경우 농부가 재배하는 작물을 Orange로 바꾼다면 아래와 같이 수정해야 합니다.
<?php
class Apple{
public function Culture(){
echo "사과를 재배한다.";
}
}
class Orange{
public function Culture(){
echo "오렌지를 재배합니다.";
}
}
class Farmer extends Orange{
public function Culture(){
parent::Culture();
}
}
$farmer = new Farmer();
$farmer->Culture();
이렇게 Farmer가 뭘 재배하냐는 작물을 계속 상속 의존하게 되면 새로운 작물로 변경할때마다 지속적으로 Farmer클래스가 변경되야 합니다. 그래서
Farmer는 재배만 하고 뭘 재배할지는 외부에서 정의해서 준다면 이렇게 변경할수 있습니다.
<?php
interface Fruit{
public function Culture();
}
class Apple implements Fruit{
public function Culture(){
echo "사과를 재배한다.";
}
}
class Orange implements Fruit{
public function Culture(){
echo "오렌지를 재배합니다.";
}
}
class Farmer extends Orange{
public function __construct(Fruit $fruit){
$this->fruit = $fruit;
}
public function Culture(){
$this->fruit->Culture();
}
}
$fruit = new Apple();
$farmer = new Farmer($fruit);
$farmer->Culture();
여기서 Apple재배에서 Orange로 변경하게 되면 다음과 같이만 해주면 된다.
<?php
interface Fruit{
public function Culture();
}
class Apple implements Fruit{
public function Culture(){
echo "사과를 재배한다.";
}
}
class Orange implements Fruit{
public function Culture(){
echo "오렌지를 재배합니다.";
}
}
class Farmer extends Orange{
public function __construct(Fruit $fruit){
$this->fruit = $fruit;
}
public function Culture(){
$this->fruit->Culture();
}
}
$fruit = new Orange();
$farmer = new Farmer($fruit);
$farmer->Culture();
반응형
'객체지향 설계5대 원칙 > PHP' 카테고리의 다른 글
객체지향5대원칙-LSP(Liskov Substitution Principle) - 리스코프 치환 원칙 (0) | 2023.05.26 |
---|---|
객체지향5대원칙-ISP(Interface Segregation Principle) - 인터페이스 분리 원칙 (0) | 2023.05.26 |
객체지향5대원칙-OCP(Open Closed Principle) - 개방 폐쇄 원칙 (0) | 2023.05.26 |
객체지향5대원칙-SRP(Single Responsibility Principle) - 단일 책임 원칙 (2) | 2023.05.26 |