항해99[5기] 3주차 WIL[1/30]

김현진·2022년 1월 30일
0

항해 WIL

목록 보기
3/5

IoC(제어의 역전)

  • 기존의 프로그램, 개발자들은 스스로 객체를 생성하고 메소드를 호출하며
    의존관계가 필요한 것들을 일일히 넣어줌
    -> 개발자가 모든 흐름을 제어하는 방식
    • 문제점
    • 개발자가 모든 것을 제어하기 때문에 실수가 일어나기 쉬움
    • 의존관계가 복잡한 객체는 변경이 있을 때 파급 효과가 커짐

  • IoC?
    • 프로그램에서 필요한 객체를 생성하고 메소드를 호출하는 등의 작업을
      외부에서 해주는 방식
    • IoC 컨테이너에서 객체에 대한 생성 및 생명주기, 의존성을 관리
    • 개발자가 프레임워크에 필요한 부분을 개발하고, 조립하면 프레임워크
      내부에서 정해진대로 흐름을 이어나간다.

DI(의존성 주입)

  • 구성요소 간의 의존 관계가 소스 코드 내부에서가 아닌 설정을 통해 외부에서 정의되는 방식
  • 즉, 의존적인 객체를 직접 생성하거나 제어하는 것이 아니라 특정 객체에 필요한 객체를 외부에서 결정하여 연결
  • 이 설정 정보를 바탕으로 컨테이너가 의존관계로 이루어진 객체들을 연결하고
    필요한 객체는 개발자가 컨테이너로부터 받아서 사용한다.

Spring bean

  • 스프링 컨테이너에서 관리되는 자바 객체
  • 스프링 컨테이너는 싱글톤 컨테이너!
    -> 호출 될 때마다 다른 객체를 생성해 주는 것이 아니라, 같은 객체(공유 객체)를 생성하여 사용한다
    -> 공유 객체를 사용하기 때문에 무상태로 설계해야 한다!!
    (특정 클라이언트가 값을 변경할 수 있는 필드가 존재해선 안된다)
  • 등록 방식
    • @Component & @ComponentScan
      • @Component: Bean으로 등록할 클래스
      • @ComponentScan: 어느 지점부터 Component를 찾을지 결정
    • @Configuration & @Bean
      • @Configuration이 있는 설정 파일 내에 @Bean을 통해 등록

0개의 댓글