IOC(4)
-
IoC(Inversion of Control)란
Ioc(제어의 역전)란 단순히 말하자면 프로그램의 제어 흐름 구조가 뒤바뀌는 것이다. [일반적인 실행 흐름] main() 메소드 등 시작 지점에서 다음에 사용할 오브젝트를 결정하고 생성 --> 생성한 오브젝트의 메소드를 호출 --> 해당 메소드 내에서 다음에 사용할 것을 결정하고 호출 --> 반복 제어의 역전은 이런 제어 흐름의 개념을 뒤집는다. 자신이 어떤 오브젝트를 사용할지 스스로 선택하지 않으며, 본인도 어디서 사용되는지 알 수 없다. 모든 제어 권한을 다른 대상에게 위임하기 때문이다. 서블릿을 예로 들면, 우리는 서블릿을 개발하고 서버에 배포할 수 있어도 그 실행을 우리가 직접 제어할 수 있는 방법은 없다. 대신 서블릿에 대한 제어권한을 가진 컨테이너가 적절한 시점에 서블릿 클래스의 오브젝트를 만..
2022.11.01 -
[토비의 스터디 3.1] 1.6 싱글톤 레지스트리와 오브젝트 스코프
1.5, 1.6장은 스터디에서 내가 맡은 부분이라 발표에 사용한 자료를 그대로 가져왔다. 1.6. 싱글톤 레지스트리와 오브젝트 스코프 오브젝트의 동일성(identity)과 동등성(equality) 동일성은 == 연산자 동등성은 equals() 메소드 동일성은 하나의 오브젝트를 두 개의 레퍼런스 변수가 가리키고 있는 상태 동등성은 두 개의 다른 오브젝트가 메모리상에 존재하나, 로직상의 정의에 따라 오브젝트 정보가 같다고 판단 스프링은 기본적으로 빈을 요청했을 때 매번 동일한 오브젝트를 돌려준다. 1.6.1. 싱글톤 레지스트리로서의 애플리케이션 컨텍스트 애플리케이션 컨텍스트는 싱글톤을 저장하고 관리하는 싱글톤 레지스트리다. 서버 애플리케이션과 싱글톤 스프링이 적용되는 대상은 자바 엔터프라이즈 기술을 사용하는..
2022.05.27 -
[토비의 스프링 3.1] 1.5 스프링의 IoC
1.5, 1.6장은 스터디에서 내가 맡은 부분이라 발표에 사용한 자료를 그대로 가져왔다. 이제 스프링을 사용해본다. 기존에 만든 DaoFactory을 스프링이 사용 가능하도록 만들어보자. 간단한 개념을 소개하자면, 스프링이 제어권을 가지고 직접 생성과 관계를 맺어주는 오브젝트를 빈(Bean)이라고 한다. 빈의 생성, 관계 설정 등의 제어를 담당하는 IoC 오브젝트를 빈 팩토리라고 하며 애플리케이션 컨텍스트를 사용한다. 애플리케이션 컨텍스트는 별도의 설정 정보를 참고해서 빈에 대한 제어 작업을 총괄한다. 1.5.1 오브젝트 팩토리를 이용한 스프링 IoC 앞서 만든 DaoFactory를 스프링의 애플리케이션 컨텍스트가 사용할 수 있는 설정정보로 만들어보자. 먼저, 설정을 담당하는 클래스는 스프링이 인식할 수..
2022.05.27 -
[토비의 스프링 3.1] 1.4 제어의 역전(IoC)
1.4.1 오브젝트 팩토리 지금까지 초난감 DAO를 리팩토링하였다. 그러나 UserDaoTest가 DAO의 클라이언트 오브젝트가 되면서, 어떤 ConnectionMaker 구현 클래스를 사용할지를 결정하는 기능을 떠맡게 되었다. UserDao의 기능이 잘 동작하는지 테스트하려고 만든 것인데 다른 책임을 떠맡고 있으니 문제가 있어보인다. 그러니 이것도 분리하자. 객체의 생성 방법을 결정하고, 그렇게 만들어진 오브젝트를 돌려주는 클래스를 만들어보자. 이런 일을 하는 오브젝트를 흔히 팩토리(Factory)라고 부른다. 오브젝트를 생성하는 쪽과 생성된 오브젝트를 사용하는 쪽을 분리하기 위해 사용한다. public class DaoFactory { public UserDao userDao() { Connectio..
2022.05.26