ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 객체지향 프로그램 설계 ( SOLID )
    php 2023. 8. 21. 14:26

    객체 지향 프로그램을 설계할 때 SOLID 5가지의 원칙을 지켜야 한다.

     

    SRP ( Single Responsibility Principle ) 단일 책임의 원칙

    -> 모듈이 오직 하나의 액터에 대해서만 책임을 져야한다.

    ex) 비밀번호를 DB에 저장하는 기능 ( Membership ) 이 있다고 하면, 비밀번호를 받아서 DB에 넣는 모듈( RegistUser )과 비밀번호를 암호화 하는 모듈( EncodePass )을 따로 제작한다

     

    OCP ( Open-Closed Principle ) 개방 폐쇄 원칙

    -> 확장에 대해 열려있고 수정에 대해서는 닫혀있어야 한다는 원칙

    확장에 대해 열려있다 : 요구사항이 변경될 때 새로운 동작을 추가하여 어플리케이션의 기능을 확장할 수 있음

    수정에 대해 닫혀있다 : 기존의 코드를 수정하지 않고 에플리케이션의 동작을 추가하거나 변경할 수 없다.

    ex) EncodePass 모듈을 변경하고 싶다면, RegistUser 에는 변경사항이 없어야 한다는 뜻이다.

    이를 행하기 위해서 추상화를 진행해야한다.

    즉 EncodePass 가 어떤 식으로 변화하던지, RegistUser에는 영향이 가지 않아야 한다.

    이를 구현하기 위해 인터페이스에 의존하도록 추상화 해야한다.

     

    ISP ( Interface segregation principle ) 인터페이스 분리 원칙

    -> 클라이언트의 목적과 용도에 적합한 인터페이스 만을 제공하는 것. 모든 클라이언트가 자신의 관심에 맞는 퍼블릭 인터페이스(외부에서 접근 가능한 메세지) 만을 접근하여 불필요한 간섭을 최소화 할 수 있고, 기존 클라이언트에 영향을 주지 않으면서 유연하게 객체의 기능을 확장 / 수정할 수 있다.

    ex) 게시글 수정/삭제 기능을 갖는 구현 클래스가 있을때, 수정 작업만 필요한 클라이언트가 있다면 별도의 수정 인터페이스를 만들어줘야한다.

     

    LSP ( Liskov Substitution Principle ) 리스코프 치환 원칙

    -> 올바른 상속 관계의 특징을 정의하기 위해 발표한 것으로, 하위 타입은 상위 타입을 대체할 수 있어야 한다.

    해당 객체를 사용하는 클라이언트는 상위 타입이 하위 타입으로 변경되어도, 차이점을 인식하지 못 한 채 상위 타입의 퍼블릭 인터페이스를 통해 서브 클래스를 사용할 수 있어야 한다.

     

    DIP ( Dependency Inversion Principle ) 의존 역전 원칙

    -> 고수준 모듈은 저수준 모듈의 구현에 의존해서는 안 되며, 저수준 모듈이 고수준 모듈에 의존해야 한다.

    고수준 모듈 : 입력과 출력으로부터 먼 추상화된 모듈 (비즈니스)

    저수준 모듈 : 입력과 출력으로부터 가까운 모듈 (http , Db , 캐시)

     

     

    리포트를 작성해서 메일로 보내려고 한다.

    리포트를 작성하는 모듈과 보내는 모듈로 나눠서 구현하면

    다음과 같이 리포트 정보를 얻고 리포트를 만들 추상 클래스와

    리포트를 보낼 추상 클래스를 만들 수 있다.

    이런 추상 클래스는 특정 클래스가 상속해서

    1번처럼 메일만 보내는 클래스를 구현하거나, 2번처럼 SNS에 게시할 수 있는 기능을 구현하는 것으로 이용할 수 있다.

     

    또한 아래와 같은 인터페이스는

    새로운 클래스에 implements 해서 기능을 넣어서 사용할 수 있다.

    특정 목적에 맞는 인터페이스들을 정리해두는 것으로, 규모가 큰 프로젝트를 수행할 때 효과적으로 함수 실행을 제어할 수 있다.

    'php' 카테고리의 다른 글

    ssh 와 깃 허브  (0) 2023.08.23
    php 경로 지정  (0) 2023.08.21
    환경변수 설정하기  (0) 2023.08.21
    스크래퍼 제작하기  (0) 2023.08.17
    windows에서 php에 curl 확장 시 주의  (0) 2023.08.10
Designed by Tistory.