← 모든 글
개발

section 5 note taking

아직 한국어 번역이 없습니다. 영문 원문을 표시합니다.

아 어려워 ㅠ

Event Emitter

  • extends 확장 상속 inheritance
  • class의 instance 생성
  • .on() 리스너, 수신기, 특정 event의 이름, 그리고 callback function
  • .emit() method, event 발생시키는 역할

.emit(event_name) -> on(event_name)

  • node:events(software) -> hardware architecture
    1. Event Emitter 코드는 C++로 작성된 것이 아니다.
    1. V8 Enginex X Libuv X Event Loop X
  • event emitter는 하나의 pattern이다.
  • publish 발생 -> subscribe 정의

hardware

  • CPU Central Processing Unit 연산 + 제어
  • RAM Random Access Memory 임시 작업대
  • Storage 영구적인 Data 보관소 HDD/SSD
  • NIC Network Interface Card 외부의 인터넷 세상과 소통 창구

OS 시스템 전체 통제

  • CPU 실제 연산 수행
  • 코어 독립적인 작업 단위 1코어 = 오직 1 작업
  • 동기식 접근법 Polling 차례대로 돌아가며 계속 묻기
  • 비동기식 접근법 Interrupt 전기적 찌름 신호
    • 정상작업 흐름 가로채고
    • 아주 잠시 멈춤
  • 비동기적 반응원리가 곧 event driven architecture
  • 기다리지 않고, 이벤트가 발생할 때만 움직인다.

.emit("event_name") 자체는 synchronous

  • System(Libuv, Event loop) 보이지 않는 곳에서 복잡한 비동기 작업 수행
  • system(async) -> 완료 신호 -> Event Emitter

Event emitter = {} + []

  • 순수 js object 와 array의 조합
    1. c++ 코드가 아니고, 단순 js 원시 타입의 조합

master Object = {}

  • 모든 이벤트가 모이는 거대한 본부
  • masterObject["event_name"] = []
  • 콜백 함수들이 대기할 array 할당
  • .push(함수) 콜백 함수 적재 시작
  • .emit("event_name") -> masterObject["event_name"]
  • event_name을 통해 배열 즉시 검색
  • [fn1, fn2, fn3] -> forEach(fn()) 저장된 순서대로 예외없이 모두 실행

emit(..., Data A, Data B)

  • fn1(Data A, Data B) 직접 주입 가능
  • masterObject["error"] = [errror_manage_fn] 시스템 붕괴를 막는 안전망
  • 단 한번만 실행되는 특변한 method once() 1회성 소멸
  • {} event 이름 맵핑, dictionary, hashmap 위치를 단번에 파악, 데이터양과 무관하게 검색속도 일정
  • [] 리스너 함수들의 목록

Observer Pattern

  • on(Event_name, fn) 구독의 시작
  • chaining method .on().on().on()
  • Closure란 함수가 생성이 될 때 주변환경을 기억하는 것
  • .once( ) 는 wrapper fn 을 통해 ...args를 전달하고 .off()를 통해 자신을 제거한다.
  • .off()는 뒤에서 앞으로 순회 reverse for loop, using splice
  • 인덱스변화에 구애받지 않고 완벽하게 배열 삭제