[Java와 Spring] 객체 지향 설계 5원칙 - SOLID

개발log·2024년 3월 19일

자바와 스프링

목록 보기
4/10
post-thumbnail

결합도와 응집도

  • 결합도: 모듈(클래스) 간의 의존 정도
  • 응집도: 하나의 모듈 내부에 존재하는 구성 요소들의 기능적 관련성

SOLID

  • SRP(단일 책임 원칙): 어떤 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 한다.
  • OCP(개방 폐쇄 원칙): 자신의 확장에는 열려 있고, 주변의 변화에 대해서는 닫혀 있어야 한다.
  • LSP(리스코프 치환 원칙): 서브 타입은 언제나 자신의 기반 타입으로 교체할 수 있어야 한다.
  • ISP(인터페이스 분리 원칙): 클라이언트는 자신이 사용하지 않는 메서드에 의존 관계를 맺으면 안 된다.
  • DIP(의존 역전 원칙): 자신보다 변하기 쉬운 것에 의존하지 마라.

SRP 단일 책임 원칙

Single Responsiblity Principle

"어떤 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 한다."

  • 클래스를 역할과 책임에 따라 분리해야한다.

OCP 개방 폐쇄 원칙

Open Closed Principle

"(자신의)확장에 대해서는 열려 있어야 하지만 (주변의)변경에 대해서는 닫혀 있어야 한다."

  • 개방 폐쇄 원칙을 무시하고 작성하면 객체 지향 프로그래밍의 큰 장점인 유연성, 재사용성, 유지보수성 등을 얻을 수 없다.


※ 예시: 직원 교대라고 하는 주변의 변화에 손님의 구매 행위는 영향을 받지 않는 것이고, 직원의 교대라고 하는 확장 행위에는 열려있는 것이다.

LSP 리스코프 치환 원칙

Liskov Substitution Principle

  • 하위 클래스의 인스턴스는 상위형 객체 참조 변수에 대입해 상위 클래스의 인스턴스 역할을 하는 데 문제가 없어야 한다.

    "서브 타입은 자신의 기반 타입으로 교체할 수 있어야한다."

  • 하위 클래스 is kind of 상위 클래스 - 하위 분류는 상위 분류의 한 종류다.

  • 구현 클래스 is able to 인터페이스 = 구현 분류는 인터페이스 할 수 있어야 한다.

ISP 인터페이스 분리 원칙

Interface Segregation Principle

"클라이언트는 자신이 사용하지 낳는 메서드에 의존 관계를 맺으면 안 된다."

  • 인터페이스를 통해 메서드를 외부에 제공할 때는 최소한의 메서드만 제공해야 한다.

DIP 의존 역전 원칙

Dependency Inversion Principle

"고차원 모듈은 저차원 모듈에 의존하면 안 된다. 이 두 모듈 모두 다른 추상화된 것에 의존해야 한다."
"추상화된 것은 구체적인 것에 의존하면 안된다. 구체적인 것이 추상화된 것에 의존해야 한다."
==> "자신보다 변하기 쉬운 것에 의존하지 마라."

  • 상위 클래스, 인터페이스, 추상 클래스일수록 변하지 않을 가능성이 높기에 하위 클래스나 구체 클래스가 아닌 상위 클래스, 인터페이스, 추상 클래스를 통해 의존해야 한다.
profile
나의 개발 저장소

0개의 댓글