Spring/Spring core basic

[Spring core basic] 04 - 객체 지향 설계와 Spring

Kloong 2022. 5. 2. 01:00

참고

더보기

Spring core basic 시리즈는 김영한 님의 "스프링 핵심 원리 - 기본편" 강의를 정리한 글입니다. 글에 첨부된 사진은 해당 강의의 강의 자료에서 캡쳐한 것입니다. 제 Github에만 올려뒀다가, 정보 공유와 강의 홍보(?)를 위해 블로그에도 업로드합니다. 마크다운을 잘 쓰지 못해서 가독성이 조금 떨어지는 점 양해 바랍니다.

 

 

스프링 핵심 원리 - 기본편 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런...

www.inflearn.com

객체 지향 설계와 Spring

Spring과 객체 지향은 무슨 관계인가?

Spring은 다형성만으로는 불가능했던 OCP와 DIP의 구현을 가능하게 해준다!

  • DI (Dependency Injection): 의존성 주입
  • Spring은 DI container를 제공한다. DI container에 들어있는 객체들로 DI를 한다.

이 기능들로 클라이언트 코드의 변경 없이 기능을 확장할 수 있다!

순수하게 Java로 좋은 객체 지향 개발을 하기 위해 OCP, DIP를 지키면서 개발을 하다보면, 결국엔 Spring과 비슷한 형태의 프레임워크가 만들어지게 된다 (정확히는 DI continer를 만들게 된다).

정리

  1. 모든 설계에 역할과 구현을 분리하자!
    • 자동차, 공연의 예시를 떠올리자.
  2. 역할은 그대로 두고, 구현은 언제든지 유연하게 변경할 수 있도록 만드는 것이 좋은 객체 지향 설계이다.
    • 이 것을 가능하게 하려면 다형성, SOLID (특히 OCP, DIP)를 잘 활용하고 지켜야한다.
  3. 이상적으로는 모든 설계에 인터페이스를 부여하는 것이 좋다.

실무에서의 고민

실제로 인터페이스를 최대한으로 적용하려고 하다보면, 추상화에 대한 비용이 발생한다.

예를 들어 인터페이스를 적용하면 코드만 봐서는 구현체를 알 수 없기 때문에 코드를 읽는 데 시간이 더 필요해진다.

따라서 기능을 확장할 가능성이 없다면, 구현 클래스를 직접 사용하고, 향후 꼭 필요할 때 리팩토링을 통해 인터페이스를 도입하는 것도 방법이다.

책 추천

  1. 객체지향의 사실과 오해
  2. 토비의 스프링 - 강의 다 듣고 필수 구매!