분류 전체보기 1341

화살표 함수

function 문법을 완벽하게 대체하는 것이 아니다. function add1(x, y) { return x + y; } const add2 = (x,y) => { return x + y; } const add3 = (x,y) => x + y; //중괄호 뒤 바로 리턴시 생략 가능 const add4 = (x,y) => (x + y);//리턴값을 한번 묶어준다. function not1(x) { return !x; } const not2 = x => !x; //매개변수 하나면 생략 가능 const obj = (x, y) => { return {x, y}; //객체 반환 리터럴 } const obj = (x, y) => ({x,y});// 객체를 바로 반환하게 된다면 JS가 어떤걸 반환하는지 구별을 못하..

템플릿 문자열, 객체 리터럴

템플릿 문자열 var won = 1000; var result = "이 과자는" + won + "원 입니다."; // 이 과자는1000원 입니다. //문자열 리터럴, 백틱으로 문자를 감싸면 된다 const result = `이 과자는 ${won}원 입니다.`; //템플릿 문자열, 백틱 문자열 function a() {} a(); a``; //태그드 템플릿 메소드, 함수를 호출 할 수 있다 //최신 문법에 포함 ES2015부터는 '(빽틱) 사용이 가능하다. ' 문자열 안에는 ${변수} 처럼 사용 가능하다 메서드명''으로 함수를 호출할 수 도 있다. 객체 리터럴 var sayNode = function(){ console.log('Node'); } var es = 'ES'; var oldObject = { ..

var, const, let

var ES2015 이전에는 var 로 변수를 선언 ES2015부터는 const와 let이 대체 가장 큰 차이점 :블록 스코프(var 함수 스코프) if (true) { var x = 3; } //var 같은 경우 블록스코프를 무시해서 접근 가능하다 //function 으로 감싸져 있는 function 스코프 밖에서는 사용할 수 없다 console.log(x); if (true) { const y = 3; } // Uncaught ReferenceError: y is not defined console.log(y); //블록 스코프 밖에서 const 접근시 오류가 난다 기존: 함수 스코프(function() {}이 스코프의 기준점) 다른 언어와는 달리 if나 for,while은 영향을 미치지 못함 con..

이벤트 루프

자바 스크립트의 분석 호출 스택 -> 백그라운드 -> 태스크 큐 형식으로 돌아가면서 동작한다. 동작 순서 파일을 시작하면 반드시 anonymous가 실행이 된다. 함수를 선언한다(run) console.log(시작)을 실행한다(콘솔 창에 '시작' 출력) setTimeout 호출 비동기적 호출인 setTimeout은 백그라운드로 보내진다. 백그라운드에 어떤 함수가 먼저 실행될지 알 수가 없다. 타이머 (run, 3초)를 전달해 준다. console.log(끝)을 호출하고 anonymous 또한 호출 스택에서 제거해준다(모든 호출 스택이 비어져 있다) -> 콘솔 창에 '끝' 출력 후, anonymous를 제거 백그라운드에 타이머가 남아있고, 해당 타이머가 끝나게 되면 run함수를 태스크 큐로 전달한다. 호출..

호출 스택 알아보기

위 순서 예측 ( 세 번째 -> 두 번째 -> 첫 번째 ) 호출 스택( 함수의 호출, 자료구조의 Stack) Anonymous는 가상의 전역 컨텍스트( 항상 있다고 생각하는 게 좋다) -> Chrome에서 나오는 용어 Anonymous는 파일이 실행되면 생기고, 종료되면 사라진다. 전역 컨텍스트, 전역 스코프라고 생각하면 된다. 함수 호출 순서대로 쌓이고, 역순으로 실행됨 함수 실행이 완료되면 스택에서 빠짐 LIFO 구조라서 스택이라고 불림 비동기 함수는 호출 스택으로 표현할 수 없다 호출 스택만으로는 설명이 안되는 상황이 있다(비동기 코드) 호출 스택 + 이벤트 루프로 설명할 수 있음

노드, VSCode 설치하기

