본문 바로가기
Web/spring study

[Spring] 객체 지향 설계와 스프링

by 장인이 2022. 5. 26.

1. 스프링

- 이전 글에서 다형성만으로는 OCP와 DIP를 지킬 수 없다는 내용을 작성하였다.

 

- 스프링은 아래의 기술들로 다형성과 OCP, DIP를 가능하도록 지원해줌

  -> DI(Dependency Injection): 의존관계, 의존성 주입

  -> DI 컨테이너 제공

 

- 위 기능들을 활용하면, 클라이언트 코드의 변경 없이, 기능이 확장 가능해진다.

(즉, 쉽게 부품을 교체하듯이 개발 가능)

 

2. 지금까지 내용 정리

- 해당 카테고리의 첫번째 게시물부터 지금까지 내용들을 한번 정리해보자.

 

- 모든 설계에 역할구현을 분리하자.

- 애플리케이션을 설계할 때, 마치 공연을 설계하듯 배역만 만들어두고, 배우는 언제든지 변경할 수 있도록 유연하게 설계하는 것

  -> 이것에 좋은 객체 지향 설계이다.

  -> 이것이 가능하려면, 다형성, OCP, DIP를 모두 지켜야 한다.

  -> 이를 위해 스프링 프레임워크를 사용하자

 

- 이상적으로는 모든 설계에 인터페이스를 부여하자

  -> 어떤 기술을 사용할지 정해지지 않은 상태이더라고, 설계를 보고 유연하게 구현 할 수 있다.

 

- 하지만, 인터페이스를 도입하면 추상화라는 비용이 발생한다.

(여기서 비용이란 성능이 아니라, 개발자가 코드를 한번 더 열어야됨)

(코드를 열었을 때 "어? 인터페이스밖에 없네? 하고 한번 더 들어가봐야 됨")

 

- 코드가 추상화된다면 장점도 있지만, 단점도 당연히 존재한다.

- 따라서, 장점이 더 부각되는 상황에서 인터페이스를 택하는 것을 추천한다.

 

- 기능을 확장할 생각이 없다면, 구체 클래스를 직접 사용하고, 향후 필요해질 경우 코드를 리팩터링해서 인터페이스를 도입하는 것도 하나의 방법이 될 수 있다.

  -> 결국 경험에 의해서 이런 선택들을 하게 된다.

 

 


위 내용은 김영한 님의 인프런 강의 "스프링 핵심 원리 - 기본편"의 내용과 강의자료를 토대로 작성된 게시글입니다.

강의 링크:

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8

댓글