Spring 기초 :: DI, IoC, Bean

Lucy·2022년 11월 11일
0

Spring

목록 보기
1/3

Spring

JAVA 기반의 웹 프레임워크
Inversion of Control (IoC)Dependency Injection (DI)은 다형성을 활용하며 객체 지향 설계 원칙인 SOLID를 지키며 개발할 수 있도록 지원함

  • SOLID에 대한 구체적인 내용은 다음 링크에서 확인할 수 있다.
    OOP와 SOLID

Spring의 차별성

Spring의 객체 생성 및 실행 순서는 다음과 같다.

  1. 객체 생성
  2. 의존성 객체 주입
    • 스스로가 만드는 것이 아니라 제어권을 Spring에 위임하여 Spring이 만들어놓은 객체를 주입
  3. 의존성 객체 메소드 호출

일반적으로 기존에는 2의 단계가 의존성 객체를 클래스 내부에서 생성하는 것이었는데, 각 단계에 대한 추가 설명과 효과를 다음 정의를 통해 설명하겠다.

DI (Dependency Injection)

스프링이 다른 프레임워크와 차별화되어 제공하는 의존 관계 주입 기능으로, 객체를 직접 생성하는 것이 아니라 외부에서 생성한 후 주입시켜주는 방식

DI 컨테이너 (ex. AppConfig)를 통해 생성자(constructor)가 IoC 컨테이너에 접근하는 것으로 의존 관계를 설정함

Spring은 외부에서 생성된 객체를 setter()를 통해 사용하는 두 번째 방법을 택한다.

이 때, 외부는 IoC 컨테이너라고 한다.

즉, A 객체에서 B, C 객체를 사용(의존)할 때 A 객체에서 직접 생성하는 것이 아니라 IoC 컨테이너에서 생선된 B, C 객체를 조립(주입)시켜 setter나 constructor를 통해 사용하는 방식이다.

효과

DI를 통해 모듈 간의 결합도가 낮아지고 유연성이 높아진다.

IoC (Inversion of Control)

객체의 제어권이 스프링에게 넘어가는 것

메소드나 객체의 호출 작업을 개발자가 결정하는 것이 아니라 외부에서 결정되는 것

효과

객체의 의존성을 역전시켜 객체 간의 결합도를 줄이고 유연한 코드를 작성할 수 있게 하여 가독성 및 코드 중복, 유지 보수를 편하게 할 수 있게 한다.

Bean

Spring에서의 객체

  • Bean 컨테이너 : Bean이 생성되는 곳

Spring에서는 프로젝트가 실행될 때 사용자가 Bean으로 관리하는 객체들의 생성과 소멸에 관련된 작업을 자동적으로 수행해준다.

이를 통해 Bean들은 싱글턴 패턴의 특징을 가지며 제어의 흐름을 사용자가 컨트롤하는 것이 아니라 Spring에게 맡겨 작업을 처리할 수 있다.


Java 문법과 Spring

Annotation

  • 컴파일 시 JVM이 보는 주석으로 메타 데이터 역할을 함

  • 종류

    	@Component
    	@RestController
    	@Controller
    	@Configuration
    	@Service
    	@Bean
  • 스프링은 IoC 컨테이너 관리권을 가지고 있어 어노테이션을 사용하여 의존성 주입을 한다.


Spring VS Spring Boot

Spring과 Spring Boot 차이 관련 글


Ref

DI, IoC

@Autowired와 DI
https://devlog-wjdrbs96.tistory.com/166

profile
나아가는 OnlyOne 개발자

0개의 댓글