Programming Language

    JavaScript - 이벤트 루프(Event Roop) [런타임 모델]

    JavaScript - 이벤트 루프(Event Roop) [런타임 모델]

    JavaScript의 런타임 모델은 코드의 실행, 이벤트의 수집과 처리, 큐에 대기중인 하위 작업을 처리하는 이벤트 루프에 기반하고 있습니다. 스택 함수의 호출들은 '프레임' 스택을 형성합니다. 인수와 지역 변수는 스택 바깥에 저장되므로 바깥 함수가 반환한 후에도 계속 존재할 수 있습니다. 클로저 환경이 중첩 함수에서 지역 변수에 접근할 수 있는 이유가 이것 입니다. 힙 객체는 힙에 할당됩니다. 힙은 단순히 메모리의 큰(그리고 대부분 구조화되지 않은) 영역을 지칭하는 용어입니다. 큐 JavaScript 런타임은 메시지 큐, 즉 처리할 메시지의 대기열을 사용합니다. 각각의 메시지에는 메시지를 처리하기 위한 함수가 연결돼있습니다. 런타임은 대기열에서 가장 오래된 메시지부터 큐에서 꺼내 처리하기 시작합니다. ..

    JavaScript - Promise (프로미스)

    JavaScript - Promise (프로미스)

    비동기적으로 해야할 작업이 많아지면 코드는 자연스레 깊어지고 이는 콜백 지옥을 불러오며 이를 해결하기 위해서 프로미스를 사용한다고 언급한 바가 있습니다. 이번 포스팅은 프로미스에 대해 알아보도록 하겠습니다. Promise는 비동기 작업의 최종 완료 또는 실패를 나타내는 객체입니다.기본적으로 promise는 함수에 콜백을 전달하는 대신에, 콜백을 첨부하는 방식의 객체입니다. Promise는 다음 중 하나의 상태를 가집니다. 대기(Pending) : 이행하지도, 거부하지도 않은 초기 상태 이행(fulfilled) : 연산이 성공적으로 완료됨. 거부(rejected) : 연산이 실패함 대기 중인 프로미스는 값과 함께 이행할 수도, 어떤 이유로 인해 거부될 수도 있습니다. 이행이나 거부 될 때, 프로미스의 th..

    JavaScript - 가비지 컬렉션(Garbage Collection)

    JavaScript - 가비지 컬렉션(Garbage Collection)

    JavaScript는 눈에 보이지 않는 곳에서 메모리 관리를 수행합니다. 원시 값, 객체, 함수 등 우리가 만드는 모든 것은 메모리를 차지합니다. 글로벌 컨텍스트에서 각각의 함수 컨텍스트가 끝나면, 더 이상 필요 없어진 메모리를 처리하는 것이 가비지 컬렉션입니다. JavaScript에서는 도달가능성(reachability)이라는 개념을 사용해 메모리 관리를 수행합니다. 즉, 가비지 콜렉션 알고리즘의 핵심 개념은 참조 입니다. A라는 메모리를 통해 B라는 메모리에 접근할 수 있다면 B는 A에 참조되며 참조-세기(Reference-counting) 가비지 콜렉션 참조-세기 알고리즘은 "더 이상 필요없는 객체"를 "어떤 다른 객체도 참조하지 않는 객체"라고 정의합니다. 이 객체를 "가비지"라 부르며, 이를 참..

    JavaScript - 클로저(Closure)

    JavaScript의 변수를 정리하면서 클로저에 대한 필요성을 볼 수 있었습니다. [참조 : https://roothyo.tistory.com/83?category=1108573] * JavaScript - 변수(variable) Mdn에서 정의한 클로저는 다음과 같습니다. 클로저는 함수와 함수가 선언된 어휘적 환경의 조합이다. 클로저를 이해하려면 자바스크립트가 어떻게 변수의 유효범위를 지정하는지(Lexical scoping)를 먼저 이해해야 한다. JavaScript에서 함수는 일급 객체로 다른 함수의 인자로 전달이 가능합니다. 또 함수가 다른 함수를 리턴하는 경우가 가능합니다. (* funargs : functional arguments) 첫째는 upward funargs problem입니다. 이 문..

    JavaScript - 변수(Variable)

    애플리케이션에서 값에 상징적인 이름으로 변수를 사용합니다. 변수명은 식별자라고 불리며 특정 규칙을 따릅니다. JavaScript 식별자는 문자, 밑줄(_) 달러기호($)로 시작해야하는 반면 이후는 숫자일 수도 있습니다. JavaScript가 대소문자를 구분하기에, 문자는 "A-Z"(대문자)와 "a-z"(소문자)까지 모두 포함합니다. 변수 선언은 아래 3가지 방법으로 가능합니다. var 키워드로 변수를 선언할수 있습니다. 실행 맥락에 따라 지역 및 전역변수로 선언하는데 모두 사용될 수 있습니다. const 혹은 let 키워드로 변수를 선언할 수 있습니다. 블록 스코프 지역 변수를 선언하는데 사용될 수 있습니다. var x = 42 //var let y = 13 //let const limit = 10 //..

    JavaScript - 콜백 함수(Callback)

    콜백 함수는 다른 함수에 인수로 전달된 함수이며 외부 함수 내부에서 호출되어 일종의 루틴이나 작업을 완료합니다. (모든 예시는 node.js 환경에서 nodemon으로 실행하였습니다.) //With Function name function introduce(name) { console.log("My name is "+name) } function greeting(callback) { console.log("Hello World!"); callback; } greeting(introduce("Roothyo")) //Hello World! //My name is Roothyo // Without Function name let numbers = [1,2,3,4,5] numbers.forEach(functio..

    JavaScript - 객체(Object)

    Object 클래스는 JavaScript의 데이터 유형중 하나입니다. 다양한 키 모음 및 더 복잡한 엔티티들을 저장하는데 사용됩니다. JavaScript의 거의 모든 객체는 Object의 인스턴스입니다.일반적인 객체는 Object.prototype에서 속성을 상속하지만, 이러한 속성들은 가려지거나 재정의 될 수 있습니다. Object 생성자는 주어진 값에 대한 객체 Rapper를 생성합니다. 값이 null 또는 undefined이면 빈 객체를 생성하여 반환합니다. 그렇지 않으면 주어진 값에 해당하는 타입의 객체를 반환합니다. 값이 이미 객체인 경우 그 값을 반환합니다. 생성자가 아닌 맥락에서 호출될 때 Object는 new Object()와 동일하게 작동합니다. 객체 리터럴 표기법 vs JSON(Java..

    JavaScript - 함수

    JavaScript의 함수는 다른 모든 객체 처럼 속성과 메소드를 가질 수 있으므로, 일급(First-class) 객체입니다. 다른 객체와 함수를 구별 하는 것은 함수는 호출할 수 있다는 점입니다. 즉, Function 객체 입니다. Function 객체 new Function([arg1[, arg2[, ...argN]],] functionBody) arg1, arg2, ... argN 쉼표로 구분한 유효한 식별자 목록이어야 한다. functionBody 함수 정의를 구성하는 JavaScript 문을 담은 문자열. new 연산자를 사용하지 않고 함수로써 Function을 호출하는 것은 생성자를 호출하는 것과 같습니다. 하지만, new 연산자가 제거됨으로써 코드의 크기를 약간(4 바이트 작게) 줄일 수 있..