[48장 모듈] 모던 자바스크립트 Deep Dive
·
프론트엔드/JavaScript
모듈의 일반적 의미모듈(module)이란 애플리케이션을 구성하는 개별적 요소로서 재사용 가능한 코드 조각을 말한다.일반적으로 모듈은 기능을 기준으로 파일 단위로 분리한다.이때 모듈이 성립하려면 모듈은 자신만의 파일 스코프(모듈 스코프)를 가질 수 있어야 한다.자신만의 파일 스코프를 갖는 모듈의 자산은 기본적으로 비공개 상태다.다시 말해, 모든 자산이 캡슐화되어 다른 모듈에서 접근할 수 없다.즉, 모듈은 개별적 존재로서 애플리케이션과 분리되어 존재한다.하지만 애플리케이션과 완전히 분리되어 개별적으로 존재하는 모듈은 재사용이 불가능하므로 존재의 의미가 없다.모듈은 애플리케이션이나 다른 모듈에 의해 재사용되어야 의미가 있다.따라서 모듈은 공개가 필요한 자산에 한정하여 명시적으로 선택적 공개가 가능하다. 이를 ..
[47장 에러 처리] 모던 자바스크립트 Deep Dive
·
프론트엔드/JavaScript
에러 처리의 필요성에러가 발생하지 않는 코드를 작성하는 것은 불가능하다.try ... catch 문을 사용해 발생한 에러에 적절하게 대응하면 프로그램이 강제 종료되지 않고 계속해서 코드를 실행시킬 수 있다.console.log('[Start]');try { foo();} catch (error) { console.error('[에러 발생]', error); // [에러 발생] ReferenceError: foo is not defined}// 발생한 에러에 적절한 대응을 하면 프로그램이 강제 종료되지 않는다.console.log('[End]');직접적으로 에러를 발생하지는 않는 예외(exception)적인 상황이 발생할 수도 있다.// DOM에 button 요소가 존재하지 않으면 querySelec..
[46장 제너레이터와 async/await] 모던 자바스크립트 Deep Dive
·
프론트엔드/JavaScript
제너레이터란?ES6에서 도입된 제너레이터(generator)는 코드 블록의 실행을 일시 중지했다가 필요한 시점에 재개할 수 있는 특수한 함수다.제너레이터 관련 자세한 내용 [더보기] 클릭하여 보기더보기1. 제너레이터 함수는 함수 호출자에게 함수 실행의 제어권을 양도할 수 있다.- 일반 함수를 호출하면 제어권이 함수에게 넘어가고 함수 코드를 일괄 실행한다. 즉, 함수 호출자는 함수 실행을 제어할 수 없다.- 제너레이터 함수는 함수 실행을 함수 호출자가 제어할 수 있다. 이는 함수의 제어권을 함수가 독점하는 것이 아니라 함수 호출자에게 양도할 수 있다는 것을 의미한다.2. 제너레이터 함수는 함수 호출자와 함수의 상태를 주고받을 수 있다.- 일반 함수가 실행되고 있는 동안에는 함수 외부에서 함수 내부로 값을 ..
[45장 프로미스] 모던 자바스크립트 Deep Dive
·
프론트엔드/JavaScript
서론자바스크립트는 비동기 처리를 위한 하나의 패턴으로 콜백 함수를 사용한다.하지만 전통적인 콜백 패턴은 다음과 같은 단점이 있다.콜백 헬로 인해 가독성이 나쁘다.비동기 처리 중 발생한 에러의 처리가 곤란하다.여러 개의 비동기 처리를 한 번에 처리하는 데도 한계가 있다.ES6에서는 비동기 처리를 위한 또 다른 패턴으로 프로미스(Promise)를 도입했다.프로미스는 전통적인 콜백 패턴이 가진 단점을 보완하며 비동기 처리 시점을 명확하게 표현할 수 있다.비동기 처리를 위한 콜백 패턴의 단점1. 콜백 헬// GET 요청을 위한 비동기 함수const get = url => { const xhr = new XMLHttpRequest(); xhr.open('GET', url); xhr.send(); xhr.o..
[44장 REST API] 모던 자바스크립트 Deep Dive
·
프론트엔드/JavaScript
서론REST는 HTTP를 기반으로 클라이언트가 서버의 리소스에 접근하는 방식을 규정한 아키텍처고, REST API는 REST를 기반으로 서비스 API를 구현한 것을 의미한다.REST API의 구성REST API는 자원(resource), 행위(verb), 표현(representations)의 3가지 요소로 구성된다.REST는 자체 표현 구조로 구성되어 REST API만으로 HTTP 요청의 내용을 이해할 수 있다.자원 : URI(엔드포인트)행위 : HTTP 요청 메서드표현 : 페이로드REST API 설계 원칙REST에서 가장 중요한 기본적인 원칙은 두 가지다.URI는 리소스를 표현하는데 집중하고 행위에 대한 정의는 HTTP 요청 메서드를 통해 하는 것이 RESTful API를 설계하는 중심 규칙이다.1. ..
[43장 Ajax] 모던 자바스크립트 Deep Dive
·
프론트엔드/JavaScript
Ajax 란?Ajax(Asynchronous JavaScript and XML)란 자바스크립트를 사용하여 브라우저가 서버에게 비동기 방식으로 데이터를 요청하고, 서버가 응답한 데이터를 수신하여 웹페이지를 동적으로 갱신하는 프로그래밍 방식을 말한다.Ajax는 브라우저에서 제공하는 Web API인 XMLHttpRequest 객체를 기반으로 동작한다.XMLHttpRequest는 HTTP 비동기 통신을 위한 메서드와 프로퍼티를 제공한다.이전의 웹페이지는 html 태그로 시작해서 html 태그로 끝나는 완전한 HTML을 서버로부터 전송받아 웹페이지 전체를 처음부터 다시 렌더링하는 방식으로 동작했다.따라서 화면이 전환되면 서버로부터 새로운 HTML을 전송받아 웹페이지 전체를 처음부터 다시 렌더링했다.이러한 전통적인..
[42장 비동기 프로그래밍] 모던 자바스크립트 Deep Dive
·
프론트엔드/JavaScript
동기 처리와 비동기 처리함수를 호출하면 함수 코드가 평가되어 함수 실행 컨텍스트가 생성된다.생성된 함수 실행 컨텍스트는 실행 컨텍스트 스택(콜 스택)에 푸시되고 함수 코드가 실행된다.함수 코드의 실행이 종료하면 함수 실행 컨텍스트는 실행 컨텍스트 스택에서 팝되어 제거된다.const foo = () => {};const bar = () => {};foo();bar(); 실행 컨텍스트 스택에 함수 실행 컨텍스트가 푸시되는 것은 바로 함수 실행의 시작을 의미한다.함수가 호출된 순서대로 순차적으로 실행되는 이유는 함수가 호출된 순서대로 함수 실행 컨텍스트가 실행 컨텍스트 스택에 푸시되기 때문이다.이처럼 함수의 실행 순서는 실행 컨텍스트 스택으로 관리한다.자바스크립트 엔진은 단 하나의 실행 컨텍스트 스택을 갖는다..
[41장 타이머] 모던 자바스크립트 Deep Dive
·
프론트엔드/JavaScript
호출 스케줄링함수를 명시적으로 호출하지 않고 일정 시간이 경과된 이후에 호출되도록 함수 호출을 예약하려면 타이머 함수를 사용한다.이를 호출 스케줄링(scheduling a call)이라 한다.자바스크립트는 타이머를 생성할 수 있는 타이머 함수 setTimeout과 setInterval, 타이머를 제거할 수 있는 타이머 함수 clearTimeout과 clearInterval을 제공한다.타이머 함수는 ECMAScript 사양에 정의된 빌트인 함수가 아니다.브라우저 환경과 Node.js 환경에서 모두 전역 객체의 메서드로서 타이머 함수를 제공한다.즉, 타이머 함수는 호스트 객체다.setTimeout 함수가 생성한 타이머는 단 한 번 동작하고, setInterval 함수가 생성한 타이머는 반복 동작한다.자바스크..
[40장 이벤트-2] 모던 자바스크립트 Deep Dive
·
프론트엔드/JavaScript
(779p ~ 799p까지 정리내용입니다.)이벤트 전파DOM 트리 상에 존재하는 DOM 요소 노드에서 발생한 이벤트는 DOM 트리를 통해 전파된다.이를 이벤트 전파(event propagation)라고 한다. Apple Banana Orange ul 요소의 두 번째 자식 요소인 li 요소(Banana)를 클릭하면 클릭 이벤트가 발생한다.이때 생성된 이벤트 객체는 이벤트를 발생시킨 DOM 요소인 이벤트 타깃을 중심으로 DOM 트리를 통해 전파된다.이벤트 객체가 전파되는 방향에 따라 다음과 같이 3단계로 구분할 수 있다.1. 캡처링 단계 : 이벤트가 상위 요소에서 하위 요소 방향으로 전파2. 타깃 단계 : 이벤트가 이벤트 타깃에 도달3. 버블링 단계 : 이벤트가 하위 요소에서 상위 요소..
[40장 이벤트-1] 모던 자바스크립트 Deep Dive
·
프론트엔드/JavaScript
(754p ~ 778p까지 정리내용입니다.)이벤트 드리븐 프로그래밍브라우저는 처리해야 할 특정 사건이 발생하면 이벤트(ex: 클릭, 키보드 입력, 마우스 이동 등)를 발생시킨다.만약 애플리케이션 특정 타입의 이벤트에 대해 반응하여 어떤 일을 하고 싶다면 해당하는 타입의 이벤트가 발생했을 때 호출될 함수를 브라우저에게 알려 호출을 위임한다.이벤트가 발생했을 때 호출될 함수를 이벤트 핸들러라하고, 이벤트가 발생했을 때 브라우저에게 이벤트 핸들러의 호출을 위임하는 것을 이벤트 핸들러 등록이라 한다.즉 함수를 언제 호출할지 알 수 없으므로 개발자가 명시적으로 함수를 호출하는 것이 아니라 브라우저에게 함수 호출을 위임하는 것이다. Click me! 이처럼 이벤트와 그에 대응하는 함수(이벤트 핸들러)를 통해 사..