Java

Spring Framework의 주요 특징

예요 2024. 7. 23. 20:18

Spring Framework의 주요 특징

 

제어의 역전(Inversion of Control, IoC)


  • 소프트웨어 디자인 패턴 중 하나로 일반적인 프로그램의 제어 흐름과는 반대로 "제어의 주체가 역전"되는 것
  • 일반적으로 프로그램은 사용자나 개발자가 직접 제어 흐름을 조작하고 결정하지만
    IoC 패턴을 사용하면 제어 흐름의 결정 권한(객체 생성 및 관리)이 Spring 컨테이너에게 위임된다.
    1. 객체 간 결합도를 낮출 수 있다.
    2. 유연한 코드를 작성할 수 있다.
    3. 테스트의 용이성이 향상된다.
  • 컨테이너가 의존성을 주입하고 객체의 라이프사이클을 관리함으로써 흐름을 관리하는 제어를 수행한다.

컨테이너

  • 객체의 인스턴스를 생성 및 관리하는 역할
  • 필요한 객체를 생성하고 객체 간 의존성을 주입하는 등의 작업을 수행한다.

IoC 컨테이너

  • 제어의 역전 개념을 기반으로 동작하는 컨테이너
  • 애플리케이션의 제어 흐름을 관리하며 객체의 생성 및 의존성 주입을 자동으로 처리한다.

Spring IoC 컨테이너

  • 스프링 프레임워크에서 제공하는 IOC 컨테이너의 구현체 중 하나로 POJO의 생성과 의존성 주입을 담당
  • 스프링 프레임워크에서 제공하는 다양한 기능과 모듈을 활용하여 애플리케이션을 개발하도록 도와준다.

Spring IoC 컨테이너의 동작 과정

  1. IoC 컨테이너가 Configuration Metadata를 읽는다.
  2. IoC 컨테이너는 Configuration Metadata를 기반으로 의존성을 생성하고 객체(POJO)에 주입한다.
  3. IoC 컨테이너가 애플리케이션 구성 설정 완료 후 사용할 수 있는 상태로 만들어준다.

★ Configuration Metadata

  • Spring 컨테이너가 관리해야 할 객체에 대해 어떻게 지시하는지를 말한다. 
  • Spring IoC 컨테이너 내에서 Bean이 생성, 구성 및 조립되는 방법을 정의한다.
  • XML, Annotation 또는 Java 기반 구성으로 제공한다.

Bean

  • 스프링 프레임워크에서 관리되는 객체
  • 클래스 기반으로 생성하며 빈 컨테이너에 의해 생성, 관리, 검색된다.
  • 애플리케이션에서 사용되는 주요한 구성 요소로서 여러 기능을 수행하고 다른 빈들과 협력한다.
  • XML을 기반으로 빈의 속성 및 의존성을 정의하고 어노테이션을 이용하여  Java 클래스에 작성하여 빈을 설정한다.

BeanDefinition

  • 스프링 프레임워크에서 빈의 정의를 나타내는 구성 메타데이터
  • 빈의 클래스, 범위, 라이프사이클 콜백, 의존성 및 기타 세부 정보에 대한 정보를 제공한다.
  • Spring 컨테이너는 제공된 구성에 따라 빈 인스턴스를 생성하고 관리하는데 이는 런타임에서 빈 객체를 생성하기 위한 역할을 한다.

BeanFactory

  • 스프링의 핵심 인터페이스
  • 빈의 생성, 관리, 검색 등을 담당한다.
  • 빈을 등록하고 필요할 때마다 가져와서 사용할 수 있다.

ApplicationContext

  • BeanFactory의 하위 인터페이스로 빈 컨테이너의 기능을 확장한 것
  • 메시지 리소스 번들, 이벤트 발행 및 처리, AOP(Aspect-Oriented Programmiing) 등의 기능을 지원한다.

 

의존성 검색(Dependency, DL), 의존성 주입(Dependency Injection, DI)


의존성 검색(Dependency, DL)

  • 객체가 직접 의존하는 객체를 검색하고 반환받는 방식

의존성 주입(Dependency Injection, DI)

  • 소프트웨어 디자인 패턴 중 하나로 컴포넌트 간 의존성을 외부에서 주입하는 것
  • 직접 의존하는 객체를 생성하거나 관리하지 않고 의존성을 주입받으므로 컴포넌트 간의 결합도가 낮아져 테스트 용이성, 유지보수성, 재사용성이 향상된다.

① 생성자 주입(Constructor Injection)

 

  • 클래스의 생성자로 의존성을 주입하는 방식
  • 의존성을 인스턴스화하는 동안 사용 가능한다.
  • 클래스가 필요로 하는 종속성을 생성자 매개변수로 선언하여 의존성을 주입한다.

 

② 필드 주입(Field Injection)

 

  • 클래스의 필드에 직접 의존성을 주입하는 방식
  • 선언 필드에 @Autowired 어노테이션을 사용하여 의존성을 주입한다.

 

③ 수정자 주입(Setter Injection)

 

  • 클래스의 Setter 메소드를 통해 의존성을 주입하는 방식
  • Setter 메소드에 @Autowired 어노테이션을 사용하여 의존성을 주입한다.

 

Plain Old Java Object(POJO)


  • 프레임워크에 종속된 무거운 객체를 만들게 된 것에 대해 반발하여 사용되는 용어
  • 데이터를 캡슐화하고 이에 대한 접근 및 수정을 위한 Getter/Setter 메소드를 제공하는 간단한 Java Class를 지칭한다.

 

관점 지향 프로그래밍(Aspect-Oriented Programming, AOP)


  • 객체 지향 프로그래밍 패러다임을 보완하는 기술로 메소드나 객체의 기능을 핵심 관심사와 공통 관심사로 나누어 프로그래밍 하는 것
  • 반복적인 코드를 하나로 묶어 모듈화하여 재사용성과 유지보수성을 향상시킬 수 있다.

Spring AOP 

  • 스프링 프레임워크에서 제공하는 기능 중 하나로 관점 지향 프로그래밍을 지원하는 기술
  • 로깅, 보안, 트랜잭션 관리 등과 같은 공통적인 관심사를 모듈화하여 코드 중복을 줄이고 유지보수성을 향상하는데 도움을 준다.

 

▷ 출처

https://adjh54.tistory.com/298
https://www.javaguides.net/2018/10/spring-ioc-container-overview.html#google_vignette

728x90