Dependency injection (의존성 주입)

출처

의존성 주입 패턴의 장점

  1. 재사용성
  2. 테스트 용이
  3. 코드 단순화
  4. 종속성 감소
  5. 가독성 증가
  6. 결합도 감소
  7. 유연성 증가
  8. 확장성 증가
  9. 의존관계를 설정하거나 없애거나 줄일 수 있음

의존성이란?
A Class의 내부에서 B Class를 변수로 사용하면 A Class는 B Class에게 의존하게 된다.
즉 B Class가 변경되면 A Class 또한 변경 된다.

주입이란?
내부가 아닌 외부에서 객체를 생성해서 넣어주는 것

A Class의 인자로 B Class의 인스턴스를 넘겨주거나 하는 식으로 의존성을 주입할 수 있다.
그러나 그것만으로 DI(의존성 주입)이라고 부르지는 않는다.

의존성 분리란?
의존관계를 의존관계 역전의 원칙(클릭)에 따라 분리시키는 것

여기저기 찾아 보았지만 굉장히 생소하고 어렵게 들렸지만, 일단 내가 이해하기로는
우리가 A Class의 인자로 B Class를 넘겨줄 때는 B Class에 따라 의존관계가 바뀐다. 즉 제어권이 인자로 넣어주는 쪽에 있지만, 인터페이스등으로 타입을 규정하고 인자를 가려받으면 제어권이 인터페이스를 관리하는 시스템쪽으로 넘어가게 된다.
이렇게하면 A Class와 B Class의 의존관계가 없어지게 된다.

Typescript error

env: typescript

TS2339

일반적인 객체타입이라고 규정했을때,

function test(obj: object): void {
  const key = 'a'
  console.log(object[key]);
}

이런식으로 변수가 객체의 키값이 되는 경우가 있을 수 있다.
객체의 키 값에 변수로 접근하기 위해서는 새로 인터페이스 혹은 타입을 만들고 인덱싱 방법을 지정해주어야한다

type literalIndexing = {
  [key: string] : string
}

타입스크립트 interface 문서 한글판

property does not exists on type '{}'

function test(obj: object): void {
  console.log(obj.key);
}

자바스크립트에서는 가능했었지만 타입스크립트에서는 불가능하다.
우리는 test에 인자로 들어올 object가 key라는 키 값을 가지고 있을거라고 예상하고,
없다하더라도 자바스크립트는 undefined를 출력하겠지만 타입스크립트는 그렇지 않다.

우리가 예상하는 객체 형식이 있다면 새로 타입이나 인터페이스로 지정해주고 그 형식으로 인자를 받아야 한다.

인자로 받을 객체를 새로 타입이나 인터페이스로 규정해주고,
그곳에 확정 키값을 명시해 두어야 한다.

type objectInTestFunction = {
  key: string
}

객체안에 key라는 키값이 존재하고 value는 string일 것이라는 것을 명시해주는 것이다.