Spring Framework의 핵심 용어 개념

yg_hoon·2023년 4월 2일
0

작성 동기

이전에 Spring의 Core 개념에 대해 배웠었다.
하지만 시간이 지나면서 점차 옅어진 개념들.. 지금은 머리 속에 두루뭉술하게만 남은 것 같다.
Spring에 가장 기본이 되면서 개발할 때 반드시 알아야 하는 개념인만큼 확실하게 정리해두어야 한다는 생각이 들었다.
가장 확실하게 안다고 말할 수 있는 것은 다른 사람에게 설명할 수 있을 때인 것 같다.
배웠던 개념 위주로 글로 적어보고 말로 해보며 내가 개념을 이해한게 맞는지 확인해보자.

IoC

This part of the reference documentation covers all the technologies that are absolutely integral to the Spring Framework.
Foremost amongst these is the Spring Framework’s Inversion of Control (IoC) container.
https://docs.spring.io/spring-framework/docs/current/reference/html/core.html

Spring Framework docs의 가장 첫 번째 Core Technologies에 도입부 설명이다.
이 문장을 해석하려면 IoC가 뭘까에 대한 의문을 먼저 풀어야 한다.
IoC는 Inversion of Control의 약자로, 뜻을 그대로 풀면 제어의 반전(역전) 이 된다.
다시 말해서 제어권이 역전되었다고 해석할 수 있다.
제어권이 역전되었다는 것은 객체의 호출 작업 같은 흐름에 대한 제어를 개발자가 하는 것이 아니라 외부(프레임워크)에서 한다는 것을 의미한다.

정리하면, IoC는 소프트웨어 디자인 패턴 중 하나로 기존 전통적인 프로그래밍에서는 개발자가 작성한 프로그램이 라이브러리를 호출해서 이용하는 형태였다면, IoC가 적용된 소프트웨어에서는 외부 라이브러리의 코드가 개발자가 작성한 코드를 호출해 사용하는 것을 의미한다.

Spring IoC Container & Bean

스프링 프레임워크에서 사용하는 객체의 생명주기와 의존성을 관리해주는 컨테이너

개발자가 객체의 인스턴스 생성과 소멸 등의 생명 주기를 관리하는 것이 아닌 컨테이너가 그 역할을 해준다.
이를 통해 개발자가 로직에만 집중할 수 있다는 이점이 있다.

스프링 컨테이너가 관리하는 객체를 Bean(빈)이라고 하는데, 이러한 빈을 관리해주기 때문에 BeanFactory라는 이름이 붙은 인터페이스를 제공하며 스프링 빈을 관리하고 조회하는 역할을 한다.
하지만 이 BeanFactory를 상속받아 여러 기능을 추가한 ApplicationContext 라는 것을 주로 사용하면서 BeanFactory의 상위 집합으로서 스프링 컨테이너를 통상 ApplicationContext라고 칭하게 됐다.
추가 기능: 메세지 소스를 활용한 국제화, 애플리케이션 이벤트, 환경변수 등

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

  • XML을 이용한 스프링 컨테이너 생성
ApplicationContext ac = new GenericXmlApplicationContext("appConfig.xml");
  • Java 코드를 통한 스프링 컨테이너 생성
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);

이 클래스는 ApplicationContext 인터페이스의 구현체이며 AppConfig.class는 구성 정보이다.

각 형태별 설정 정보를 읽는 Reader가 존재하며 이를 통해 BeanDefinition을 생성한다.
이처럼 스프링은 다양한 형태의 설정 정보를 BeanDefinition으로 추상화해서 사용한다.

DI

Dependency Injection, 의존성 주입
객체를 직접 생성하는 대신 외부로부터 주입 받아 사용한다.

DI 관계는 컨테이너가 Bean Definition이라고 하는 빈 설정 정보를 바탕으로 자동으로 연결해준다.

DI 방법에는 크게 생성자 주입 방식, 필드 주입 방식, 수정자 주입 방식이 있다.
최근 가장 많이 사용 하는 방식은 생성자 주입 방식으로 클래스의 생성자가 한 개면서 주입 받을 객체가 Bean으로 등록이 되어있다면 @Autowired 없이 자동으로 의존성을 주입해준다.
필드 주입 방식은 필드에 @Autowired를 붙여주면 의존성이 주입되는 방식을 말한다.
수정자 주입 방식은 Setter 메소드에 @Autowired를 붙여 의존성을 주입하는 방식이다.

DI를 통해 코드의 재사용성을 높이고 객체 간의 의존성을 낮출 수 있다.

profile
차곡차곡 쌓아가는 개발 노트

0개의 댓글