1. 동기 vs. 비동기 동기 (Synchronous) 동기적인 작업은 순서대로 실행된다. 즉, 한 작업이 시작되면 다음 작업은 이전 작업이 완료될 때까지 기다린다. 코드가 순차적으로 실해되기 때문에 결과를 예측하기 쉬우며, 간단한 디버깅이 가능하다. But, 작업이 끝날 때까지 기다려야 하므로, 대규모 작업이나 시간이 오래 걸리는 작업의 경우 성능에 영향을 줄 수 있다. 대표적으로 JavaScript가 동기적으로 작동하는 언어다. 비동기 (Asynchronous) 순서와 관계없이 독립적으로 실행된다. 즉, 한 작업의 완료를 기다리지 않고 다음 작업을 실행할 수 있다. 비동기 작업은 주로 콜백(Callback), 프로미스(Promise), 혹은 비동기 함수(async / await)를 통해 처리된다. 이..
1. JavaScript 엔진 인터프리터란? 프로그래밍 언어의 코드를 실행하는 컴퓨터 프로그램 또는 환경 자바스크립트를 실행하기 위해서는 자바스크립트 엔진이 필요하다. 대표적으로 Google의 V8 엔진, Firefox의 SpiderMonkey, Safari의 Webkit이 있다. JavaScript 엔진의 주요 구성요소 메모리 힙(Memory Heap): 동적으로 할당 된 메모리를 저장하는 곳 객체, 배열, 함수 등의 데이터 구조와 변수가 저장되는 공간 메모리 관리는 대부분 Garbage Collection에 의해 이루어진다. 더 이상 사용되지 않는 메모리를 자동으로 탐지하여 해제한다. 웹 페이지의 각 탭마다 별도의 메모리 힙이 할당되며, 각 힙은 해당 탭에서 실행되는 자바스크립트 코드와 관련되 모든 ..
1. OOP(객체지향 프로그래밍)란? Object-Oriented Programming(객체지향 프로그래밍) : 소프트웨어를 객체 단위로 모델링하고 객체 간의 상호작용을 중심으로 프로그래밍하는 개념이다. OOP의 5가지 설계 원칙(SOLID 원칙) Single Responsibility Principle(SRP, 단일 책임의 원칙) 하나의 클래스는 하나의 책임만 가져야 한다. 클래스가 너무 많은 기능을 가지면 코드의 응집성(cohesion)이 떨어지고, 유지보수가 어려워진다. 따라서 각 클래스는 한 가지 변경 이유만을 가져야 한다. Open/Closed Principle(OCP, 개방/폐쇄 원칙) 소프트웨어 엔티티(클래스, 모듈, 함수 등)는 확장에 대해서는 열려 있어야 하지만, 수정에 대해서는 닫혀 있..
1. 백트래킹이란? 일반적으로 그래프/트리의 모든 원소를 완전 탐색하기 위한 목적으로 사용 재귀 함수를 이용해 구현, 단순히 완전 탐색하는 것이 아니라 조건에 따라 유망한 노드로 이동 백트래킹을 진행할 때, 경우의 수를 최대한 줄이는 방법 : 이전까지 경우와 상충되지 않는 조건을 만족하는 위치에 대해서만 재귀 함수를 호출 재귀 함수를 통해 모든 경우의 수를 다 찾은 뒤에, 각 경우마다 가능한지 검사하는 방법 유망한 경우에 대해서만 재귀 함수를 호출하는 방법 ==> 2번 방법이 더 효율적이다. N-queen let n = 8; let queens = []; function possible(x, y) { for (let [a, b] of queens) {// 현재까지 놓았던 위치를 하나씩 확인 if (a =..