[TIL] 객체 지향 설계 5원칙 - SOLID

hyo_·2021년 2월 17일
1

객체지향

목록 보기
1/1

※ 본 글은 아래 도서 및 강의를 공부한내용을 토대로 작성되었습니다.

📚 스프링 입문을 위한 자바 객체지향의 원리와 이해
📺 인프런 스프링 핵심 원리


📢 SOLID란?

  • SRP(single responsibility principle) : 단일 책임 원칙
  • OCP(Open Closed Principle) : 개방 폐쇄 원칙
  • LSP(Liskov Substitution Principle) : 리스코프 치환 원칙
  • ISP(Interface Segregaion Principle) :인터페이스 분리 원칙
  • DIP(Dependency Inversion Principle) : 의존 역전 원칙

1. SRP - 단일 책임 원칙

" 어떤 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 한다 " - 로버트 C.마틴

  • 한 클래스는 하나의 책임만 가져야 한다.
  • But , 하나의 책임이라는 것은 모호하다(크기도 다르고, 문맥과 상황에 따라 다르다. )
  • 변경이 있을 때 파급 효과가 적을수록 SRP를 잘 따른 것이다.

2. OCP - 개방 폐쇄 원칙

" 소프트웨어 엔티티( 클래스,모듈,함수 등 )는 확장에 대해서는 열려 있어야 하지만 변경에 대해서는 닫혀 있어야 한다. " - 로버트 C.마틴

  • 소프트 웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.
  • 다형성을 활용한다. ➡ 상위 클래스 or 인터페이스 사용
  • OCP를 지키지 않고 프로그램 작성 시 객체 지향 프로그래밍의 가장 큰 장점인 유연성, 재사용성, 유지보수성을 얻을 수 없다.

3. LSP - 리스코프 치환 원칙

" 서브 타입은 언제나 자신의 기반타입( base type)으로 교체할 수 있어야 한다. " - 로버트 C.마틴

  • 하위 클래스 is a kind of 상위 클래스 - 하위 분류는 상위 분류의 한 종류이다.
  • 구현 클래스 is able to 인터페이스 - 구현 분류는 인터페이스할 수 있어야 한다.
  • 위 두 개의 문장대로 구현된 프로그램은 리스코프 치환 원칙을 잘 지킨 프로그램이다.

4. ISP - 인터페이스 분리 원칙

" 클라이언트는 자신이 사용하지 않는 메서드에 의존 관계를 맺으면 안된다. " - 로버트 C.마틴

  • 특정 클라이언트를 위한 인터페이스 여러개가 범용 인터페이스 하나보다 낫다.
  • 자동차 인터페이스 ➡ 운전 인터페이스, 정비 인터페이스로 분리
  • 사용자 클라이언트 ➡ 운전자 클라이언트, 정비사 클라이언트로 분리
  • 분리하면 정비 인터페이스 자체가 변해도 운전자 클라이언트에 영향을 주지 않음

5. DIP - 의존관계 역전 원칙

" 고차원 모듈은 저차원 모듈에 의존하면 안된다. 이 두 모듈 모두 다른 추상화된 것에 의존해야 한다. "
" 추상화된 것은 구체적인 것에 의존하면 안된다. 구체적인 것이 추상화된 것에 의존해야 한다. "
"자주 변경되는 구체(Concrete) 클래스에 의존하지 마라 " - 로버트 C.마틴

  • 구현 클래스에 의존하지 말고, 인터페이스에 의존하라는 뜻이다.
  • 클라이언트가 구현체에 의존하게 되면 변경이 어려워진다.
profile
🎓의지적인 삶을 살자!😊

0개의 댓글