ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SOLID 원칙
    Software Engineering 2020. 5. 23. 19:44
    728x90

    SOLID

    • 객체지향 설계에서 지켜야할 5개의 원칙(SRP, OCP, LSP, ISP, DIP)
    • 변경사항에 유연하게 대처하고 확장성있는 시스템을 만들기 위해 적용

    좋은 설계란?

    • 요구사항이나 변경이 있을 때 가능한 영향 받는 부분이 적어야함

    1. SRP(Single Responsibility Principle) : 단일 책임 원칙

    • 객체는 단 하나의 책임만 가져야 한다는 원칙
      • 책임이 많으면 서로 다른 역할을 수행하는 코드끼리 강하게 결합될 가능성이 높아짐
      • 책임이 많으면 클래스가 변경될 가능성이 높음
    • 여러 객체들이 하나의 책임만 갖도록 분배하면 시스템에 변화가 생기더라도 영향을 최소화 할 수 있음

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

    • 기존의 코드를 변경하지 않으면서(Closed) 기능을 추가(Open)할 수 있도록 설계가 되어야 한다는 원칙
    • 확장에 대해서는 개방적이고 수정에 대하서는 폐쇄적이라는 의미
    • 캡슐화를 통해 여러 객체에서 사용하는 같은 기능을 인터페이스에 정의하고 상속을 통해 다형성을 이용

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

    • 자식 클래스는 최소한 자신의 부모 클래스에서 가능한 행위는 수행할 수 있어야한다는 원칙
    • 부모 클래스와 자식 클래스 사이의 행위가 일관되어야함
    • 부모 클래스의 인스턴스 대신에 자식 클래스의 인스턴스로 대체 가능해야함
    • 부모 클래스에서 상속받은 메서드들이 자식 클래스에서 오버라이드 되지 않아야함
      • 자식 클래스는 부모 클래스의 책임을 무시하거나 재정의하지 않고 확장만 수행해야함
      • 피터 코드의 상속 규칙을 만족하면 LSP를 만족함

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

    • 인터페이스를 클라이언트에 특화되도록 분리시키는 원칙
    • SRP는 객체의 단일 책임을 의미하고 ISP는 인터페이스의 단일 책임을 의미
      • SRP를 만족하면 ISP를 만족할 수 있지만 항상 그런건 아님

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

    • 고수준의 모듈은 저수준의 모둘의 구현에 의존해서는 안되는 원칙
    • 구체적인 클래스보다는 인터페이스나 추상 클래스와 의존 관계를 맺도록 설계해야함
    728x90
Designed by Tistory.