[JAVA] 객체지향 SOLID 원칙

Posted by 신희준 on January 31, 2023


2023 - 01 - 31 (화)


객체지향 설계 SOLID 원칙

1. 단일 책임 원칙 (Single Responsibility Principal)

2. 개방-폐쇄 원칙 (Open-Closed Principal)

3. 리스코프 치환 원칙 (Liskov Substitution Principal)

4. 인터페이스 분리 원칙 (Interface Segregation Principal)

5. 의존관계 역전 원칙 (Dependency Inversion Principal)


단일 책임 원칙

  • 클래스는 한개의 책임을 가져야한다.

  • 구매기능에 문제가 생긴 경우, 구매를 처리하는 클래스만 수정해야한다.

  • 만일 하나의 기능이 여러개의 클래스에 걸쳐서 구현된 경우 구매기능을 처리를 묶어놓은 클래스를 수정시 다른 오류를 파생시킬 수 있다.

  • 유지보수의 효율성을 위함이다.


개방-폐쇄 원칙

  • 확장에는 열려있어야 하고 변경에는 닫혀 있어야 한다.

  • 기존에 생성된 상위 클래스 또는 인터페이스가 추가될 수 있으나 변경되지 않고 이를 구현한 하위 클래스들에서 상속받아 각각의 특징별로 정의한다.

  • 추상화와 다형성의 개념이라고 볼 수 있다.


리스코프 치환 원칙

  • 하위 타입 객체는 상위 타입 객체를 대신할 수 있다. (부모클래스를 자식클래스가 대체할 수 있음.)
    • 상위 타입 객체를 하위 타입 객체로 치환해도 정상적으로 동작해야 함.
  • 상속관계에서는 꼭 일반화 관계가 성립해야 함.

      
      //Student는 Person을 상속받음.
      Student s = new Student();
      Person p = (Person)s;
      
    


인터페이스 분리 원칙

  • 인터페이스는 각 역할에 맞게 분리해야 한다.

  • 인터페이스는 최소한의 기능만 제공한다. ( 여러가지 로직이 집약된 인터페이스를 구현한다기보다는 여러기능의 인터페이스를 분리하여 각각 구현한다. )

  • 일반적인 클래스를 하나 구현해서 사용하지도 않는 함수를 implement 시키지 말고, 여러개의 구체적인 클래스를 생성해 implement시키면 깔끔한 구조가 된다.


의존성 역전 법칙

  • 상위 클래스는 하위클래스에 의존해서는 안됨. (자식이 부모한테 의존해야하지 부모가 자식한테 의존하면 안됨..)