반응형 객체지향 설계5대 원칙/PHP5 객체지향5대원칙-DIP(DIP-Dependency Inversion Principle) - 의존 역전 원칙 객체지향 5대원칙(SOILD)의 원칙중 D에 해당하는것으로 의존관계생성시 자주 변환하는것이 아닌 자주 변화하지 않는것에 의존성을 더 올려서 유지보수 능력을 올리기 위한 원칙이다. 그럼 예를들어보자 농부가 과수원에서 과일을 재배하는데 아래와 같다고 하자 Culture(); 이런경우 농부가 재배하는 작물을 Orange로 바꾼다면 아래와 같이 수정해야 합니다. Culture(); 이렇게 Farmer가 뭘 재배하냐는 작물을 계속 상속 의존하게 되면 새로운 작물로 변경할때마다 지속적으로 Farmer클래스가 변경되야 합니다. 그래서 Farmer는 재배만 하고 뭘 재배할지는 외부에서 정의해서 준다면 이렇게 변경할수 있습니다. fruit = $fruit; } public function Culture(){ $this-.. 2023. 5. 26. 객체지향5대원칙-LSP(Liskov Substitution Principle) - 리스코프 치환 원칙 객체지향 5대원칙(SOILD)의 원칙중 L에 해당하는것으로 만약 S가 T의 기본 클래스라면 S의 객체를 T의 객체로 대체해도 프로그램은 정상적으로 동작해야 한다라는 원칙이다. 그럼 예를들어보자 형은 건축공이고 동생은 개발자가 있다고 하자 형과 동생은 모두 가족이지만 동생의 일을 형이 대신할수 없기때문에 대체할수 없는 리스코프 치환원칙에 위배된다. 이를 코드로 보면 다음과 같다. do_work(); $programmer = new Programmer(); $programmer->do_work(); 자 그럼 치환원칙을 따르도록 수정해 보겠습니다. 먼저 치환원칙을 따르게 할려면 Job이라는 기본 클래스가 필요하다. 이제 Job이라는 클래스 객체를 해당 하위인 BuildingEngineering, Program.. 2023. 5. 26. 객체지향5대원칙-ISP(Interface Segregation Principle) - 인터페이스 분리 원칙 객체지향 5대원칙(SOILD)의 원칙중 I에 해당하는것으로 다중 메소드를 가진 인터페이스가 있다면 여러개의 메소드로 분할 하는것이 합리적이다라고 말하고 있다. 그럼 예를들어보자 hwp파일이 있는데 이를 text와 html형태로 출력코자 한다면 구현클래스는 아래와 같이 하면 된다. gethtml(); $convert->gettext(); 여기서 특정 클래스에서 text만 출력하고 싶다면 어떻게 해야 할까? 그럼 위와 같이 했을때 문제점은 뭘까? gettext()만 있으면 되는데 gethtml()라는 클라이언트가 필요로 하지 않는 메소드를 구현되어 있는것이다. 그래서 다음과 같이 변경한다. gettext(); 만약 Text, Html이 다 필요하다면 어떻게 할까? 다음과 같이 하면 된다. gettext();.. 2023. 5. 26. 객체지향5대원칙-OCP(Open Closed Principle) - 개방 폐쇄 원칙 객체지향 5대원칙(SOILD)의 원칙중 O에 해당하는것으로 확장에는 열려있고, 수정에는 닫혀있어야 한다는 원칙이다. 이게 무슨말일까? 예를들어보자. 농어업에는 농민, 어민이 있다. 이를 코드화 하면 이렇다. dowork("농업"); $job->dowork("어업"); ?> 여기서 만약 여기에 축산업이라는 다른 직업군을 추가한다면 어떻게 될까? 그럼 어쩔수 없이 Job클래스 자체를 수정해야 한다. 이는 개방폐쇄원칙에 위배될수밖에 없다. 이를 위배되지 않도록 변경하면 다음과 같다. job = $job; } public function dowork(){ echo $this->job."을 한다."; } } $work = new Work(); $work->setJob("농업"); $work->dowork(); $.. 2023. 5. 26. 객체지향5대원칙-SRP(Single Responsibility Principle) - 단일 책임 원칙 체지향 5대원칙 중 처음의 S에 해당하는것으로 SRP(Single Responsibility Principle) - 단일 책임 원칙 하나의 객체는 반드시 하나의 기능만을 수행하는 책임을 가지면서 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 한다는 의미다. 그럼 예를 살펴보자 member = $member; } public function Work(){ if($this->member == "Mother"){ echo "집안일을 하신다."; } if($this->member == "Father"){ echo "회사일을 하신다."; } } } $family = new Family(); $family->setMember("Mother"); $family->Work(); $family->setMember("F.. 2023. 5. 26. 이전 1 다음 반응형