싱글톤 패턴의 단점을 보완할 수 있다.

싱글톤 패턴은 사용하기가 쉽고 굉장히 실용적이지만 모듈 간의 결합을 강하게 만들 수 있다는 단점이 있다.

👉🏻  **의존성 주입(DI, Dependency Injection)**을 통해 모듈간의 결합을 조금 더 느슨하게 만들어 해결할 수 있다.

Untitled

이를 통해 메인 모듈(상위 모듈)은 하위 모듈에 대한 의존성이 떨어지게 된다. (= ‘디커플링이 된다’)

import axios from "axios";

const fetchResource = (httpClient) => (url) => 
		httpClient(url)
		.then((data) => data.json)
		.catch((error) => console.log(error));

const httpClient = axios.create({
		baseURL: "<https://minhyeongi.xyz>",
		method: "GET",
		headers: {
				"Access-Control-Allow-Origin": "*"
		}
});

const httpClient2 = axios.create({
		baseURL: "<https://minhyeongi.xyz>",
		method: "POST",
		headers: {
				"Access-Control-Allow-Origin": "*"
		}
});

const getData = fetchResource(httpClient1);
//httpClient라는 서비스를 주입 / fetchResource : 클라이언트
getData("/resourcepath").then((response) => console.log(response.data));

fetchResource는 httpClient가 무엇을 가지고 있는지 알 필요 없이 httpClient를 불러서 사용하기만 한다.

장점

  1. 모듈들을 쉽게 교체할 수 있는 구조가 되어 테스팅하기 쉽고 마이그레이션 하기도 수월.
  2. 애플리케이션 의존성 방향이 좀 더 일관되어 추론하기가 쉬움.
  3. 객체들을 쉽게 교체할 수 있는 코드가 됨.

단점