Ioc(Inversion of Control)이란 '제어의 역전'이라는 의미이다. 이는 타 블로그나 위키에 자세히 나와있다.
내가 공부하고 이해한 바로는 초기에 자바로 만드는 서버에서는 개발자에게만 모든 권한이 있었다. 이는 아주 강력한 권한이 있어 개발자 마음대로 모든 것을 설계하고 만들 수 있지만 직접 일일히 사소한 것도 세팅을 해줘야 된다는 불편함을 의미하기도 한다.
그래서 개발자의 권한을 spring에게 넘겨줌으로써 반복적인 세팅을 개발자가 아닌 스프링이 대신 처리해줌으로써 편리성이 증가 되었다.
객체 생성
의존성 객체 생성 (클래스 내부에서 생성)
의존성 객체 메소드 호출
객체 생성 (스프링에게 넣어줌)
의존성 객체 주입 ( 스프링에 넣어준 객체를 주입한다. 스프링이 실행)
의존성 객체 메소드 호출
의존성 객체를 스프링이 실행될 때 마다 새로 만들어주고 필요한 곳에 주입함으로써 싱글 패턴의 특징을 지니게 된다.
싱글 패턴 쉽게 말하면 어떤게 실행이되면 한개의 객체가 생성이되고 그 한 개의 객체에서 모든 작업이 끝나고 사라지는 것을 싱글 패턴이라고 한다. 즉 복잡하게 여러개 만들어서 사용하는 것이 아니라 단 하나의 객체를 만들고(그 객체 안에 여러가지 의존성 객체들을 넣는다) 그 객체만 관리하는 방식이다.
장점
1. 한번의 new 인스턴스를 사용하기 때문에 메모리 낭비를 방지 할 수 있다.
2. 싱글패턴 클래스의 인스턴스는 전역 인스턴스이기 때문에 다른 클래스의 인스턴스와 데이터를 공유하기 쉽다.
단점
실질적인 의존성 주입을 DI라고 부른다. 한개의 인스턴스에서 다른 객체를 생성 할 때 new를 사용하지 않고 외부에서 만들어진 객체를 settt() 혹은 생성자를 사용해서 불러오는 방법이 DI 이다.
A객체를 만들 때 다른 객체를 불러와서 사용할 때 (다른 객체는 이미 Bean 객체에 생성되서 들어가 있다.) Bean에서 객체를 찾고 생성사를 사용하여 만드는 방식 (이러한 작업을 개발자가 하는 것이 아니라 스프링에서 해준다.)