객체지향 개발 5대 원칙 (SOLID)


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

    • 작성된 클래스는 하나의 기능만 갖는다.

    • 적용방법 :

    1. 여러 원인에 의한 변경 (Divergent change):

      • Extract Class를 통해 혼재된 각 책임을 각각의 개별 클래스로 분할하여 클래스 당 하나의 책임만을 맡도록 하는 것. 비슷한 책임을 중복해서 갖고 있다면 Extract Superclass를 사용하여 부모 클래스에 위임, 남은 책임들은 각자에게 정의 한다.

    2. 산탄총 수술(Shotgun surgery):

      • Move Field와 Move Method를 통해 책임을 기존의 어떤 클래스로 모으거나, 그럴만한 클래스가 없다면 새로운 클래스를 만들어 해결한다. 즉 산발적으로 여러 곳에 분포된 책임들을 한 곳에 모으면서 설계를 깨끗하게 정리하여 응집도를 높인다.

  • OCP(Open Close Principle) : 개방 폐쇠의 원칙

    • 확장에는 열려있고, 변경 비용은 줄인다

    • 적용방법 :

      1. 변경될 것과 변경되지 않을 것을 엄격하게 구분

      2. 이 두 모듈이 만나는 지점에 인터페이스를 정의

      3. 구현에 의존하기 보다, 정의한 인터페이스에 의존하도록 코드 작성

  • LSP(Liscov Substitution Principle) : 리스코브 치환 원칙

    • 완벽한 상속

    • 서브 타입(자식)은 언제나 기반타입(부모)으로 교체할 수 있어야 한다.

    • 적용방법

      • 두개의 개체가 같은 일을 한다면 하나의 클래스로 합치고, 둘을 구분할 수 있게 만든다.

      • 똑같은 연산을 제공하지만 조금씩 다르게 처리한다면 공통의 인터페이스를 만들고 각각 구현한다(인터페이스 상속)

      • 공통된 연산이 없다면 2개의 클래스로 만든다.

      • 두 개체에 무언가를 추가해야한다면 구현 상속을 사용한다. 

  • ISP(Interface Segregation Principle) : 인터페이스 분리의 원칙

    • 클래스에서 사용하지 않는 인터페이스는 구현하지 않아야 한다.

    • 적용방법

      1. 클래스 인터페이스를 통한 분리

        • 클래스의 상속을 이용하여 인터페이스를 나눈다.

      2. 객체 인터페이스를 통한 분리

        • 위임(Delegation)을 이용하여 인터페이스를 나눈다. 

  • DIP(Dependecy Inversion Principle) : 의존성 역전의 원칙

    • 하위 모듈의 변경이 상위 모듈의 변경을 발생시키지 않도록 한다.

    • 적용방법

      1. Layering

'감리사 > 소프트웨어공학' 카테고리의 다른 글

[SE] Java - J2ME  (0) 2018.07.11
[SE] XML - 작성 규칙  (0) 2018.07.11
[SE] 컴포넌트와 모듈 비교  (0) 2018.07.10
[SE] 컴포넌트 분류  (0) 2018.07.10
[SE] MDD (Model Driven Development)  (0) 2018.07.10