지연된 객체 (Deferred Object) 만들기 – .NET 편

이번엔 닷넷편을 해보도록 하겠다.

일단 자바좀 해본 닷넷 개발자라면 눈치챘겠지만…

닷넷 3.5 이상이라면 실행해볼 수 있는 방법 되시겠다. 특징이 있다면 대리자를 만들어놨는데.

사실 4에서는 Action, Func 라는 내장 대리자가 있는데, 3.5에는 없기 때문에 대리자를 달아줬다.

4 이상이라면 Action 으로 대체해도 무방하다고 보면 되는데, 지연된 객체에 쓰는 대리자라는 명시를 할 때 도움이 되기 위해 대리자를 썼다.

자바하고 방식은 동일하다. 닷넷에서 제공하는 쓰레드를 이용하는 방식이다.

    using System;
    using System.Threading;
 
    public delegate void DefferedEvent();
 
    internal class DeferredObjectSample
    {
        private DefferedEvent evt;
 
        public DeferredObjectSample(int second)
        {
            Console.WriteLine("작업을 시작했다!");
            Console.WriteLine(second + "초 후면 작업이 끝난다!");
 
            new Thread(() =>
            {
                Thread.Sleep(second * 1000);
                Done();
            }).Start();
        }
 
        private void Done()
        {
            if (evt != null) evt.Invoke();
        }
 
        public DeferredObjectSample Done(DefferedEvent evt)
        {
            this.evt = evt;
            return this;
        }
 
        private static void Main(string[] args)
        {
            new DeferredObjectSample(5).Done(() =>
            {
                Console.WriteLine("작업이 끝나부렀어!");
            });
        }
    }

<

p>

닷넷은 이벤트 프로그래밍이 지원되다 보니, 람다식으로 작성했다. 익명함수. 자바에서는 익명 클래스가 있다면, 닷넷은 익명 함수가 있다고 보면 된다.

각기 장단점이 있는데, 그것은 범주에 벗어나므로 패스.

이 방식에 대한 자세한 설명은 자바편을 참조하기 바란다. 자바편과 토시하나 안틀리고 똑같은 방식으로 프로그래밍 했다.

여담으로 4.5 에서 비동기 개발이 지원되는데, 굳이 그거 없어도 지연된 객체 작성하는데 문제 없으므로 패스하도록 하겠다.

composite / 2013년 9월 16일 / 미분류
태그:, , , , ,

답글 남기기

Your email address will not be published / Required fields are marked *