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 컨테이너의 동작 과정
- IoC 컨테이너가 Configuration Metadata를 읽는다.
- IoC 컨테이너는 Configuration Metadata를 기반으로 의존성을 생성하고 객체(POJO)에 주입한다.
- 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