[스프링] bean, IoC, DI ???

구동현·2024년 1월 24일
0

스프링

목록 보기
12/21

class A {
    B b;
    
    A(B b){
        this.b = b;
    }
}

class B {
    B(){
    }
}

위 코드를 보자.

A의 인스턴스를 생성하려면
A a = new A(new B());
A 생성자 필드에 B 인스턴스를 받아야하니, B또한 생성해야한다.

A의 생성자 필드값을 C 인스턴스로 수정하고 싶을때에도, 수정이 많이 필요하다.

이것을 'A가 B에 의존적이다' 라고한다.

  • A가 B와 강한결합을 가지고 있다 라고도 한다.

의존적일때 발생하는 문제들

  1. 코드를 변경, 삭제하기 어렵다.
  2. 객체 지향적이지 못하다.

의존성을 최소화해야한다.

  • 약한 결합을 형성해야한다 라고도 한다.

제어의 역전, IoC

  • Inversion of Controll
  • 설계원칙
  • 의존성을 해결한다.

  • 이렇게 강한결합을

  • 이렇게 약한 결합으로 만드는 것

의존성 주입, DI

  • 디자인패턴

DI 패턴을 통해, IoC 원칙을 이룬다.


IoC Container

어떻게 A가 B에게 의존적인 관계를 바꿀 수 있는가

IoC Container가 객체들을 먼저 생성했을때 가능하다.

그때의 객체들 == bean


bean

bean으로 생성된 객체들은 class의 대문자가 소문자로 변한 이름으로 생성됨

@Component

  • @Componet annotation을 사용하면, 숫자 7 옆에 bean 모양이 생긴다.

@Autowired

생성자 주입의 경우, 자동으로 생성되지만, 메소드 주입의 경우는 직접 입력을 해줘야함

@RequiredArgsConstructor

lombok으로 도 가능하게 함

3 layer Annotation

  • @Controller
  • @Service
  • @Repository

수동으로 설정하기

  1. ApplicationContext
  2. Bean 이름으로 가져오기
  3. Bean 클래스로 가져오기
profile
개발합시다

0개의 댓글