logo MSJO.kr

DI(Dependency Injection) Example

2021-05-13
MsJ

DI(Dependency Injection)도 디자인 패턴의 일종이다. A 클래스의 함수를 B 클래스에서 호출하기 위해서는 클래스 의존성을 가져야 한다. 하나의 클래스를 수정할 때 다른 하나의 클래스도 수정해야 하는 높은 결합도(coupling) 문제가 발생한다1. 이러한 의존성을 제거하기 위해 의존성 제거 후 다시 의존성을 주입해주는 것이다2.

클래스의 생성자, Interface를 사용하여 Interface에만 의존하게 하면 Interface만 있으면 된다. 이런 결과로 다른 개발자가 어떤 클래스를 완성할 때까지 기다릴 필요가 없음으로 개발속도가 빨라질 수 있다.

아래의 예제3는 C# Console Application이며 .NET 버전은 5.0을 사용했다. 의존성 주입은 필요한 객체를 직접 생성하는 것이 아닌 외부로부터 필요한 객체를 받아서 사용하는 것이다.

DI Example
using System;

namespace ExamDI
{
    internal class Program
    {
        private static void Main()
        {
            string loggerType = "database";

            ILogger logger = loggerType switch
            {
                "database" => new DatabaseLogger(),
                _ => new TextLogger(),
            };

            LogManager logManager = new(logger);

            try
            {
                throw new DivideByZeroException();
            }
            catch (Exception ex)
            {
                logManager.Log(ex.Message);
            }
        }
    }

    interface ILogger
    {
        void Log(string message);
    }

    class LogManager
    {
        private readonly ILogger _logger;

        public LogManager(ILogger logger)
        {
            _logger = logger;
        }

        public void Log(string message)
        {
            _logger.Log(message);
        }
    }

    class TextLogger : ILogger
    {
        public void Log(string message)
        {
            Console.WriteLine("Log Text: " + message);
        }
    }

    class DatabaseLogger : ILogger
    {
        public void Log(string message)
        {
            Console.WriteLine("Log Database: " + message);
        }
    }
}
Reference
  1. Jinyoung.log, “Dependency Injection이란 무엇일까?”
  2. KIN, “DI (Dependency Injection) 의존성 주입을 왜 하나요?”
  3. Code First, “C#, Dependency Injection with Code Example”

Prεv(Θld)   Nεxt(Nεw)
Content
Search     RSS Feed     BY-NC-ND