TIL

TIL - Spring DI, Inversion of Control

yolang 2025. 1. 4. 23:32
728x90

📚 Today's TODO

✅어제 공부한 내용 복습하기

🗃️ 스프링 입문 - 인프런 

  • [섹션 5] 스프링 빈과 의존 관계

🗃️ 파이토치 트랜스포머를 활용한 자연어 처리와 컴퓨터 비전 심층학습

 

📡 새로 알게 된 내용

🗃️ 스프링 입문

  • DI (Dependency Injection) : 의존성이 있는 클래스를 내부에서 선언하는 것이 아니라 외부에서 주입시켜 주는 것
    • 오늘 본 예시에서는 하나의 객체를 싱글톤으로 여러개의 객체에서 사용하기 위해서 DI 를 통해 주입해 줌으로써 재사용했다.
    • Objects only define their dependencies only through constructor arguments (Spring 공식사이트)
  • 스프링 빈 (Spring Bean)
    • A bean is an object that is instantiated, assembled, and managed by a Spring IoC container. (Spring 공식사이트)

Spring Bean의 주요 특징

  1. 컨테이너 관리:
    • Bean은 개발자가 직접 생성하거나 관리하지 않고, Spring 컨테이너가 생성 및 관리합니다.
  2. Singleton 기본 설정:
    • Spring Bean은 기본적으로 싱글톤(Singleton) 스코프로 생성됩니다.
    • 다른 스코프(Prototype, Request, Session 등)로도 설정 가능.
  3. Lazy Initialization:
    • 기본적으로 Bean은 애플리케이션 컨텍스트가 로드될 때 생성됩니다(Eager Initialization).
    • 필요 시 @Lazy를 사용해 지연 초기화(Lazy Initialization) 설정 가능.
  4. 의존성 주입 (Dependency Injection):
    • Bean 간의 의존성은 생성자, 세터, 또는 필드 기반으로 주입됩니다.

  • Container
    • 객체의 생성, 수명 주기 관리, 의존성 관리 등을 담당하는 컴포넌트입니다. 일반적으로 Java 컨테이너는 의존성 주입(Dependency Injection, DI)을 통해 객체 간의 관계를 관리하며, 애플리케이션의 구조를 유연하고 모듈화된 방식으로 설계할 수 있도록 도와줍니다.(ChatGPT)
  • Inversion of Control 
    • 객체가 각각 의존성을 관리하는 것이 아니라 inversion (반전) 으로 외부가 관리하는 것으로 Container가 관리한다. 
    • 의존성을 객체를 생성하지 않고 관리하는 것
  • @Autowired
    • 연관된 객체를 알아서 주입해준다고 한다!!! 이거 정말 신기하구만
  • @Configuration, @Bean - 자바에 직접 설정하는 것도 배웠는데 이건 알고만 있고 다음 강의에서 더 자세히 공부해보겠다.

🎛️ 오늘의 TroubleShooting

  • pip3: command not found - python 가상환경을 켜지 않아서 생긴 문제였다.

👻 오늘 하루 복기

오늘은 주말이라고 좀 나태했던거 같다. 내일은 다시 달려야지. 스프링의 bean 개념와 inversion of control 개념을 아는 것이 흥미로웠다. autowired는 정말 신기하다. container에서 다 해준다니 이거 참 편리하지 않은가. 배울게 많지만 재밌어서 할 힘이 좀 나는 거 같다. 내일은 오늘 파이토치 설치만 하다가 끝난 NLP를 중심으로 해보겠다. 

728x90