의존성 주입(Dependency Injection)이란?
의존성 주입(Dependency Injection)은 객체에 또 다른 객체에 대한 의존성을 부여하는 것을 말한다
설명
의존성
그렇다면, 의존성은 무엇일까? 아래 코드를 살펴보자.
Job class
public class Job
{
public string JobName { get; set; }
}
Person class
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public Job Job { get; set; }
}
위 코드를 보면 Job과 Person 클래스가 정의되어 있다.
Job 클래스의 경우는 직업 이름을 프로퍼티로 가지고 있고, Person 클래스의 경우는 이름, 나이, 그리고 직업에 대한 정보를 프로퍼티로 가지고 있음을 볼 수 있다. 이처럼 Person 클래스는 Job 클래스를 참조하고 있을 때, Person은 Job에 대한 의존성이 있다라고 할 수 있다.

의존성 주입
의존성 주입은 외부에서 말 그대로 객체에 의존성을 주입하는 것을 뜻한다. 아래 코드를 살펴보자.
예시A의 경우는 직업 이름을 매개 변수로 받아 Person 클래스의 생성자에서 Job 프로퍼티를 할당한다.
반면에, 예시B의 경우는 외부로부터 Job 객체의 인스턴스를 직접 받아 Job 프로퍼티를 할당한다.
예시A
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public Job Job { get; set; }
public Person(string name, int age, string JobName)
{
Name = name;
Age = age;
Job = new Job(JobName);
}
}
예시B
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public Job Job { get; set; }
public Person(string name, int age, Job job)
{
Name = name;
Age = age;
Job = job;
}
}
장단점
장점
- 코드의 재사용성
- 코드 유연성
- 코드 확장성
- 코드 변경으로 인한 사이드 이펙트 감소
- 유지 보수 및 테스트 용이
단점
- 구조 복잡성 증가 (클래스별 책임 분리)
- 디버깅 용이 X (코드 추적)
의존성 주입 프레임워크
여러 프레임워크에서 의존성 주입에 대한 처리 기능을 제공한다. 필자가 사용해본 프레임워크로는 Prism이 있다. Prism이 제공하는 IUnityContainer는 아래에서 확인할 수 있다.
Inversion Of Control Container, IUnityContainer
개요 Inversion Of Control Container(이하 IoC Container)를 활용하여 개발을 하면 굉장히 편리하다. Container에서 객체의 생성과 의존성 등을 관리하기 때문에 정작 개발을 하는 당사자는 각 객체에 대한 신
jaywapp.tistory.com
'Software Develop > 개발이론' 카테고리의 다른 글
SOLID원칙 - ISP(Interface Segregation Principle) (0) | 2023.01.16 |
---|---|
SOLID원칙 - LSP (Liskov Substitution Principle) (0) | 2023.01.16 |
SOLID원칙 - SRP (Single Responsibility Principle) (0) | 2023.01.16 |
SOLID원칙 - OCP (Open Closed Principle) (0) | 2023.01.16 |