https://nodejs.org Node.js Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. nodejs.org LTS : 안정적인 version( 거의 3년간은 안정적으로 사용이 가능하다) Current : 최신 Version(안정적이진 않다) node에서 CPU를 많이 사용하는 작업 같은 경우 C++로 해석해서 호출하거나, 그냥 JavaScript로 느리게 빌드 할 수 있지만, 전자의 방법이 더 좋은 방식이며, 위 check를 체크하면, C++, Python 을 깔아준다(Mac은 생략해도 된다) VisualStudioCode 같은 경우 무료라 많은 사람들이 사용한다 WebStorm 같은 경우 유료라 회사에서 지원해 ..

노드의 역할

서버로서의 노드 서버: 네트워크를 통해 클라이언트에 정보나 서비스를 제공하는 컴퓨터 또는 프로그램 클라이언트: 서버에 요청을 보내는 주체(브라우저, 데스크탑 프로그램, 모바일 앱, 다른 서버에 요청을 보내는 서버) EX) 브라우저(클라이언트, 요청)가 길벗 웹사이트(서버, 응답)에 접속, 핸드폰(클라이언트)을 통해 앱스토어(서버)에서 앱 다운로드 노드 != 서버 하지만, 노드는 서버를 구성할 수 있게 하는 모듈(4장에서 설명)을 제공 노드 서버의 장단점 비정상 흐름을 사용자(이미지, 암호화)가 존재할 경우 노드가 처리하기 힘들다 노드는 기본이 싱글 스레드이기 때문에 비정상 흐름을 사용자를 처리하기 위해 멀티 스레드를 지원하는 것이다. 자바스크립트를 사용하는 점이 가장 큰 장점이다 -> JavaScript..

노드의 특성

이벤트 기반 이벤트가 발생할 때, 미리 지정해둔 작업을 수행하는 방식 이벤트의 예 : 클릭, 네트워크 요청, 타이머 등 이벤트 리스너 : 이벤트를 등록하는 함수 콜백 함수: 이벤트가 발생했을 때 실행될 함수 대부분을 프로그램은 이벤트 기반이다(어떤 동작을 클라이언트가 할때, 다른 동작이 일어나야 한다) 프로그램 같은 경우 이벤트 리스너에 콜백함수를 등록하기 떄문에 어떤 이벤트를 동작했을때는 같은 기능을 동작한다. 논 블로킹 I/O 오래 걸리는 함수를 백그라운드로 보내서 다음 코드가 먼저 실행되게 하고, 나중에 오래 걸리는 함수를 실행 동기 : 코드가 순서대로 실행, 비동기 : 코드가 순서대로 실행되지 않는다. 노드에서는 동기-블로킹, 비동기-논블록킹 형식으로 많이 사용된다 논 블로킹 방식 하에서 일부 코..

노드의 정의

공식 홈페이지 : Node.js는 chrome V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임이다(런타임=실행기) 노드가 나오기 전에는 HTML에 종속적으로 자바스크립트를 실행하였지만, 노드가 나온 뒤에는 자바스크립트를 V8엔진을 가지고 실행해준다(브라우져에 종속적인 문제가 해결이 되었다) 서버의 역할도 수행할 수 있는 자바스크립트 런타임 노드로 자바스크립트로 작성된 서버를 실행할 수 있음. 서버 실행을 위해 필요한 http/https/http2 모듈을 제공 런타임 노드: 자바스크립트 런타임 런타임: 특정 언어로 만든 프로그램들을 실행할 수 있게 해주는 가상 머신(크롬의 V8 엔진 사용)의 상태 노드: 자바스크립트로 만든 프로그램들을 실행할 수 있게 해 줌 다른 런타임으로는 웹 브라우저(크롬, 엣..

Reactive Streams - Operators

Stream과 같이 데이터를 Operator(연산)을 통해 가공하여 Subscriber에 전달할 수 있다. 초기 /** * Reactive Streams - Operators * Publisher -> [Data1] -> Operator -> [Data2] -> Subscriber * Operator 연산을 통하면서 데이터가 가공되서 Subscriber에 제공이 된다. */ @Slf4j public class PubSub { public static void main(String[] args) { Publisher pub = iterPub(Stream.iterate(1, a -> a + 1).limit(10).collect(Collectors.toList())); pub.subscribe(logSub()..