간단 정리/Java

[간단 정리] SOLID 원칙

kim-dev 2024. 11. 8. 11:58
반응형

SOLID 원칙이란, JAVA에서 객체 지향 프로그래밍을 위해 고안된 5가치 주요 원칙을 의미한다.

1. SRP (단일책임의 원칙)

  • 정의된 클래스는 하나의 책임(기능)만 가지도록 설계되어야 한다.
    • 여기서 책임이란, 클래스가 특정 메서드를 알고 있다는 것이다. 특정 메서드를 여러 클래스가 알고 있다면 SRP에 어긋난 코드라고 말할 수 있다.
  • 클래스를 변경하는 이유는 단 하나여야 한다.
  • SRP를 준수하기 위해서는 각 클래스가 가진 책임을 최대한 분리하여야 한다.

2. OCP (개방폐쇄의 원칙)

  • 클래스나 메서드는 확장에는 열려있고 변경에는 닫혀 있어야 한다.
  • 기존의 코드를 변경하지 않고도 기능을 수정하고 추가할 수 있어야 한다.
  • OCP를 준수하기 위해서는 추상화와 다형성에 대해 이해하는 것이 중요하다.

3. LSP (리스코브 치환의 원칙)

  • 하위 클래스는 언제나 상위 클래스와 호환될 수 있어야 한다.
  • 상위 클래스를 하위 클래스로 바꿔 사용해도 정상적으로 동작해야 한다 (List와 ArrayList 처럼)
  • 즉 하위 클래스는 상위 클래스가 사용하는 모든 행태를 지켜야 한다
  • 상속 관계의 클래스는 모두 IS-A가 성립해야 하며, 상속관계가 아닌 클래스를 상속관계로 설정하면 이 원칙에 위배된다.

4. ISP (인터페이스 분리의 원칙)

5. DIP (의존성 역전의 원칙)

  • 고수준 모듈은 저수준 모듈의 구현에 의존해서는 안 된다.
    • 저수준 모듈: 구체적인 클래스나 객체
    • 고수준 모듈: 인터페이스나 추상 클래스
  • 즉 구체화된 클래스에 의존하기보다는 추상 클래스나 인터페이스에 의존해야 한다.
    • 반대는 이루어질 수 없다. 그 이유는 아래에 적겠다.
  • 저수준 모듈은 수시로 변경이 발생한다. 특정 클래스가 저수준 모듈을 의존할 경우 그 클래스 역시 수시로 변경되어야 한다.
  • 따라서 변경이 잘 발생하지 않고, 변경되어도 하위 클래스에 영향을 미치지 않는 고수준 모듈에 의존하는 형태로 이루어져야 한다.