목록개발공부 (70)
코딩쌀롱
마이크로 태스크, 매크로 태스크, PromiseJobs 얘네들이 도대체 뭔가..했는데 이제 좀 알 것 같다. 기쁘다!🤪 ✱ 용어 정리 용어 정리를 하자면, 매크로 태스크 큐는 이벤트 루프를 설명할 때 나오는 태스크 큐(콜백 큐)와 같다. 그리고 PromiseJobs큐는 마이크로 태스크 큐와 같고, PromiseJobs큐는 ECMA, 마이크로 태스크 큐는 V8엔진에서 부르는 이름만 다른 것이다. 매크로 태스크 큐 = 태스크 큐 = 콜백 큐 마이크로 태스크 큐 (V8) = PromiseJobs 큐 (ECMA) ✱ 마이크로 태스크 큐, 매크로 태스크 큐 이벤트 루프의 동작 원리에 대해서 공부할 때 아래와 같은 자료들을 자주 보게 되는데, 이 때 콜백 큐(태스크 큐)는 하나의 큐처럼 보이지만 실제로는 여러 개의..
Promise에 대해서는 이전 글에 작성하였습니다. ✱ Promise → async/await function findAndSaveUser(Users) { Users.findOne({}) .then(user => { user.name = 'eve'; return user.save(); }) .then(user => { return Users.findOne({ gender: 'f' }); }) .then(user => { // 생략 }) .catch(err => { console.error(err); }); } 위 코드를 async/await로 바꿔보면 (에러 처리부분은 이 다음 코드에) async function findAndSaveUser(Users) { let user = await Users.fin..
✱ Promise const promise = new Promise((resolve, reject) => {...}); new Promise()로 프로미스를 생성할 수 있으며, 그 내부에 resolve, reject를 매개변수로 갖는 콜백함수(executor)를 넣는다. 이렇게 만든 promise 변수에 then과 catch 메서드를 붙일 수 있다. 프로미스 내부에서 비동기 작업이 성공적으로 이행됐으면 resolve가 호출되고, then이 실행된다. 작업에서 오류가 발생한 경우 reject가 호출되고, catch가 실행된다. finally는 성공/실패 여부와 상관없이 실행된다. const condition = true; // true면 resolve, false면 reject const promise =..
✱ 프로그램, 프로세스 프로그램 • 파일이 저장 장치에 저장되어 있지만 메모리에는 올라가 있지 않은 정적인 상태 메모리에 올라가 있지 않은 : 운영체제가 프로그램에게 독립적인 메모리 공간을 할당해주지 않았다는 뜻, 모든 프로그램은 운영체제가 실행되기 위한 메모리 공간을 할당해줘야 실행될 수 있다. 정적인 상태: 아직 실행되지 않고 가만히 있는 상태 • 아직 실행되지 않은 파일 그 자체, 코드 덩어리 파일. 프로세스 • 프로그램을 실행하는 순간 해당 파일은 컴퓨터 메모리에 올라가게 되고, 이 상태를 동적인 상태라고 하며 이 상태의 프로그램을 프로세스라고 한다. 위키피디아에서는 프로세스를 '실행되고 있는 프로그램'이라고 정의를 내리고 있다. • CPU가 처리하는 작업(Task)라고도 불린다. • 디스크에 저..
프로그래밍 패러다임 •패러다임 : 세계를 이해하는 방식, 어떤 한 시대 사람들의 견해나 사고를 근본적으로 규정하고 있는 인식의 체계 •프로그래밍 패러다임 : 프로그래밍을 어떤 관점으로 보고 이해하는가, 프로그램을 작성할 때의 관점 프로그래밍 패러다임은 여러 가지가 있고, 대표적으로는 아래와 같다. •명령형 프로그래밍 : 절차지향, 객체지향 •선언형 프로그래밍 : 함수형, 반응형 최근 대부분의 프로그래밍 언어는 여러 개의 패러다임을 갖는데 이런 언어를 멀티 패러다임 언어라고 한다. 대표적으로 자바스크립트가 그러하다. 어떤 언어는 하나의 패러다임을 갖기도 하지만 최근에는 여러 패러다임들이 관대하게 지원되고 있다. 예로 자바는 람다가 생기면서 함수형 프로그래밍도 가능해졌다. 누구나 세계관을 가지고 있듯, 각각..
문제 프로그래머스 모의고사 문제 input: 1번부터 마지막 문제까지 정답이 순서대로 들은 배열 answers output: 가장 많은 문제를 맞힌 사람이 누구인지 담음 배열 (여럿일 경우 오름차순) 나의 풀이 1, 2, 3번 학생들의 찍는 번호들을 담을 배열을 어떻게 저장할지 고민하다가 처음에는 2차원 배열로 저장했다. 코드를 모두 작성했을 때 지저분해보이고, forEach를 한 번 더 돌아야해서 각 학생들의 배열들을 따로 저장하는 것으로 수정했다. 그리고 메서드 체이닝을 많이 안 써봤는데 보기에 되게 좋은 것 같다! 자주 활용해봐야겠다.
문제 프로그래머스 크레인 인형뽑기 게임 문제 input: 1) 게임 화면의 격자 상태가 담긴 2차원 배열 board 2) 인형을 집기 위해 크레인을 작동시킬 위치가 담긴 배열 moves output: 크레인을 모두 작동시킨 후 터뜨려져 사라진 인형의 개수(number) 나의 풀이 한 달 전쯤 같은 문제를 풀었었는데 그 때는 이중 for문으로 풀었었다. 그래서 이번에는, 1. for문을 사용하지 않고 2. reduce를 사용해서 2차원 배열의 행, 열을 바꿔주는 함수도 직접 작성해보기로 했다. let board = [ [0, 0, 0, 0, 0] [0, 0, 1, 0, 3] [0, 2, 5, 0, 1] [4, 2, 4, 4, 2] [3, 5, 1, 3, 1] ]; 문제에서 input으로 주는 2차원 배열 ..
아래의 두 배열을 반복문 사용하지 않고 만들어보자. ① 인덱스가 곧 원소이고, 길이가 num인 배열 ex) num = 3 → [ 0, 1, 2 ] num = 5 → [ 0, 1, 2, 3, 4 ] ② 1부터 num까지의 원소를 갖는 배열 ex) num = 3 → [ 1, 2 , 3 ] num = 5 → [ 1, 2, 3, 4, 5 ] 1. new Array() + fill + map // 1번 const getArr1 = num => new Array(num).fill(0).map((_, i) => i); // 2번 const getArr2 = (num, start = 1) => new Array(num).fill(0).map((_, i) => start + i); 2. Array.from() // 1번..
원형 연결 리스트(Circular Linked List) 단일 연결 리스트(Single Linked List)는 마지막 노드가 null을 가리킨다. 이 마지막 노드가 첫 번째 노드를 가리키게 하면 원형 연결 리스트가 된다. 인덱스 0의 위치에 새로운 노드를 삽입하려면 마지막 노드의 링크를 바꿔야 하므로 마지막 노드에 접근하기 위해 리스트의 제일 끝까지 순회해야 하는 문제가 생긴다. head node의 위치를 옮겨서 마지막 노드를 가리키게 하면 문제를 해결할 수 있다. 이를 변형된 원형 연결 리스트라고 한다. ✱제일 앞에 새로운 노드 추가하기 autumn, dico, kyle, beemo 네 노드가 있고, head node는 마지막 노드인 beemo이다. 이 원형 연결 리스트에 eve라는 새로운 노드를 제..
문제 LeetCode 83. Remove Duplicates from Sorted List 문제 input: 싱글 링크드 리스트의 head node output: 중복 val인 노드들을 제거한 링크드 리스트의 head node // Definition for singly-linked list. function ListNode(val, next) { this.val = (val===undefined ? 0 : val) this.next = (next===undefined ? null : next) } 노드들은 val, next 속성을 가지고 있다. 나의 풀이 while문 마지막에 현재 노드를 다음 노드로 바꿔주고, 현재 노드가 끝까지 가서 null일 때 while문을 더 이상 돌지 않게 했다. ✱바깥 wh..