ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 토비의 스프링 - 4. 제어의 역전 ( IoC )
    기술/Java - 토비의 스프링 2022. 8. 3. 18:04

    제어의 역전 ( IoC )

    DaoFactory

    프로그램의 실행, 구성하는 부분을 나눈 관심사의 분리라고도 이야기할 수 있다고 생각하고, 구현 객체가 Factory 에 의해 결정된다는 부분을 보고 제어의 역전이라고 이야기할 수 있을 것 같다.

    일반적으로 객체 생성, 연결, 관리, 사용을 프로그래머가 제어하지만 이를 외부에 위임하는 것을 제어의 역전이라고 한다. 대표적으로 제어의 역전이 사용되는 것이 프레임워크다.

    라이브러리와 프레임워크

    라이브러리는 사용하는 애플리케이션은 흐름을 직접 제어한다.

    프레임워크는 거꾸로 애플리케이션 코드가 프레임워크에 의해 사용된다. 프레임워크가 흐름을 주도하는 중 개발자가 만든 애플리케이션 코드를 사용하도록 만드는 방식이다.

    Spring Application Context

    스프링에서는 IoC 기능을 더 잘 사용하기 위해 전용 IoC 를 만들었다.

    DaoFactory vs Spring Application Context

    • 클라이언트는 구체적인 팩토리 클래스를 알 필요가 없다.
      • DaoFactory 처럼 IoC 를 적용한 오브젝트가 늘어나게될텐데 그 때마다 팩토리 클래스를 늘리고 어떤 팩토리 클래스를 사용할 지 클라이언트가 알아야하는 문제가 생긴다.
      • 애플리케이션 컨텍스트는 일관적인 방법으로 원하는 오브젝트를 가져올 수 있게 만들어줬다.
    • 종합 IoC 서비스를 제공해준다.
      • 오브젝트 생성과 관계설정 뿐만 아니라 여러 기능을 제공해준다.
      • 오브젝트가 만들어지는 방식, 시점, 전략 등 IoC 를 더 잘 사용할 수 있는 여러 기능들을 제공한다.

    스프링 빈의 스코프

    스프링이 관리하는 오브젝트, 즉 빈이 생성되고 존재하고 적용되는 범위를 스코프라고 한다.

    DaoFactory 는 각 구현체가 호출될때마다 새로운 인스턴스를 반환했지만 기본적으로 Spring IoC 는 싱글톤을 사용하여 일관된 인스턴스를 반환한다.

    각 구현체를 싱글톤으로 생성하는 이유는 웹 요청이 올때마다 새 오브젝트를 만들어 반환하는 것은 성능 상 불이익이 있기 때문이다.

    경우에 따라 빈을 요청할때마다 새로 생성하는 프로토타입 스코프, HTTP 요청이 생길 때마다 생성되는 요청 스코프, 웹의 세션과 유사한 세션 스포프 등 여러 범위를 가진 스코프를 생성할 수 있다.

    싱글톤 패턴

    싱글톤 패턴의 한계

    • 싱글톤 구현 코드 자체가 많이 들어간다.
    • private 생성자를 갖고 있기 때문에 상속할 수 없다.
    • 테스트하기 어렵다.
      • 왜 어렵지..
      • 테스트케이스 간 State 를 공유하게 되는 경우 문제가 됨, Clear 를 직접 해주어야 함
    • 서버환경에서 싱글톤이 하나만 만들어지는 것을 보장하지 못한다.
      • 특정 상황에서 문제가 되는 것을 싱글톤의 문제라고 할 수 없을 것 같다. ( 개인 의견 )
    • 싱글톤의 사용은 전역 상태를 만들 수 있으므로 바람직하지 못하다.

    싱글톤 레지스트리

    스프링에서는 직접 싱글톤 형태의 오브젝트를 만들고 관리해준다. 평범한 자바 클래스를 싱글톤으로 사용하게 해줌으로서 위의 문제들을 해결한다.

    멀티스레드 환경에서의 싱글톤

    싱글톤을 사용하면 상태 관리에 주의를 기울여야한다. 멀티 스레드에서 인스턴스의 상태를 수정하면 모든 스레드에 영향을 주기 때문이다.

    댓글 0

Designed by Tistory.