Spring 핵심 원리2 (IoC)
저번 포스팅에서 객체지향의 설계원칙 5가지에 대해 이야기했다. 순수한 자바 언어로만 객체지향하기에는 분명히 힘든점이 있다.
특히 클라이언트 코드가 과연 구체적인 구현 클래스에 의존하지 않고 상위 개념인 추상클래스에만 의존할 수 있는가?
조금만 깊게 생각해보면 추상클래스에만 의존하기가 매우 어려워보인다.
✨이를 해결하기위한 해결방법은 의존관계를 설정해주고 어떤 구현클래스를 의존하는 지를 파악하게 해주는 새로운 “의존관계 설정 클래스“를 생성하면 된다.
이 의존관계 설정 클래스는 어떤 클라이언트 클래스가 어떤 다른 추상클래스를 의존하는지, 또 어떤 추상클래스가 어떤 구현클래스를 의존하는지를 명확하게 보여주는 설정파일인 것이다.
이 환경설정클래스는 스프링의 원리에 있어서 핵심 기능을 만들 수 있게 한다.
스프링은 이 환경설정클래스를 @Configuration이라는 어노테이션으로 파악하고 설정기능을 하는 클래스로 정의한다.
결국 클라이언트 코드와 클래스들은 각자 본인의 역할만을 수행하는 메소드들을 담고 있고 그 클래스들을 이어주는 Config 설정파일을 통해서만 어떤 구현클래스가 담길지 정해진다.(IoC)
그러면 또 의문이 든다.
@Configuration이라는 어노테이션을 붙이지 않고 그냥 순수 자바코드로만 어플리케이션을 만들면 안되는 것인가?
이 설정파일을 Spring이 관리하도록 하는 것이 어떤 점에서 장점이 있는가?
우선 우리가 웹어플리케이션을 만든다고 가정해보자. 웹이란 것은 기본적으로 적게는 수십, 많게는 수백,수천만의 요청을 받아드리고 그에 맞는 응답을 클라이언트에게 보내주어야한다.
그럴때마다 항상 클래스에서 new() 키워드를 통해 객체를 생성하면 도대체 몇개의 객체를 만들어내야하는 것인가.
이를 방지하게 해주는 기능을 스프링에서 제공해준다.
Singleton 패턴
스프링 컨테이너는 기본적으로 싱글톤 컨테이너이다. 싱글톤의 개념은 객체는 딱 한번만 생성되고 이후에 그 객체를 다시 생성하지 않으며 공유한다는 개념이다.
이를 통해 여러 클라이언트가 서버에 요청해도 필요한 객체는 1개만 만들어지며 위의 문제를 해결할 수 있다.
Leave a comment