JavaScript

    [프로그래머스] 베스트앨범 - JavaScript

    문제 설명 스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속한 노래가 많이 재생된 장르를 먼저 수록합니다. 장르 내에서 많이 재생된 노래를 먼저 수록합니다. 장르 내에서 재생 횟수가 같은 노래 중에서는 고유 번호가 낮은 노래를 먼저 수록합니다. 노래의 장르를 나타내는 문자열 배열 genres와 노래별 재생 횟수를 나타내는 정수 배열 plays가 주어질 때, 베스트 앨범에 들어갈 노래의 고유 번호를 순서대로 return 하도록 solution 함수를 완성하세요. 제한사항 genres[i]는 고유번호가 i인 노래의 장르입니다. plays[i]는 고유번호가 i인 노래가 재생된 횟수입니..

    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 - 변수(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 - 함수

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