본문 바로가기

카테고리 없음

[Spring] 컬렉션(List, Set, Map, HashMap) & 스프링 컨테이너

Q. List, Set, Map, HashMap의 차이에 대해서 설명해주세요.

 

List는 순서가 있고, 중복을 허용한다. 저장공간이 필요에 의해 자동으로 늘어난다.

Set은 순서가 없고, 중복을 허용하지 않는다. 집합.

Map은 순서가 없고, 키는 중복을 허용하지 않고, 값은 중복을 허용한다.

HashMap은 Map 인터페이스를 implements한 클래스로 중복을 허용하지 않는다.

특정 키에 대한 값을 찾는 과정에서 HashMap은 HashTable을 이용해서 키-값 관계를 유지하고, Map은 red-black Tree알고리즘을 이용한다.

 

 

Q. 스프링 컨테이너(Spring Container)에 대해 설명해주세요.

 

스프링 컨테이너(Spring Container)는 스프링 프레임워크의 핵심 컴포넌트이다.

스프링 컨테이너는 내부에 존재하는 빈의 생명주기를 관리(빈의 생성, 관리, 제거 등)하고, 생성된 빈에 추가적인 기능을 제공한다.

(스프링에서는 자바 객체를 빈(Bean)이라 한다.)

 

스프링 컨테이너는 XML, 어노테이션 기반의 자바 설정 클래스로 만들 수 있다.

스프링 부트(Spring Boot)를 사용하기 이전에는 xml을 통해 직접적으로 설정해 주어야 했다.

 

 

스프링 컨테이너의 종류

 

1. BeanFactory

스프링 컨테이너의 최상위 인터페이스로, 스프링 빈을 관리하고 조회하는 역할을 담당한다.

 

2. ApplicationContext

BeanFactory 기능을 상속받아 제공하고, 그외 부가기능을 제공한다.

  • MessageSource : 메시지 다국화를 위한 인터페이스
  • EnvironmentCapable : 개발, 운영, 환경변수 등으로 나누어 처리하고, 애플리케이션 구동 시 필요한 정보들을 관리하기 위한 인터페이스
  • ApplicationEventPublisher : 이벤트 관련 기능을 제공하는 인터페이스
  • ResourceLoader : 파일, 클래스 패스, 외부 등 리소스를 편리하게 조회

BeanFactory를 직접 사용하는 일은 거의 없으며, 부가기능이 포함된 ApplicationContext를 사용한다.

 

 

스프링 컨테이너를 사용하는 이유

객체를 생성하기 위해 new 생성자를 사용하다보면 객체가 서로를 참조하게 된다.

객체 간 참조가 많으면 의존성이 높아지게 된다.

객체지향 프로그래밍에 따라 객체 간 의존성을 낮춰 결합도를 낮추고, 높은 캡슐화를 위해 스프링 컨테이너를 사용한다.

또한, 변경 사항이 생기면 구현 코드 변경도 생기는데, 스프링 컨테이너를 사용하면 구현 클래스에 있는 의존성을 제거하고 인터페이스에만 의존하도록 설계할 수 있어 의존도가 낮아지게 된다.

 

 

참고

 

https://docs.spring.io/spring-framework/reference/core/beans/introduction.html

https://ittrue.tistory.com/220

https://chobopark.tistory.com/200