본문 바로가기

전체 글9

의존관계 검색 (DL Dependency Lookup) 스프링이 제공하는 또 다른 IoC 방법 런타임 시에 의존관계를 결정한다는 점에서 의존관계 주입과 비슷하지만, 의존관계를 맺는 방법이 외부로부터의 주입이 아니라 스스로 검색을 이용하기 때문에, 의존관계 검색 (Dependency Lookup) 이라고 불리는 것도 있다. 의존관계 검색은 자신이 필요로 하는 의존 오브젝트를 능동적으로 찾는다. 물론 자신이 어떤 클래스 오브젝트를 이용할지 결정하지는 않는다. 의존관계 검색은 런타임 시 의존관계를 맺을 오브젝트를 결정 오브젝트의 생성 작업은 외부 컨테이너에게 IoC로 맡기지만, 이를 가져올 때는 메소드나 생성자를 통한 주입 대신 스스로 컨테이너에게 요청하는 방법을 사용한다. public class SampleService { private TodoService T.. 2022. 2. 18.
의존관계 주입(DI Dependency Injection) IoC는 소프트웨어에서 자주 발견할 수 있는 일반적인 개념 매우 느슨하게 정의돼서 폭넓게 사용되는 용어 때문에 스프링을 IoC 컨테이너라고만 해서는 스프링이 제공하는 기능의 특징을 명확하게 설명하지 못한다. 스프링이 서블릿 컨테이너처럼 서버에서 동작하는 서비스 컨테이너라는 뜻인지 단순히 IoC 개념이 적용된 템플릿 메소드 패턴을 이용해 만들어진 프레임워크인지 또 다른 IoC 특징을 지닌 기술이라는 것인지 그래서 새로운 용어를 만드는데 탁월한 재능이 있는 몇몇 사람의 제안으로 스프링이 제공하는 IoC 방식의 핵심을 짚어주는 의존관계 주입 (Dependency Injection) 이라는, 좀 더 의도가 명확히 드러나는 이름을 사용하기 시작했다. * 의존관계 주입, 의존성 주입, 의존 오브젝트 주입? Depe.. 2022. 2. 17.
제어의 역전(IOC, Inversion of Control) IOC라는 약자로 많이 사용되는 제어의 역전 (Inversion of Contol) 이라는 용어가 있다. 스프링을 통해 많이 알려진 용어이지만, 이 제어의 역전은 상당히 오래전부터 있었던 개념이다. 제어의 역전이란 간단히 프로그램의 제어 흐름 구조가 뒤바뀌는 것이라고 설명할 수 있다. 일반적으로 프로그램의 흐름을 간단히 요약하면 다음과 같다. main() 메소드와 같이 프로그램이 시작되는 지점에서 시작 사용할 오브젝트를 결정하고 결정한 오브젝트를 생성한다. 만들어진 오브젝트의 메소드를 호출하고 메소드 안에서 다음에 사용할 것을 결정하고 호출하는 식의 작업이 반복된다. 즉 모든 오브젝트가 능동적으로 자신이 사용할 클래스를 결정하고, 언제 어떻게 그 오브젝트를 만들지를 스스로 관장한다. public clas.. 2022. 2. 17.
개방 폐쇄 원칙 (OCP, Open-colosed Principle) 개방 폐쇄 원칙은 깔끔한 설계를 위해 적용 가능한 객체지향 설계 원칙 중의 하나 - 클래스나 모듈은 확장에는 열려 있어야 하고, 변경에는 닫혀 있어야 한다. 높은 응집도와 낮은 결합도 (high coherence and low coupling) [높은 응집도] - 응집도가 높다는 건 하나의 모듈, 클래스가 하나의 관심사에만 집중되어 있다는 뜻 - 불필요하거나 직접 관련이 없는 외부의 관심과 책임이 얽혀 있지 않다. - 하나의 공통 관심사는 한 클래스에 모여 있다. - 높은 응집도는 클래스 레벨 뿐만 아니라 ( 패키지, 컴포넌트, 모듈 ) 에 이르기까지 그 대상의 크기가 달라도 동일한 원리로 적용될 수 있다. 변화가 일어날 때 해당 모듈에서 변하는 부분이 크다는 것 [낮은 결합도] - 낮은 결합도는 높은 .. 2022. 2. 16.