TypeScript&JavaScript(21)
-
Some & Every
'use strict' //some - true //const arr = [1, 2, 0, -1, -2]; //some - false const some = [1,2,0]; const result = some.some(key => key key > 1); console.log(res); //some -> 하나라도 조건에 해당하는게 있으면 true 반환 //every -> 모든 요소가 조건을 통과해야 true 반환 ES6 기준 Some과 Every는 배열 자..
2020.03.05 -
변수와 스코프
자바스크립트에서 변수를 선언하는 방식은 크게 var, let, const로 나뉜다. 현재는 ES6 이후의 문법이 크게 대중화 되어있고, var 보다는 let과 const를 사용하길 권장한다. 그 이유는 변수 스코프의 차이 및 선언, 호이스팅과 관련되어 있다. 작고 간단한 어플리케이션의 코드에서 var는 편리하다. 그러나 조금만 코드가 길어지고 어플리케이션이 복잡해지면, 암묵적 생략이나 함수 레벨 스코프를 이용하는 것은 오히려 독이 된다. let과 const는 기본적으로 블록 레벨 스코프로 다뤄진다. 해당 변수가 선언된 코드블록 내에서만 유효하며 외부에서는 참조할 수 없고, 블록 내에서 지역변수로 다뤄진다. 호이스팅의 경우, 인터프리터 언어인 자바스크립트에서 선언문이 호출보다 뒤에 나오더라도 스코프의 선두..
2020.02.28 -
관찰자 패턴과 EventEmitter
관찰자 패턴은 상태 변화가 일어날 때 관찰자(또는 Listner)에게 알릴 수 있는 객체(Subject)를 정의하는 것. 전통적인 연속 전달 스타일 콜백은 일반적으로 그 결과를 하나의 Listner인 콜백에만 전파하지만 관찰자 패턴은 Subject가 실제로 여러 관찰자(Observer)들에게 알릴 수 있다는 것이 큰 차이다. 순수 자바스크립트는 동기적으로 작동하는데, 이 의미는 한 번에 하나의 프로세스만 실행시킨다는 것이다. 따라서 이벤트 루프를 활용하여 비동기적으로 작용하는 것은 정확히는 Node.js의 libuv라는 라이브러리를 통해 구현된다. 대표적인 비동기작업인 setTimeout이나 I/O 활동, HTTP 요청등이 libuv를 통해 스케쥴링되고 쓰레드 풀이나 커널에 인계한 콜백 작업을 실행하는 ..
2020.02.20 -
Reactor 패턴
운영체제에서도 나오지만, I/O 작업은 느리다. 그리고 사용자의 이벤트에 따라 발생하기 때문에 종료시점을 파악하기도 까다롭다. 전통적인 블로킹 I/O 방식은 동기적으로 동작한다. 블로킹 I/O를 사용하여 구현된 웹 서버는 동일한 스레드에서 여러 연결을 처리할 수 없게 된다. 각 소켓에서 모든 I/O 작업이 다른 연결 처리를 차단할 것이기 때문이다. 이러한 이유로 웹 서버에서 동시성을 처리하기 위한 전통적인 접근 방식은 처리해야 하는 각각의 동시 연결에 대해 새로운 스레드또는 프로세스를 시작하거나 풀에서 가져온 스레드를 재사용하는 것이다. 이렇게 하면 I/O 작업으로 스레드가 차단되어도 분리된 스레드에서 처리되므로 다른 요청의 가용성에는 영향을 미치지 않는다. 그러나 이 경우, '유휴상태'시점에서 유지되어..
2020.02.09 -
Map, Set Collection, WeakMap, WeakSet Collection
ES2015 기준 "use strict" const profiles = new Map(); profiles.set('twitter', '@adalovelace'); profiles.set('facebook', 'adalovelace'); profiles.set('googleplus', 'ada'); profiles.size; // 3 profiles.has('twitter'); // true profiles.get('twitter'); // "@adalovelace" profiles.has('youtube'); // false profiles.delete('facebook'); profiles.has('facebook'); // false profiles.get('facebook'); // undefin..
2020.02.09 -
Node.js의 철학
1. 경량 코어 : 코어는 최소로, 추가 모듈은 생태계에 2. 경량 모듈 : 작은 것이 아름답다, 각 프로그램이 각기 한 가지 역할을 잘 하도록 만든다 => 이해하기 쉽고, 사용하기 쉽다. 테스트 및 유지보수가 훨씬 간단하다. 브라우저와 완벽한 공유가 가능하다. 3. 작은 외부 인터페이스 : 모듈의 정의는 경량화를 목적으로, 가장 일반적인 패턴은 함수나 생성자와 같이 하나의 핵심 기능을 표현하는 동시에, 더 많은 고급 기능이나 보조 기능은 노출된 함수나 생성자의 속성이 되도록 하는 것. 이렇게 모듈의 크기와 범위가 작고 최소한의 기능을 노출하는 특성을 달성하려고 하면 API의 유용성 역시 향상된다. 보다 명확해지고 잘못된 사용에 덜 노출되는 결과를 얻을 수 있다.
2020.02.09