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를 만들게 된다).
정리
- 모든 설계에 역할과 구현을 분리하자!
- 자동차, 공연의 예시를 떠올리자.
- 역할은 그대로 두고, 구현은 언제든지 유연하게 변경할 수 있도록 만드는 것이 좋은 객체 지향 설계이다.
- 이 것을 가능하게 하려면 다형성, SOLID (특히 OCP, DIP)를 잘 활용하고 지켜야한다.
- 이상적으로는 모든 설계에 인터페이스를 부여하는 것이 좋다.
실무에서의 고민
실제로 인터페이스를 최대한으로 적용하려고 하다보면, 추상화에 대한 비용이 발생한다.
예를 들어 인터페이스를 적용하면 코드만 봐서는 구현체를 알 수 없기 때문에 코드를 읽는 데 시간이 더 필요해진다.
따라서 기능을 확장할 가능성이 없다면, 구현 클래스를 직접 사용하고, 향후 꼭 필요할 때 리팩토링을 통해 인터페이스를 도입하는 것도 방법이다.
책 추천
- 객체지향의 사실과 오해
- 토비의 스프링 - 강의 다 듣고 필수 구매!