반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- red-black tree
- 백준
- function_template
- Biconnected_Component
- Articulation_Point
- Algorithm
- 5397
- 알고리즘
- '0'
- STL
- c++
- list
- sort
- 예제
- qsort
- Heap
- singly Linked List
- 구현
- deletion
- sstream
- template
- 문법
- connected_component
- 자료구조
- class_template
- Pair
- data_structure
- 13305
- 총정리
- Critical_Path_Analysis
Archives
- Today
- Total
- Today
- Total
- 방명록
어제의 나보다 성장한 오늘의 나
[DI] 의존성 주입 (Dependency Injection)이란? 본문
반응형
벡엔드를 공부 하다보면 한 번쯤 의존성 주입에 대해 들어본 적 있을 것이다. 중요하다는 건 알겠는데 대체 무엇일까??
의존성 주입은 의존성(Dependency)과 주입(Injection)이 합쳐진 말이다. 그래서 의존성에 대해서 먼저 이해해야 한다.
코드와 함께 보자
예시 1) 의존성 X
class Person {
driveCar() {
console.log("차를 운전합니다.");
}
}
const driver = new Person();
driver.driveCar(); // 차를 운전합니다.
Person 클래스에서 driveCar 메서드를 실행 시키는 단순한 구조이다. Person 클래스는 현재 다른 클래스와 어떤 의존성도 가지고 있지 않은 독립적인 구조이다.
예시 2) 강한 결합 ( 높은 의존성 )
class Car {
start() {
console.log("차가 출발합니다.");
}
}
class Person {
private car: Car;
constructor() {
this.car = new Car(); // 강한 결합: Person이 Car를 직접 생성
}
driveCar() {
this.car.start();
}
}
const driver = new Person();
driver.driveCar(); // 차가 출발합니다.
Person 클래스가 생성될 때마다 Car 클래스가 생성된다. Person 은 Car 클래스와 강한 결합을 하고 있다. 이는 유연성이 떨어지고, Car 클래스의 변경이 Person 클래스에도 영향을 미칠 수 있다.
이것이 의존성 이다. 그렇다면 어떻게 코드를 더 유연하게 만들 수 있을까??
예시 3) 유연한 결합 ( 의존성 주입 )
class Car {
start() {
console.log("차가 출발합니다.");
}
}
class ElectricCar extends Car {
start() {
console.log("전기차가 조용히 출발합니다.");
}
}
class Person {
private car: Car;
constructor(car: Car) { // 의존성 주입
this.car = car;
}
driveCar() {
this.car.start();
}
}
const myCar = new Car();
const myElectricCar = new ElectricCar();
const driver1 = new Person(myCar);
driver1.driveCar(); // 차가 출발합니다.
const driver2 = new Person(myElectricCar);
driver2.driveCar(); // 전기차가 조용히 출발합니다.
이 예시에서는 Car 클래스를 상속받는 ElectricCar 클래스를 추가하고, Person 클래스는 생성자를 통해 어떠한 Car 타입의 인스턴스도 받을 수 있게 되었다. 이는 Person 클래스가 다양한 종류의 차량에 대해 유연하게 대응할 수 있게 하며, 코드의 재사용성과 확장성을 향상 되었음을 알 수있다.
이처럼 의존성 주입을 통해 클래스 간의 결합도를 낮추고, 유연성과 재사용성을 높일 수 있다. 또한, 코드를 더 쉽게 테스트할 수 있게 되며, 유지 보수성도 개선된다.
반응형
Comments