class Database {
const URL = '...';
constructor() {
if (!Database.instance) {
Database.instance = createConnection(URL);
}
return Database.instance;
}
connect() {
return this.instance;
}
}
▲ 출처 https://devopedia.org/dependency-injection
"상위 모듈은 하위 모듈에서 어떠한 것도 가져오지 않아야 한다."
모듈을 쉽게 교체할 수 있는 구조가 되어 테스트가 쉽고 마이그레이션에도 수월하다.
추상화 레이어를 넣고 구현체를 넣어주기 때문에 애플리케이션의 의존성 방향이 일관되고, 모듈 간 관계가 명확해진다.
참고하기
// before
let coffee1 = new Latte();
let coffee2 = new Espresso();
// after
let coffee1 = CoffeeFactory.brew('Latte');
let coffee2 = CoffeeFactory.brew('Espresso');
// before
class Latte extends Coffee {
constructor() {
this.name = 'Latte';
}
}
// after
class Latte extends Coffee {
constructor() {
this.name = 'Latte';
}
}
class LatteFactory {
static brew() {
return new Latte();
}
}
class CoffeeFactory {
constructor() {
this.factories = { 'Latte': LatteFactory } //...
}
static brew(type) {
const factory = this.factories[type];
return factory.brew();
}
}
읽어보기 https://refactoring.guru/ko/design-patterns/strategy
읽어보기 https://developercc.tistory.com/18
읽어보기 https://coding-factory.tistory.com/710
읽어보기 Proxy vs. VPN
for (let obj of collection)
이라는 동일한 이터레이터 프로토콜을 통해 순회가 가능하다.출처 MDN - Private class features
Model: 애플리케이션의 데이터.
View: 사용자 인터페이스 요소. 모델을 기반으로 사용자가 볼 수 있는 화면.
Contoller: 메인 로직. 이벤트 처리, 보델과 뷰의 생명주기 관리 등의 기능 수행.
애플리케이션의 구성 요소를 세 역할로 분리하여 개발한다. 재사용성과 확장성이 용이하지만, 애플리케이션이 복잡해질수록 Model <-> View 관계가 복잡해진다 = View와 Model 사이의 의존성이 높아진다.
View --- event ---> Controller --- update ---> Model
Model --- notify ---> Controller --- update ---> View
Contoller: 메인 로직. 이벤트 처리, 보델과 뷰의 생명주기 관리 등의 기능 수행.
MVC 패턴으로부터 파생되어 Contoller가 Presenter로 교체.
인터페이스로 통신하여 MVC 패턴의 View와 Model 사이의 의존성을 없내는 것이 목적이다. 그러나 다시 View와 Presenter 사이의 의존성이 커진다는 단점이 있다.
View --- getData() ---> Present --- getData() ---> Model
<-- ui data <----- Present <-- data ------------┛
읽어보기 MVC, MVP, MVVM
읽어보기 MVC, MVP, MVVM
읽어보기 MVC, MVP, MVVM in Angular
작은 '순수 함수'들을 사용하여 로직을 구현하고 '고차 함수'를 통해 재사용성을 높인다.
javascript는 단순하고 유연한 언어적 특성을 가지면서 함수가 일급 객체이기 때문에, 객체지향 프로그래밍보다는 함수현 프로그래밍 방식이 선호된다.
순수 함수
고차 함수
Dog
, Cat
, Bird
=> Animal
Bus
, Subway
, Srt
extends PublicTransport
arguments.length
값으로 분기 처리하여 동작하게 할 수 있다고 한다.출처《면접을 위한 CS 전공지식 노트》, 16-66p