Spring(IoC와 DI)

Viva의 놀이터·2021년 3월 26일
0

spring

목록 보기
4/13
post-thumbnail

IoC

Ioc(Inversion of Control)이란 '제어의 역전'이라는 의미이다. 이는 타 블로그나 위키에 자세히 나와있다.

내가 공부하고 이해한 바로는 초기에 자바로 만드는 서버에서는 개발자에게만 모든 권한이 있었다. 이는 아주 강력한 권한이 있어 개발자 마음대로 모든 것을 설계하고 만들 수 있지만 직접 일일히 사소한 것도 세팅을 해줘야 된다는 불편함을 의미하기도 한다.

그래서 개발자의 권한을 spring에게 넘겨줌으로써 반복적인 세팅을 개발자가 아닌 스프링이 대신 처리해줌으로써 편리성이 증가 되었다.

동작 방식

이전의 방식

  1. 객체 생성

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

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

현재 스프링의 방식

  1. 객체 생성 (스프링에게 넣어줌)

  2. 의존성 객체 주입 ( 스프링에 넣어준 객체를 주입한다. 스프링이 실행)

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

장점

의존성 객체를 스프링이 실행될 때 마다 새로 만들어주고 필요한 곳에 주입함으로써 싱글 패턴의 특징을 지니게 된다.

스프링에서는 객체를 Bean이라고 부르고 객체들이 저장되는 공간을 Bean 컨테이너라고 부른다.

what is the 싱글 패턴

싱글 패턴 쉽게 말하면 어떤게 실행이되면 한개의 객체가 생성이되고 그 한 개의 객체에서 모든 작업이 끝나고 사라지는 것을 싱글 패턴이라고 한다. 즉 복잡하게 여러개 만들어서 사용하는 것이 아니라 단 하나의 객체를 만들고(그 객체 안에 여러가지 의존성 객체들을 넣는다) 그 객체만 관리하는 방식이다.

장점
1. 한번의 new 인스턴스를 사용하기 때문에 메모리 낭비를 방지 할 수 있다.
2. 싱글패턴 클래스의 인스턴스는 전역 인스턴스이기 때문에 다른 클래스의 인스턴스와 데이터를 공유하기 쉽다.

단점

  1. 단 한개의 객체에 너무 많은 것을 넣기 때문에 수정이 어렵고 테스트하기 어렵다.

DI

실질적인 의존성 주입을 DI라고 부른다. 한개의 인스턴스에서 다른 객체를 생성 할 때 new를 사용하지 않고 외부에서 만들어진 객체를 settt() 혹은 생성자를 사용해서 불러오는 방법이 DI 이다.

정리하면

앞서 말한 Bean 컨테이너에서 생성된 객체를 불러서 사용하는 것이다.

A객체를 만들 때 다른 객체를 불러와서 사용할 때 (다른 객체는 이미 Bean 객체에 생성되서 들어가 있다.) Bean에서 객체를 찾고 생성사를 사용하여 만드는 방식 (이러한 작업을 개발자가 하는 것이 아니라 스프링에서 해준다.)

profile
역사를 잊은 기술에겐 미래가 없다

0개의 댓글