Spring.NET2009.04.10 16:09

어떤이는 OOP가 발전되어서 AOP가 되었다 라고 하는데 맞을수도 있고 아닐수도 있다. 내 생각엔 오른손이 하는것을 왼손은 거들뿐!! OOP는 오른손, AOP는 왼손. ㅋㅋ 썰렁한가?

암튼.. 험...

Aspect 하기 좋은 기능중 하나가 DI인데 기존 방식이랑 다른점이 무었인지 코드로 직접 실행 해 보자.
어떻게 Coupling을 줄일 수 있는지...

우선 기존에 어떻게 클래스를 호출하는지 왜 Dependency가 강하게 결합이 되는지 기존 방식대로 해 보자.

VS를 열고 새프로젝트를 선택한 다음 이름이 oldClass라는 콘솔 응용 프로그램을 생성 하도록 하자.
아래와 같이 Person.vb 클래스를 하나 만들자


콘솔용이니깐, 모듈에서 시작하므로 Module1.vb 코드를 아래와 같이 입력하자.

코딩끝!

이제 F5를 과감하게 눌러 실행 해 보자. 아래와 같은 화면이 나타날것이다.

이것이 우리하 흔히 알고 사용하는 OOP 방식이다. 하지만, 코드상에서 Moonhyuk = new Person 이라고 부르는 순간 이미 Dependency 가 강하게 결합되어 버린다.

그럼 SPRING.NET으로 결합도를 낮춰 보자. spring.net 이 설치가 안되어 있으면 http://www.springframework.net 에서 받을수 있다.
새 항목 추가를 하여 응용 프로그램 구성 파일(app.config)를 추가 한다. 추가된 app.config의 내용을 아래와 같이 변경하자.



그리고 프로젝트 참조를 추가 해야 한다. SPRING.NET에서 핵심 영역과 DI 부분을 제공해 주는 Spring.Core.dll 을 추가 하자
일반적으로 설치 했다면 경로는 C:\Program Files\Spring.NET 1.2.0\bin\net\2.0\release 이다.

그리고, 종속성을 제거하기 위해 IPerson.vb 인터페이스를 하나 만든다.


Person 클래스가 인터페이스를 구현 하기 때문에 기존 코드를 아래와 같이 수정한다.


마지막으로 Module1.vb 를 수정한다.



실행해 보면 아래와 같은 화면이 잘 나타난다.


훌륭하지 않은가? 종속성을 제거 하면서, Person 클래스를 config 파일에 설정해 두고 주입시킨것이다.
실제로 컴파일 시점에서 컨텍스트가 로드 될때 이미 spring framework 에서는 <object id="person" type="oldClass.Person, oldClass"> 를 인스턴스화 시켜 버린다. 즉, Module1.vb 에서 생성시키는것이 아니라 SPRING.NET 에서 생성 시켜 두었다가 가져다 쓸 뿐이다.

SPRING.NET은 훌륭한 .NET Framework 을 거들뿐... ㅎㅎ
저작자 표시 비영리 동일 조건 변경 허락
신고
Posted by dotnetpower

티스토리 툴바