Spring

스프링 IOC

태태코 2023. 5. 26. 12:38
반응형

빈(bean): bean은 스프링이 IOC 방식으로 관리하는 오브젝트라는 뜻이다.

즉 스프링을 사용하는 애플리케이션에서 만들어지는 모든 오브젝트가 다 빈이 아니라. 그 중에서 스프링이 직접 그 생성과 제어를 담당하는 오브젝트를 빈이라고 한다.

 

빈 펙토리(bean factory): IOC를 담당하는 핵심 컨테이너이다. 빈의 생성과 소멸, 조회등 부가적인 빈을 관리하는 기능을 담당한다.

*보통 이 빈 펙토리를 이용하지 않고, 이를 확장한 Application context를 많이 사용한다.

 

어필리케이션 컨텍스트(Application Context): 빅 펙토리를 확장한 컨테이너로, 빈의 생성 주기 뿐만 아니라, 각종 부가 서비스를 추가로 제공한다. 즉 모든 기능을 포함하는 것.

 

설정정보/메타정보: Application혹은 빈 펙토리가 Ioc를 적용하기 위해 사용하는 메타 정보를 말한다. configuration이라고 하는데,

컨테이너에 의해 관리되는 애플리케이션 오브젝트를 생성하고, 구성할 때 사용된다.

 

컨테이너: 주로 Application context를 의미하는 뜻으로 컨테이너라는 말 자체가 IoC개념을 담고 있기 때문에 application context보다는 Spring container라고 부르는 것이 잦아졌다. 

 

*오브젝트의 동일성과 동등성*
:  동일한 오브젝트인가와 동일한 정보를 담고 있는 오브젝트라고 말하는 것의 차이로 동일성은 ==로 비교 동등성은 equals로 비교한다.

두개의 오브젝트가 동일하다면 하나의 오브젝트만 존재하고 두개의 레퍼런스 변수가 존재하는 것이고 동등하다는 것은 두개의 다른 오브젝트가 메모리상에 존재하는 것인데, 오브젝트의 동등성 기준에 따라 두 오브젝트의 정보가 동등하다고 판단하는 것이다.

이 뜻은 Java facotry즉 application context를 이용하지 않고 사용자가 직접 factory를 만들어서 사용하였다면 동일한 객체를 받는 것이 아니라는 뜻이다.

 

스프링이 singletone 방식을 사용하는 이유: 

스프링이 사용되는 곳이 서버환경이기 때문이다?
 태생적으로 스프링은 엔터 프라이즈 시스템을 위해 고안된 기술이기 때문에 서버 환경에서 사용될 때 그 가치가 있다. 즉 하나의 인스턴스만 만들어놓고 그 인스턴스를 공유하여 여러 쓰레드를 사용하여 작동시킨 다는 것이다.

 

싱글톤 패턴: 어떤 클래스를 애플리케이션 내에서 제한된 인스턴스 개수, 이름처럼 주로 하나만 존재하도록 강제하는 패던. 전역적으로 접근이 가능하다. 단일 오브젝트만 존재해야하고, 이를 애플리케이션의 여러곳에서 공유하는 경우에 주로 사용한다.

 

고전 singletone 방식의 한계

-private 생성자를 가지고 있기 때문에 상속을 할 수 없다.

    싱글톤은 자기 자신만 자신의 오브젝트를 만들도록 제한하는 것이여서, 다른 생성자가 없다면 상속이 불가능 하다.

-싱글톤은 테스트 하기가 어렵다.

    방식이 제한적이기 때문에 테스트를 사용될 때 목 오브젝트등으로 대체하기 힘들다. 

-서버환경에서는 싱글톤이 하나만 만들어 지는 것을 보장하지 못한다.

자바를 통해 singtone의 유일성을 보장핟지 못한다.

- 싱글톤의 사용은 전역 상태를 만들 수 있기 때문에 바람직하지 못하다.

 

이를 통해 스프링은 싱글톤 레지스트리를 만들어서 이러한 부정적인 단점을 보완했다.

 

싱글톤 오브젝트는 무상태 방식으로 만들어 져야하는데 그 이유는 멀티 쓰레드 방식에서 오브젝트에 변경 및 수정하는 것은 매우 위험하기 때문이다. 

 

의존관계 주입:DI

 Bean으로 등록하여 생성자를 통해서 spring에게 runtime시 할당 받는 것을 뜻한다.

의존관계 검색:DL

Bean으로 등록하지 않아도 직접 application contex를 사용하여 api를 불러와 검색하여 사용하는 방법이다.

직접 api를 불러오는 코드가 포함되어 가독성에 좋지 않다.

 

 

반응형