스프링이 제공하는 객체의 스코프.


  • Bean(스프링이 관리하는 오브젝트)이 생성되고, 존재하고 적용되는 범위? 이것을 Beanscope라 부른다.
  • 기본적으로 빈의 스코프는 싱글톤스코프다.
  • 싱글톤스코프는 컨테이너 내에 한 개의 오브젝트만 만들어져서 강제로 제거하지 않는 한, 컨테이너가 살아있는 한 계속 유지된다.

 

 

왜 singleton으로 제공하는가?


일단 스프링은 자바엔터프라이즈개발을 위한 프레임워크다. 이 말인 즉슨, 사용자가 많다는 얘기. 그 많은 사용자가 요청할 때마다 새로운 객체를 생성해서 제공하는 것은 비용이 크기 때문에 기본적으로 싱글톤으로 객체의 갯수를 제한한다.

  • 스프링컨테이너는 싱글톤관리 컨테이너이기도 하다! 평범한 자바 클래스를 싱글톤으로 활용하게 해준다는 뜻. 싱글톤 레지스트리 덕분에 싱글톤으로 사용될 클래스라도 public 생성자를 가질 수 있다.
  • 고전적인 싱글톤패턴과 달리, 객체지향적인 설계 방식과 원칙, 디자인 패턴(물론 싱글톤패턴은 제외) 등을 적용하는데 제약이 없다!
  • 스프링은 IoC컨테이너일 뿐아니라, 싱글톤패턴을 대신해서 싱글톤을 생성하고 관리해주는 싱글톤 레지스트리라는 점 기억해둘 것.
  • 빈을 싱글톤으로 만드는 것은 결국 오브젝트의 생성방법을 제어하는 IoC컨테이너로서의 역할.

 

 

싱글톤이기 때문에 주의해야할 점


stateless(무상태)방식으로 만들어라.

  • 읽기전용 값이라면 초기화시점에서 iv에 저장해두고 공유하는 것은 문제가 없지만,
    다중 사용자의 요청을 한꺼번에 처리하는 쓰레드들이 동시에 iv를 건드리는 것은 위험하다.
    따라서 stateless방식으로 만들어져야한다.

  • 파라미터, 로컬변수, 리턴값 등을 이용해, 각각의 값을 iv처럼 공유되는 영역이 아닌, 독립적인 영역에 저장하자.

 

 

싱글톤 스코프 외 스코프.


프로토타입 스코프

  • 싱글톤스코프와는 다르게 컨테이너에 빈을 요청할 때마다 매번 새로운 오브젝트만든다.

리퀘스트 스코프

  • 웹을 통해 새로운 HTTP 요청이 생길때마다 생성된다.

싱글톤 외 스코프는 10장에서 자세히 다룬다니 더 공부해봐야겠다..

'도서 > 토비의 스프링' 카테고리의 다른 글

템플릿 메소드 패턴과 전략패턴의 차이점.  (0) 2019.10.31
스프링 애플리케이션이란?  (0) 2019.10.09
IoC/DI  (0) 2019.09.28
스프링이 제공해주는 것들  (0) 2019.09.28

위 이미지와 같은 문제 생길시

 

 

 

Tools -> Material Theme -> Material Theme opotions -> Toggle Themed Title Bar -> 인텔리제이 재시작

 

 

해결완료!!

'Intelli J' 카테고리의 다른 글

[Intelli J] java: error: release version [version] not supported  (0) 2019.07.26

아이템 1. 생성자 대신 정적 팩터리 메서드를 고려하라.

정적팩터리메서드의 장점.

1. 이름을 가질 수 있다.

이름이 없는 생성자와는 다르게 반환 될 객체의 특성을 쉽게 묘사가능.ex) BigInteger(int, int, Random) -> BigInteger.probablePrime

2. 호출될 때마다 인스턴스를 새로 생성하지않아도 됨.

객체가 자주 요청되는 상황일 때 성능을 크게 끌어올려 준다.

3. 반환 타입의 하위 타입 객체를 반환할 수 있는 능력이 있다.
4. 입력매개변수에 따라 매번 다른 클래스의 객체를 반환할 수 있다.

ex)EnumSet 클래스는 정적팩터리를 제공한다. 원소가 64개 이하면 RegularEnunSet, 원소가 65개 이상이면 JumboEnumSet

5. 정적팩터리메서드를 작성하는 시점에는 반환할 객체의 클래스가 존재하지 않아도 된다.

정적팩터리메서드의 단점.

1.정적 팩터리 메서드만 제공하면 하위 클래스를 만들 수 없다.

상속을 하려면 public이나 protected생성자가 필요하다.
하지만 시선을 달리해보면 상속보다 컴포지션(포함)을 사용하도록 유도하고, 불변타입으로 만드려면 이 제약을 지켜야하기 때문에 오히려 장점일 수 있다.

2.정적팩터리메서드는 프로그래머가 찾기 어렵다.

생성자는 API에 명확히 설명되있지만, 정적팩터리메서드는 그렇지 않다.( p12 명명방식들 참고.)


+ Recent posts