2023-02-23 TIL

박진(TsTunas)·2023년 2월 23일
0

추상화

우리가 어떤 기능을 가진 물건을 사용할 때에 보통 어떤 과정과 원리를 통해서 그 물건이 원하는 기능을 수행하는지를 따져가며 사용하는 경우는 별로 없다. 물론 호기심이 생겨서 조사하거나 연구하는 사람들도 있겠지만, 원하는 목적만 완수하면 되는 경우에는 시간적인 낭비를 할 필요없이 그냥 사용한다.
컴퓨터를 켜고 싶다면 전원 단추를 누르면 된다. 전원 단추를 누르면 컴퓨터는 켜지도록 약속되어있다.
프로그래밍에 사용되는 여러 라이브러리 등은 제공하는 인터페이스를 이해하기만 하면 원하는 기능을 구현할 수 있도록 돕는다. 그 안에서 어떤 일이 일어나는지는 시간이 많고 탐구심 많은 이들을 위한 것이며 기능을 사용하고자 하는 이들을 위한 건 아니다.

의존성 주입

어떤 클래스가 있다고 해보자. 이 클래스는 안에 다른 클래스의 인스턴스를 가지고 있어야 원하는 기능을 수행할 수 있다. 아마 이렇게 될 것이다.


class Mouse {
  
  click() {
   	console.log("mouse clicked!") 
  }
}

class People {
  mouse: Mouse
  
  constructor() {
  	this.mouse = new Mouse()
  }
  
  click() {
   	this.mouse.click() 
  }
}

사람이 클릭한다는 행위를 하려면 마우스가 필요하다. 그래서 사람이 생겨날 때, 클릭하기 위한 마우스도 생성하였다. 이 경우에 생겨나는 단점은 마우스를 생성할 때에 가져다 쓴 마우스 클래스가 정해진다는 것이다. 마우스의 종류가 있다면 무선마우스 클래스로 생성했다면 무선마우스로만 생성이 된다.
즉, 유연하지 않다.
의존성 주입이란 그저 필요하다고 할 뿐, 클래스가 직접 필요한 클래스의 인스턴스를 생성하지 않는다. 외부에서 주입해준다. 사람은 그저 마우스를 달라고 한다. 그리고 사람에게 마우스를 주는 것은 사람이 속한 모듈이다. 모듈은 마우스를 달라고 하는 사람에게 무선 마우스를 줄지, 유선 마우스를 줄지 결정할 수 있다. 나쁜 모듈은 클릭해도 제대로 동작하지 않는 마우스를 줄 수도 있다.

profile
자바스크립트 전문가가 되고 싶은 아마추어

0개의 댓글