IoC (Inversion of Control)
- IoC(제어의 역전)이란 객체의 생성, 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀌었다는 것을 의미
- 컴포넌트 간의 의존관계 결정(Component dependency resolution), 설정(configuration) 및 생명 주기(lifecycle)를 해결하기 위한 디자인 패턴(Design Pattern)
DI (Dependency Injection)
- 각 클래스간의 의존관계를 빈 설정 (Bean Definition) 정보를 바탕으로 컨테이너가 자동으로 연결해 주는 것
- 개발자들은 빈 설정 파일에서 의존관계가 필요하다는 정보를 추가하면 된다.
- 객체 레퍼런스를 컨테이너로부터 주입받아서 실행 시에 동적으로 의존관계가 생성된다.
- 컨테이너가 흐름의 주체가 되어 애플리케이션 코드에 의존관계 주입
- 장점: 코드가 단순해지고 컴포넌트 간의 결합도가 느슨해진다.
DI 유형
- Setter Injection
- 의존성을 입력 받는 setter 메서드를 만들고 이를 통해 의존성 주입
- Construction Injection
- 필요한 의존성을 포함하는 클래스의 생성자를 만들고 이를 통해 의존성 주입
- Method Injection
- 의존성을 입력받는 일반 메소드를 만들고 이를 통해 의존성 주입
DI를 이용한 클래스 호출 방식
- Setter Injection
- Constructor Injection
Spring 컨테이너
- 스프링 컨테이너가 관리하는 객체를 빈(Bean)이라 하고, 이 빈들을 관리한다는 의미로 컨테이너를 빈 팩토리(BeanFactory)라고 부른다.
- 객체의 생성과 객체 사이의 런타임 관계를 DI관점에서 볼 때 컨테이너를 BeanFactory라고 한다.
- BeanFactory에 여러 가지 컨테이너 기능을 확장하여 ApplicationContext라고 부른다.
BeanFactory vs Application Context
- BeanFactory
- Bean을 등록, 생성, 조회, 반환 관리
- 보통은 BeanFactory를 바로 사용하지 않고, 이를 확장한 ApplicationContext 사용
- getBean() 메서드가 정의되어 있음
- Application Context
- Bean을 등록, 생성, 조회, 반환 관리하는 기능은 BeanFactory와 같음
- Spring의 각종 부가 서비스 추가로 제공
- Spring이 제공하는 ApplicationContext 구현 클래스가 여러 가지 종류가 있음
Maven project 디렉토리 구조
모듈화 → 필수는 아님! 편의를 위함
- src/main/java
- src/test/java
- src/main/resource
- 정적 문서, 환경 설정 문서 등 (~.xml)
라이브러리 추가
- pom.xml에 추가
- Maven Repository에서 소스 확인 가능
- ex. spring-context의 경우
- 저장 경로
- C > 사용자 > (username) > .m2 > repository
📑 참고
Spring → 웹 전용이 아님
순수 애플리케이션에도 사용 가능
모듈 중 웹에 적합한 모듈이 있음 (MVC 아키텍처)
pom.xml → 라이브러리 관리 설정
'TIL > BackEnd' 카테고리의 다른 글
JPA - Oracle 데이터베이스 생성 (0) | 2023.05.08 |
---|---|
Transaction (0) | 2023.05.04 |
[Spring] 예외처리: @ExceptionHandler, SimpleMappingExceptionResolver (0) | 2023.04.27 |
@Autowired와 @Value를 통한 주입의 차이 (0) | 2023.04.26 |
[Spring] Spring Framework 기초 (0) | 2023.04.24 |