[Spring] IOC / DI

Weed·2024년 4월 27일
0

Spring boot

목록 보기
3/4

🛠️ IOC (제어의 역전)

IOC란 간단히 말하자면 제어를 스프링에서 진행한다고 생각하면 된다. 이는 객체나 메소드의 호출작업을 개발자가 아닌 외부(Spring)에서 결정하는 것을 의미한다.

🛠️ DI (의존성 주입)

DI는 말 그대로 의존성을 주입한다는 뜻이다. 이는 객체를 직접 생성하는 것이 아니라 외부에서 생성 후 주입하는 방법이다.

💻 코드 예시

  • 1번 코드
class Sample{
	private Apple apple = new Apple();
}
  • 2번 코드
class Sample{
	private Apple apple;
    
    public Sample(Apple apple) {
    	this.apple = apple;
    }
}

class SampleTest{
	Apple apple = new apple();
    Sample sample = new Sample(apple);
}

1번 코드를 보면 Sample이라는 클래스에서 Apple 객체를 불러왔다. 이는 의존성에 대한 제어권을 객체 자기 자신이 갖는다. 의존 관계는 new라는 키워드를 통해 생성된다.

반면에, 2번 코드는 SampleTest라는 클래스에서 Apple객체를 생성하고 Sample 클래스의 생성자로 주입해주었다.

위 두 코드의 차이점은 무엇일까?

1번 코드는 Apple 객체의 제어권이 Sample 클래스에게 있었다. 하지만 2번 코드는 SampleTest라는 클래스가 가지고 있다.

2번 코드처럼 의존성을 역전시켜 SampleTest에게 제어권을 양도한 것을 IOC라고 하며, 의존성을 외부에서 주입시켜 주는 것을 DI라고 한다.

왜 IOC/DI를❓

  • IOC를 사용함으로써 객체의 의존성을 역전시켜 객체 간의 결합도를 줄이고 유연한 코드를 작성할 수 있게 되었다. 이로 인해 가독성을 좋게, 코드 중복을 줄이고, 유지보수를 편하게 할 수 있게 한다.
  • DI를 사용함으로써 모듈간의 결합도가 낮아지고 유연성이 높아진다.

기존 객체 사용 Process는 아래와 같았다.

하지만 스프링에서는,

스프링이 모든 의존성 객체를 스피링이 실행될때 다 생성해주고 필요한 곳에 주입을 함으로써 Bean들은 싱글턴 패턴의 특징을 가지며, 제어의 흐름을 스프링에게 맡겨 작업을 처리하게 된다.

profile
개발자로 전직해보자

0개의 댓글