티스토리 뷰

반응형

[Spring/스프링] 기본 원리 정리(DI/IoC등 포함)

 

간단히 정리하면,

인터페이스를 통해 규칙을 만들고,

각각의 구현체 안에서 다른 객체 생성을 배제하여야한다, 대신 생성자등을 통하여, 객체생성(의존성)을 주입해줌으로써 

두 구현체간에 의존성을 없앨 수 있다.

 

DI(Dependency Injection)의존성 주입

 

A라는 클래스 내부에 has a 관계로 B클래스를 포함을 시키면 A클래스는 B에 의존적이다 라고 말을 하는데 

이 말을 쉽게 풀어 쓰면 A라는 클래스가 작동하기 위해서는 B가 필요하다는 의미가 된다.

 

평소 Java개발을 하던 사람이라면 

 

내부에서 new연산자를 사용해서 다른 클래스를 생성하는 경우를 많이 볼 수 있었을 것이다.

 

이때 new연산자를 사용해서 만들어진 객체에 의존한다 라는 표현을 사용할 수 있다.

 

클래스 A에서 의존성 객체를 생성하는 방법은 다음 두 가지로 분류가 된다.

 

public class A{

private B b;

 

A(){

b=new B();

}

}

 

public class A{

private B b;

 

public void setB(B b){

this.b = b;

}

}

 

여기에서 만약 B클래스를 확장시켜 C클래스를 만들었다고 가정을 하고 이제 A클래스에서 B클래스가 아닌 C클래스가 필요하게 된다면, 

첫번째 방법 같은 방법은 .java라는 확장자를 가진 파일의 소스코드를 변경 해주어야 한다.

 

하지만, 두번째 방법은 A클래스를 생성 후 간단한 setter를 통해  B클래스를 상속받는 C를 넣어주기만 하면되기 때문에 확장성 면에서 뛰어나다고 할 수 있다.

(A클래스의 생성자를 통해 B를 세팅할 수 도 있다.)

 

그렇기 때문에 스프링에서는 2번째 방법을 통해 내부적으로 의존성 객체를 주입시켜준다.

 

 

스프링에서는 객체의 생성과 소멸에 관련된 작업을 자동적으로 수행해주는데 객체가 생성되는 곳을 스프링에서는 Bean 컨테이너라고 부른다 

 

스프링에서는 객체를 Bean이라고 부르며, 스프링에서는  프로젝트가 실행될때 사용자가 Bean으로 관리하는 객체들을 자동으로 생성해준다.

 

A라는 클래스와 B라는 클래스 C라는 클래스에서 D라는 클래스를 요청했을때 스프링에서는 실행될때 생성했던 Bean을 주입시켜주는데 이 과정을 DI라고 한다.

 

Ioc(Inversion of Control)

 

 

스프링에서는 또 다른 특징으로 IoC(Inversion of Control)을 말할 수 있다. 

 

IoC는 제어의 역전이라고 말하며, 간단히 말해 제어의 흐름을 바꾼다라고 한다.

 

기존에는 다음과 순서로 객체가 만들어지고 실행되어졌다.

 

1.객체 생성

2.의존성 객체 생성(클래스내부에서)

3.의존성 객체 메소드 호출 

 

하지만, 스프링에서는 다음과 같은 순서로 객체가 만들어지고 실행된다.

 

1.객체 생성

2.의존성 객체 주입(스스로가 만드는것이 아니라 제어권을 스프링에게 위임하여 스프링이 만들어놓은 객체를 주입한다.)

3.의존성 객체 메소드 호출

 

 

출처: https://cofived.tistory.com/39 [henjun's dev journal:티스토리]

 

 

 

반응형
댓글
반응형