DI

posted by 방랑군 2012. 1. 10. 00:06

spring.NET

스프링 닷넷은 자바 진영에서 매우 다양한 곳에서 쓰이고 있는 유명한 프레임워크 스프링의 닷넷 버전이다. 아래의 그림을 보면 알 수 있듯이 단순한 컨버젼이 아니라 스프링이 가지고 있는 개념을 닷넷에 가장 어울리도록 최적화한 것이라고 볼 수 있다.

springnet.png

여기서는 이런 다양한 스프링 닷넷 프레임워크 중 DI에 대해서 간략하게 알아보겠다.(이 부분은 코어에 소속된 부분이다. 즉 스프링의 다양한 개념 중에서도 매우 중요하며 기초적인 부분이다.)

DI

먼저 DI라는 개념을 먼저 파악해야 한다. DI는 Dependency Injection의 약자로서 번역하면 의존성 주입 정도가 된다. 간략하게 설명하자면 하나의 클래스에서 다른 클래스의 객체를 사용할 경우에 직접 객체를 생성해서 사용하지 않고 사전에 설정해 둔 바에 따라서 객체를 가져와 사용할 수 있게 한다는 개념이다.

이렇게 할 경우의 가장 큰 장점은 가져오는 객체의 구조나 생성방식이 바뀌더라도 설정파일을 바꾸는 것만으로 그에 무관하게 사용할 수 있다는 점이다.

아래의 간단한 예를 보면 쉽게 이해가 되리라 생각한다.


스프링 닷넷에서 DI의 사용

먼저 사전작업으로 Spring.Net 프레임워크를 다운받아 설치해두는 작업이 필요하다.(이는 스프링닷넷 프레임워크 사이트에서 다운받아 설치만 하면 되므로 생략)

그리고 Spring.Core 어셈블리 파일을 참조추가해둔다. 이로서 사전 작업은 끝

Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Spring.Context;
using Spring.Context.Support;

namespace SpringNET
{
class Program
{
static void Main(string[] args)
{
IApplicationContext ctx = ContextRegistry.GetContext();
Hello hello = (Hello)ctx.GetObject("MyHello");
string name = "lee";
string result = hello.SayHello(name);
Console.WriteLine(result);
Console.Read();
}
}
class Hello
{
public string SayHello(string name)
{
return "Hello!, " + name;
}
}
}


위와 같이 소스코드를 하나 작성한다. 다른 부분은 간단하므로 설명하지 않고 DI가 실제로 일어나는 붉은 색부분만 설명하면 첫번째 줄은 현재 어셈블리의 설정파일로 부터(아래에 작성해 볼 것이다.) 어플리케이션 컨텍스트를 가져온다. 둘째줄은 가져온 컨텍스트에서 MyHello라는 이름의 Object를 가져오도록 하는 것이다.

App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

<configSections>
<sectionGroup name="spring">
<section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core" />
<section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
</sectionGroup>
</configSections>

<spring>
<context>
<resource uri="config://spring/objects" />
</context>

<objects xmlns="http://www.springframework.net">

<object name="MyHello" type="SpringNET.Hello, SpringNET">
</object>
</objects>
</spring>
</configuration>


위의 파일은 해당 어셈블리의 설정파일과 같은 것이다. 여기에 스프링에 관한 설정도 넣을 수 있다.

다른 부분은 무시하고 핵심적인 부분만 설명하면 붉은 색의 코드 한 줄이 의존성 주입이 가능하도록 해주는 부분이다. 객체의 이름은 MyHello, 클래스형은 SpringNET.Hello이며 해당 객체가 들어있는 어셈블리의 이름은 SpringNET라는 이야기이다.

간단히 스프링 닷넷의 DI를 살펴보았다. 좀더 자세한 것은 스프링 닷넷의 다른 기능을 봐가며 살펴보도록 하겠다.


참고자료: spring-net-reference.pdf Spring.NET_guide_ensoa_v.0.2.pdf

'PP > SPRING.NET' 카테고리의 다른 글

일반 구성 설정(ASP.NET)  (0) 2012.01.13
Spring .Net 활용 가이드  (0) 2012.01.12
서론.  (0) 2012.01.10