โ ์์กด์ฑ ์ฃผ์ (Dependency Injection, DI)
์์กด์ฑ ์ฃผ์ ์ ์ํํธ์จ์ด ์ค๊ณ ์์น ์ค ํ๋๋ก, ๊ฐ์ฒด๊ฐ ํ์๋ก ํ๋ ์์กด์ฑ์ ๊ฐ์ฒด ๋ด๋ถ์์ ์ง์ ์์ฑํ๊ฑฐ๋ ๊ด๋ฆฌํ๋ ๋์ ์ธ๋ถ์์ ์ฃผ์ ๋ฐ๋ ๋ฐฉ์์ผ๋ก ์ค๊ณํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
์์กด์ฑ ์ฃผ์ ์ ํตํด ๊ฐ์ฒด ๊ฐ์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ณ , ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ, ํ ์คํธ ๊ฐ๋ฅ์ฑ, ์ ์ง๋ณด์์ฑ์ ํฅ์์ํฌ ์ ์๋ค.
โ ๊ตฌํ ๋ฐฉ๋ฒ
C#์์๋ ์์กด์ฑ ์ฃผ์ ์ ๋ค์ํ ๋ฐฉ์์ผ๋ก ๊ตฌํํ ์ ์๋ค.
์์ : car ๊ฐ์ฒด๊ฐ engine ๊ฐ์ฒด๋ฅผ ์์กด์ฑ์ผ๋ก ๊ฐ์ง๊ณ ์์ ๋ (ํ์๋ก ํ ๋), ์ธ๋ถ์์ ์ฃผ์ ๋ฐ๋ 3๊ฐ์ง ๊ฒฝ์ฐ
- ์์ฑ์ ์ฃผ์ (Constructor Injection)
๊ฐ์ฒด๊ฐ ์์ฑ๋ ๋, ์์ฑ์๋ฅผ ํตํด ํ์ํ ์์กด์ฑ์ ์ ๋ฌ๋ฐ๋๋ค.
public class Car
{
private readonly IEngine _engine;
// ์์ฑ์๋ฅผ ํตํด ์์กด์ฑ ์ฃผ์
public Car(IEngine engine)
{
_engine = engine;
}
public void Start()
{
_engine.Start();
}
}
class Program
{
static void Main(string[] args)
{
// ์์กด์ฑ ๊ฐ์ฒด๋ฅผ ์ง์ ์์ฑ
IEngine engine = new Engine();
// ์์กด์ฑ์ ์ฃผ์
ํ์ฌ Car ๊ฐ์ฒด ์์ฑ
Car car = new Car(engine);
car.Start(); // ์ถ๋ ฅ: "Engine started."
}
}
- ์์ฑ ์ฃผ์ (Property Injection)
์์ฑ ์ฃผ์ ์ ๊ฐ์ฒด์ ์์ฑ์ ํตํด ์์กด์ฑ์ ์ฃผ์ ํ๋ ๋ฐฉ์์ผ๋ก, ์ ํ์ ์ธ ์์กด์ฑ์ ์ฃผ์ ํ ๋ ์ ์ฉํ๋ค.
public class Car
{
public IEngine Engine { get; set; } // ์์ฑ์ ํตํ ์์กด์ฑ ์ฃผ์
public void Start()
{
Engine?.Start();
}
}
class Program
{
static void Main(string[] args)
{
Car car = new Car();
car.Engine = new Engine(); // ์์ฑ ์ฃผ์
car.Start(); // ์ถ๋ ฅ: "Engine started."
}
}
- ๋ฉ์๋ ์ฃผ์ (Method Injection)
๋ฉ์๋ ์ฃผ์ ์ ๋ฉ์๋ ํธ์ถ ์ ํ์ํ ์์กด์ฑ์ ์ธ์๋ก ์ ๋ฌํ๋ ๋ฐฉ์์ผ๋ก, ํน์ ์์ ์๋ง ํ์ํ ์์กด์ฑ์ ์ฃผ์ ํ ๋ ์ ์ฉํ๋ค.
public class Car
{
public void Start(IEngine engine) // ๋ฉ์๋ ์ธ์๋ก ์์กด์ฑ ์ฃผ์
{
engine.Start();
}
}
class Program
{
static void Main(string[] args)
{
Car car = new Car();
IEngine engine = new Engine();
car.Start(engine); // ์ถ๋ ฅ: "Engine started."
}
}'๐ C#' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ์ด๋ฒคํธ(Event), ๋ธ๋ฆฌ๊ฒ์ดํธ(Delegate) (0) | 2024.08.29 |
|---|---|
| ๊ฐ์ฒด ์งํฅ ์ค๊ณ 5๊ฐ์ง ์์น (SOLID) (0) | 2024.08.23 |
| ๋คํ์ฑ(Polymorphism), ๋ฐํ์ ๋คํ์ฑ, ์ปดํ์ผ ํ์ ๋คํ์ฑ (0) | 2024.08.20 |
| ์ถ์ ํด๋์ค(Abstract Class), ์ธํฐํ์ด์ค(Interface) (0) | 2024.08.20 |
| ํํ(Tuple), ๋ ์ฝ๋(Record) (0) | 2024.08.19 |