본문 바로가기
자바스크립트 클로저 JavaScript Closures를 이용해 private variable을 구현할 수 있다. const add = (function () { let counter = 0; return function () {counter += 1; return counter} })(); add(); add(); add(); // the counter is now 3 self-invoking function은 한 번만 호출되며, counter 값을 0으로 설정하고 function expression을 반환해 add에 저장한다. add는 함수가 되며, 부모 scope에 있는 counter 값에 접근할 수 있다. 이를 closure라 부른다. counter는 익명함수에 의해 protect되며, add 함수만을 이용해 변경될.. 2021. 7. 14.
Node, Express Request, Response 객체 Express를 이용해 서버를 구축할 대, request object로 시작해 response object로 끝난다. 이 두 객체는 Node에서 비롯됐으며, Express에서 확장되어 사용되고 있다. 먼저 클라이언트가 어떻게 서버에 페이지를 요청하는지 살펴보자. URL은 protocol(http, https, file, or ftp), hostname(ex, google.com), port(:3000), path(/about), querystring(?test=1&first=9), fragment(#q=express)로 구성된다. port: 80은 http, 443은 https로 가정한다. 80이나 443을 사용하지 않으면 1023보다 큰 수를 사용해야 한다. 하나의 서버는 주어진 하나의 포트 넘버와 연.. 2021. 7. 13.
Node, Express 요약 테스팅에는 두 가지가 있다: unit test, integration test unit test: 하나의 구성요소를 테스트 한다. 함수가 제대로 동작하는지. Jest를 사용하여 테스트 할 수 있음. integration test: 다수의 구성요소들이 잘 동작하는지, 전체 시스템은 잘 동작하는지 테스트한다. 함수들이 혹은 모듈이 잘 동작하는지 테스트 한다. Puppeteer와 Jest를 이용할 수 있음. linting: 잠재적인 에러를 발견할 수 있음. eslint를 사용하면됨. jshint도 있음. 단위 테스트 Jest는 React를 테스트 하기 위한 프레임워크였지만 일반적인 테스팅에도 잘 동작한다. 이외에도 Mocha, Jasmine, Ava, Tape 등을 사용할 수 있다. 테스트 가능한 코드는 어떻.. 2021. 7. 12.
자바스크립트 string 자바스크립트는 UTF-16 인코딩을 사용한다. 따라서 문자열은 16 bit 값의 시퀀스로 본다. 대부분의 문자는 하나의 유니코드로 나타낼 수 있지만, 두 개의 16 bit 값으로 나타내야 하는 경우도 있다. let euro = "€"; let love = "❤"; euro.length // => 1: 하나의 16-bit 요소 love.length // => 2: ❤의 UTF-16 인코딩은 "\ud83d\udc99" 대부분의 문자열 메소드는 문자에 대해서가 아니라 16 bit 값으로 동작한다. ES6 이후에는, 문자는 iterable하고, for loop에서는 16 bit 값이 아닌 문자에 따라 연산을 할 수 있다. 문자열 여러 줄에 걸쳐서 나타내기 "two\nlines" /* ES5 */ // 끝에 ba.. 2021. 7. 5.
자바스크립트 BigInt BigInt는 ES2020에서 정의되었다. 64비트 정수 표현을 위해 추가되었다. 숫자 뒤에 소문자 n을 써서 BigInt를 정의한다. 123n 0b1111111n 0o567n 0x8000000000000000n // 2n**64n BigInt()를 함수로 사용해 숫자나 문자열을 BigInt 값으로 변환할 수 있다. BigInt(Number.MAX_SAFE_INTEGER) let string = "1" + "0".repeat(10); BigInt(string) 사칙 연산에서는 BigInt와 number type을 같이 쓸 수 없다. 하지만 비교 연산에서는 같이 쓸 수 있다. 1000n + 2000n // 3000n 1 1n // true 0 == 0n // true 0 ==.. 2021. 7. 5.
자바스크립트 Math 객체 Math 객체(object)를 이용해 아래와 같은 연산을 할 수 있다. Math.pow(2,10) // 1024, 2의 10승 Math.round(.6) // 1.0, 가까운 수로 반올림 Math.ceil(.6) // 1.0, 가까운 수로 올림 Math.floor(.6) // 0.0, 가까운 수로 내림 Math.abs(-1) // 1, 절댓값 Math.max(x,y,z) // 최댓값 반환 Math.min(x,y,z) // 최솟값 반환 Math.random() // 0이상 1.0미만의 랜덤 숫자 Math.PI // 파이 Math.E // 자연로그의 밑수 Math.sqrt(4) // 4**0.5, 루트 4 Math.pow(4, 1/3) // 4**(1/3), 4의 3제곱근 Math.sin(10) // 삼각함.. 2021. 7. 5.
자바스크립트 Numbers 자바스크립트의 숫자는 64비트 부동소수점 형식(floating-point)을 따른다. 하지만 배열 인덱스나 비트 연산에서는 32비트 정수를 이용한다. 정수(integer literals) 255 /* 16진수 */ 0xff 0xFF 0Xff /*** ES6 ***/ 0b11111111 // 2진수 0o377 // 8진수 실수(floating-point literals) 3.14 .333 6.02e23 // 6.02 x 10^23 3.14E-1 // 3.14 x 10^(-1) 자바스크립트는 arithmetic overflow, underflow, division by zero에 대해 에러를 발생시키지 않는다. arithmetic overflow가 발생하면 값은 Infinity가 된다. 반대로 음수쪽으로 o.. 2021. 7. 5.