TIL211105-그래서 스프링이 뭔데요?

Sorbet·2021년 11월 5일
1
  • 그냥 스프링이 좋아서 정리

Spring Framework는 자바로 이루어진 객체지향적인 프레임워크 입니다.

  • 스프링이라는 거대한 개발생태계 속에는 Spring MVC, Security, Integration, Data 등등 많은 다른 프로젝트들도 같이 포함되어 있는데요 그중에서 가장 중요한 프로젝트는 Spring Core 라고 생각합니다

Spring Core는 Inversion of Control을 통해 의존성 주입을 관리하는 기능을 수행합니다.

  • Spring Context가 있는 코어 컨테이너에서 자바빈들을 관리하고 의존성을 주입해 줍니다.

그러면 IoC, DI 는 뭔가요?

  • 생성자 argument, 객체가 의존성(함께 작업하는 다른 객체)을 외부에서 주입받는데, 컨테이너는 빈을 생성할 때 이러한 의존성을 주입해 주기 때문에 DI라고 부르는데요, 관점을 반대편에서 보면, 의존성을 직접 해결하지 않고 외부에서 주입받는다고 해서, 제어권이 반대로 뒤집어진 Inversion of Control 이라고 부르기도 합니다.

DI니 IoC니 그런거 쓰면 뭐에 좋은데요?

  • 가장 크게는 두가지 OCP(개방 폐쇄 원칙), DIP(의존성 역전 원칙)를 지키는데 도움이 되는데요

OCP(Open-Closed Principle) 이야기

  • 먼저 OCP 를 지키기 위해서는, 기능확장을 하기 위해 기존의 코드를 수정하지 않도록 해야 하는데요
  • 인스턴스화(실체화)를 직접하고 의존성도 직접 관리하면 어쩔수없이 클라이언트 코드를 수정해야 하기에 OCP 원칙을 어기지 않고 기능을 확장 할 수 없습니다.
  • 따라서 기능확장시 클라이언트 코드를 변경하지 않고도 구현객체를 변경할 수 있도록 >> 객체 외부에서 런타임에 객체 생성하고, 연관관계를 맺어주고, 의존성을 주입해주는 감독관이 필요하게 됩니다.
  • 의존성을 주입받게 되면 스프링 컨테이너가 일들을 처리 해 주고, 기존의 코드를 수정하지 않고도 기능을 확장할수 있어 OCP 원칙을 지킬수 있습니다.

DIP(Dependency Inversion Principle) 이야기

  • DIP에 의해 자신보다 변하기 쉬운것에 의존해서는 안되는데요, 상위 모듈은 하위 모듈에 의존해서는 안되고, 추상화는 세부 사항에 의존해서는 안된다는 원칙입니다.
  • DIP를 지켜내면서 >> 인터페이스(추상화와 역할)에 의존하게 설계하면, 역할과 구현을 분리해낼수 있고, 언제든지 세부 구현을 유연하게 변경(쉽게 업그레이드) 할수 있게 됩니다
  • Spring 에게서 의존성을 주입 받음으로써 구현클래스가 아니라 추상화된 인터페이스에 의존하고, Spring Contrainer가 런타임에 Component Scan을 통해서 동적으로 구현클래스를 주입해 주기 때문에 DIP 원칙을 지킬수 있습니다.

다음글에서 다룰 주제

  • 자바빈이란 뭔가요?
  • 스프링 컨테이너란? 스프링 컨텍스트란?

참고문헌

profile
Sorbet is good...!

1개의 댓글