본문 바로가기
TIL

[231102] 배열을 리스트로, 스프링 bean과 싱글톤 패턴

by 진진리 2023. 11. 2.
728x90
  • 알고리즘 문제 풀기

스트림을 이용해 배열 -> 리스트 변환하기

 

배열을 리스트로 변환하기 위해 .toList() 스트림을 쓰려고 했는데 오류가 발생했다.

배열은 int[] 배열인데 리스트의 값은 Integer 타입이기 때문이다.

검색해보니 중간에 .boxed()를 추가해서 박싱한 후 리스트로 변환해줘야 했다.

List<Integer> list = Arrays.stream(arr).boxed().toList();

 

  • 스프링 bean

스프링 강의를 들으면서 bean에 대해 배우게 되었다.

스프링에서 Controller, Service, Repository 이렇게 세 개의 레이어로 나누는 과정에서

외부에서 미리 만든 객체를 주입함으로써 의존성을 역전시켜 코드의 유지보수성을 높인다는 내용을 배웠는데

그 과정에서 Spring 프레임워크가 필요한 객체를 생성하고 관리하며 이러한 객체를 Bean이라고 부른다고 한다.

 

해당 내용의 강의를 들으면서 이전 팀 과제에서 코드의 패키지를 Service, Database, Output으로 나누었고

Database인 클래스들을 싱글톤 패턴으로 설계했던 것이 생각이 나서 이해가 잘 되었다.

그런데 그렇다면 스프링 bean과 싱글톤 패턴의 개념이 비슷해보이는데 무슨 관계인지 궁금해졌다.

 

검색해보니 나와 비슷한 궁금증을 가지고 내용을 정리하신 분의 블로그를 보게되었다.

https://velog.io/@s2moon98/%EC%8A%A4%ED%94%84%EB%A7%81%EC%9D%98-bean%EA%B3%BC-%EC%8B%B1%EA%B8%80%ED%86%A4%EC%9D%98-%EC%97%B0%EA%B4%80%EA%B4%80%EA%B3%84

 

스프링의 bean과 싱글톤의 연관관계

메서드를 스프링 bean으로 등록해서 재사용해보자

velog.io

 

위 블로그에 따르면

  • 자바 레벨 싱글톤 처리 : 클래스 로더 안에서 싱글톤 보장
    • -> 미리 인스턴스를 만들어 메모리 낭비가 될 수 있고 static이라 테스트 어려움
  • 스프링 레벨 싱글톤 처리: 스프링 컨테이너 안에서 싱글톤 보장
    • -> 관리가 용이

이렇게 정리되어 있었다.

 

보면 스프링에서는 bean이라는 개념을 통해 객체를 싱글톤으로 구현 및 사용하고,

이는 자바 레벨에서 (이전에 내가 했던 것처럼) 싱글톤을 구현하는 것보다 더 관리가 용이하다고 한다.