본문 바로가기

Backend

(126)
[Javascript] - Asynchronous Programming Asynchronous Programming (비동기 프로그래밍) - 기존의 순차적 프로그래밍 처음에 있었던 순차적 프로그래밍은 한 번에 하나만 실행하는 방식은 계산이나 대규모 데이터 처리에 적합했습니다. 현대 프로그래밍 언어의 대부분은 순차적 프로그래밍에 그 뿌리를 두고 있습니다. - 순차적 언어는 입출력을 블록 방식으로 처리합니다 프로그램이 파일을 읽거나 네트워크에서 데이터를 가져오려 하면, 데이터를 다 가져올 때까지 프로그램은 실행을 멈춥니다. 하지만 자바스크립트는 탄생 목적이 사용자와의 상호 작용이었기 때문에 더 나은 모델을 따르고 있어 다른 언어보다 순차적 모델에 영향을 덜 받습니다. - 동시성 순차적 모델은 컴퓨터가 사용자와, 그리고 다른 컴퓨터와 상호 작용하면서 무너지기 시작했고, 동시에 여..
[Javascript] - Purity Purity (순수함) - 함수형 프로그래밍은 함수로 프로그래밍하는 것을 뜻합니다. 하지만 조금은 정의가 모호한게, 특정 도메인의 값을 다른 값과 연관짓는 수학적인 함수로 프로그래밍한다는 뜻일 수도 있고 대부분의 프로그래밍 언어가 의미하는 매개변수를 사용하는 소프트웨어 함수로 프로그래밍한다는 뜻일 수도 있습니다. - 순수 함수는 변경을 초래하지 않습니다. 순수 함수는 변경에 영향을 받지도 않습니다. 순수 함수의 결과 값은 오직 함수의 입력 값에 의해서만 결정됩니다. 결과를 만드는 것 외엔 다른 어떤 행동도 하지 않습니다. 동일한 입력을 주면 항상 동일한 출력을 냅니다. (반면 자바스크립트의 17개에 달하는 할당 연산자는 순수함과 거리가 멀어 보입니다) - 순수함의 몇 가지 중요한 가치 순수함은 아주 훌륭..
[Javascript] - this this - 자바스크립트의 프로토타입 모델 자바스크립트에선 객체가 생성되면 새로운 객체 콘텐츠의 일부 혹은 전체를 가지는 프로토타입이 지정됩니다. const newObject = Object.create(oldObject); 객체는 속성만 저장하며, 메서드는 객체에 저장된 함수에 불과하고 프로토타입은 객체일 뿐입니다. 객체가 가지고 있지 않은 속성의 값을 얻으려고 하면 그 값은 undefined 입니다. 하지만 객체가 위의 newObject 처럼 프로토타입을 갖고 있는 경우 결과 값은 프로토타입의 속성 값이 됩니다. 이렇게 체인 형식으로 프로토타입이 더 이상 없을 때까지 반복됩니다. - 프로토타입을 사용하는 가장 큰 이유 중 하나는 메서드를 저장하는 공간으로 쓰기 위함입니다. 비슷한 객체들이 전부 비슷한..
[Javascript] - Exception Exception (예외) - 호출한 함수는 개발자가 예상하지 못한 방식으로 문제를 일으킬 수 있습니다. 프로그램에서 문제가 발생했을 때 다루는 가장 보편적인 방법은 예외 처리입니다. 예상하지 못한 일이 발생하면, 현재 하고 있는 일을 전부 멈추고 예외 핸들러가 프로그램이 무엇을 해야 할지 알려 줄 것입니다. - 문제가 생기면 throw 문을 통해 신호가 발생됩니다. throw new Error('critical error'); throw 'critical error'; 위 예시처럼 자바스크립트는 throw 에 어떤 값이든 허용합니다. throw 로는 Error 생성자로 만들어진 값을 던지는 것이 일반적이지만 필수는 아닙니다. try { ... } catch (e) { ... } try 문 내에서 예외가..
[Javascript] - Generator Generator (제너레이터) - 자바스크립트는 ES6부터 제너레이터 기능을 도입했습니다. // 제너레이터 기본적인 문법 function* counter() { console.info('counter 1'); yield 1; // 첫번째 next 호출 시 여기까지 실행 console.info('counter 2'); yield 2; // 두번째 next 호출 시 여기까지 실행 console.info('counter 3'); // 세번째 next 호출 시 여기까지 실행 } const c = counter(); console.info(c.next()); // counter 1 // { value: 1, done: false } console.info(c.next()); // counter 2 // { va..
[Javascript] - Function Function (함수) - function 연산자는 함수 객체를 만듭니다. function 연산자는 매개변수 목록과 문장 블록으로 구성된 함수 몸체를 전달받습니다. 매개변수 각각의 이름 뒤에는 = 부호와 표현식이 올 수 있고, 인자로 전달되는 값이 undefined 라면 = 다음의 표현식 값이 초기와에 사용됩니다. function make_set(array, value = true) { // value 에 전달된 값이 undefined 라면 true 로 초기화 ... } 함수 객체는 인자 목록과 함께 호출되는데 인자 목록에는 표현식이 없을 수도 있고 한 개 이상의 표현식이 있을 수도 있으며, 각각은 쉼표로 구분됩니다. 각 표현식은 계산된 뒤 함수의 매개변수에 지정됩니다. 매개변수보다 긴 인자들은 함수에..
[Javascript] - Statement Statement (문장) - 프로그래밍 언어는 표현 언어와 문장 언어로 나눌 수 있습니다. 문장 언어는 문장과 표현식을 갖고 있지만, 표현 언어는 표현식만 갖고 있습니다. - 선언문 자바스크립트에는 모듈이나 함수 내에서 변수를 선언할 수 있는 세 가지 문장 (let, function, const) 이 있습니다. let 문은 현재 스코프에 새로운 변수를 선언합니다. 모든 블록 (중괄호로 둘러쌓인 문장의 집합) 은 그만의 스코프를 생성합니다. 해당 스코프에 선언된 변수는 바깥쪽 스코프에서는 보이지 않습니다. let 문은 초기화 없이 변수를 선언할 수 있으며, 그럴 경우 undefined 로 값이 지정됩니다. let a = { my: 1 }; let { my } = a; // my = 1 let b = [1..
[Javascript] - Bottom value Bottom Value (빈 값) - 빈 값은 재귀적 데이터 구조의 긑을 가리키거나 값이 없음을 뜻하는 특수한 값입니다. 프로그래밍 언어에서 빈 값은 nil, none, nothing, null 과 같은 이름을 가집니다. - 자바스크립트는 두 개의 빈 값, null 과 undefined 를 갖고 있습니다. 자바스크립트 객체에선 오로지 null 과 undefined 만이 빈 값이며 이들 값에서 속성을 읽어오려고 하면 예외가 발생합니다. null 과 undefined 는 같지 않습니다. 둘은 비슷하지만, 어떤 경우에는 서로 다르게 동작합니다. 이는 헷갈릴 여지가 있다는 말이며, 둘 중 하나만 사용한다면 더 좋은 프로그램이 될 것입니다. 그래서 null 을 최소한으로 사용하고, undefined 를 주로 사용..