본문 바로가기
  • soldonii's devlog

Javascript 공부123

200125(토) : Merge Sort, Quick Sort Bubble Sort와 Insertion Sort를 정리한 지난 글(link)에 이어 본 글에서는 Merge Sort와 Quick Sort를 정리한다. 1. Merge Sort 1) Merge Sort의 특징 Merge Sort와 Quick Sort는 기본적으로 'DIVIDE AND CONQUER' 알고리즘과 'RECURSION'이 사용된다. Bubble과 Insertion은 모든 요소를 한 번 이상씩 방문하며 반복문 안에 반복문이 중첩되는 형태이기 때문에 시간복잡도에서 O(n^2)를 피할 수 없었다. 하지만 'DIVIDE AND CONQUER'를 하는 순간 방문해야 하는 element의 수가 절반으로 줄어들기 때문에 훨씬 효율적인 알고리즘이 된다. [Big O] Best Case : O(n log n).. 2020. 1. 25.
200124(금) : Bubble Sort, Insertion Sort 이번 주에는 대표적인 정렬 알고리즘에 대해서 배우는 한 주였다. 총 4개의 정렬 알고리즘 - Bubble, Insertion, Merge, Quick -을 두 편의 글로 나누어서 1) 특징(시간/공간 복잡도, 장/단점 등), 2) 정렬 알고리즘 로직, 3) 구현 방법을 중심으로 정리하고자 한다. 본 글에서는 우선 Bubble Sort와 Insertion Sort를 정리한다. 정렬 알고리즘과 관련된 첫 글인만큼, 본격적으로 Bubble Sort를 알아보기 전에 도대체 왜 정렬 알고리즘을 배워야하는지에 대해서부터 살펴보자. 다들 아시다시피 자바스크립트에는 이미 내장된 Array.prototype.sort() 메소드가 존재한다. (Sort MDN 문서) 이를 사용하면 복잡한 정렬 로직을 알지 못해도 충분히 쉽.. 2020. 1. 24.
바닐라코딩 부트캠프 2주차 후기 2020년 1월 6일(월)에 시작한 바닐라코딩 부트캠프 2주차가 지났다. 1주차 피드백을 잘 적용했는지, 2주차는 어땠는지 회고하고자 한자. 이번 주는 자료 구조에 대해서 배운 한 주였다. Stack, Queue, Hash Table, Linked List 등을 배웠고, 각 자료구조의 메소드를 테스트 케이스가 통과될 수 있도록 직접 구현해보는 등의 과제가 주어졌다. 다행이도 부트캠프 들어오기 전 몇 달 동안 독학을 해서 아주 생소하지는 않았다. 다만 그 때 혼자 공부하면서도 각 자료구조 별로 필요한 필수 메소드들의 구현 로직를 강의로 듣기도 했고, 나 혼자서도 여러 차례 해봤는데 시간이 좀 지나서 그런지 약간 헤매면서 풀었다. 특히 Hash Table에서 해쉬 충돌이 일어났을 때 자료들을 어떻게 처리할지.. 2020. 1. 19.
200118(토) : 비동기 - 콜백과 프라미스 1. 비동기 프로그램에서 '지금'에 해당되는 부분과 '나중'에 해당되는 부분 사이의 관계가 비동기 프로그램의 핵심이다. '나중'은 '지금'의 직후를 의미하지 않는다!(즉, 코드에서 '지금' 요청을 보내자마자 바로 응답을 받아서 실행할 수 있지 않다!) AJAX로 예를 들자면, AJAX는 비동기적으로 '지금' 요청하고, '나중'에 결과를 받는다. '지금'부터 '나중'까지 "기다리는" 가장 간단한 방법은 '콜백 함수'라는 장치를 이용하는 것이다. const data = ajax("http://some.url.1"); console.log(data); // data 변수에 원하는 값은 담겨있지 않다! ajax("http://some.url.1", function cbFunc(data) { console.log.. 2020. 1. 18.
200117(금) : this 1. This this가 무엇인지 정확하게 알기 위해서, 죽을 때까지 아래 세 문장만큼은 잊지 말자! this는 1) 함수 자신을 가리키는 것도 아니고, 2) 함수 내부의 스코프를 가리키는 것도 아니다!! this는 '함수 호출 시점'에 바인딩되며, this가 무엇을 가리킬지는 전적으로 '함수를 호출하는 방식'에 달려있다!! 따라서 1) this가 포함된 함수 호출 스택을 추적해서 함수 호출 시점을 파악한 후, 2) 해당 함수가 어떤 방식으로 호출되었는지를 확인해야 한다!! 1) 호출부 this가 무엇을 가리킬지 이해하기 위해서는 '함수를 호출한 지점'을 확인하면 될 것 같지만, 생각보다 쉽지 않다. 중요한 것은 '호출 스택(현재 실행 지점에 오기까지 호출된 함수의 스택)'을 생각해야 한다. functi.. 2020. 1. 17.
200116(목) : Property Descriptor 오늘은 Property Descriptor에 대해서 알아보려고 한다. 이에 대해서 알아보는 이유는 바닐라코딩에서 알고리즘 문제를 풀 때, String.prototype.isAnagram 이런식으로 Native Prototype에 특정 메소드를 추가하는 방식으로 문제를 풀었는데, Native Prototype에 특정 메소드를 임의로 추가할 경우 해당 메소드가 enumerable하게 만드는 것은 bad practice이기 때문에 수정해보라고 하셨기 때문이다. 그래서 내가 구현한 메소드의 enumerable 프로퍼티를 false로 만들면서 공부한 내용을 정리한다. 본 글을 이해하기 위해 알고 있어야 하는 메소드는 Object.getOwnPropertyDescriptor()와 Object.defineProper.. 2020. 1. 16.
200115(수) : import, export 이번 글에서는 import, export에 대해서 정리해보려고 한다. 바닐라코딩에서 과제나 알고리즘 문제를 풀다보면 제발 import, export에 대해서 공부하고 이해한 후에 문제를 풀어달라는 ken님의 간곡한 요청을 종종 볼 수 있다... 내 예상으로는 5주차부터는 react를 배우게 되는데, 우선 React.Component를 불러오는 것부터 시작해서 직접 만든 컴포넌트를 다른 컴포넌트에게 넘겨줄 일이 빈번하게 생기기 때문에 미리 알아두라는 의미가 아닐까 싶다. 물론 리액트 뿐만 아니라 여기저기에서 무수히 쓰이긴 하지만..! 아무튼 mdn 문서를 읽어보니 export 부터 정리하는게 이해하는데 순서가 맞을 것 같다. 1. export export 명령어는 '자바스크립트 모듈에서 함수, 객체, 원시.. 2020. 1. 15.
200114(화) : var, let, const 차이 1. var, let, const의 차이이미 기존에 작성한 글이 있지만, 명확하게 공부하기 위해서 한 번 더 조사한 자료를 토대로 정리한다. var, let, const의 차이를 정확하게 이해하기 위해서는 호이스팅(hoisting), 스코프(scope)에 대해 정확하게 이해하고 있어야 한다. 아래 링크에서 해당 글들에 대한 내용을 확인할 수 있다. 호이스팅(hoisting)을 정리한 글스코프(scope)를 정리한 글 1) Function scope(var) vs. Block Scope(let, const)결론적으로 var은 함수 스코프를 따르고, let과 const는 블록 스코프를 따른다.즉 var로 변수를 선언할 경우, 해당 변수가 선언된 함수가 종료되기 전까지 var로 선언된 변수는 유효하다.따라서 .. 2020. 1. 14.
바닐라코딩 부트캠프 1주차 후기 2020년 1월 6일(월)에 시작한 바닐라코딩 부트캠프 1주차가 지났다. 간략하게 1주차에 느낀 점, 피드백 등을 기록해서 2주차에는 더 개선시켜보고자 한다. 2019년 5월 쯤부터 태어나서 처음으로 자바스크립트 공부를 시작했는데, 이런 저런 시행착오를 많이 겪었다. 미래를 걸 학원이라고 생각했던 곳이 기대에 부응하지 못해서 환불하기도 했고, 생활코딩도 듣다가 인프런도 듣다가, 유튜브도 보고 하면서 어떻게 공부하는 것이 효율적이고 효과적일지 감을 못 잡던 시기였다. 그러다가 udemy라는 사이트를 알게되고, 그 곳에서 강의를 듣기 시작하면서 하나씩 하나씩 더 많은 지식을 쌓을 수 있었다. 하지만 독학은 한계가 있었다. 개념을 익히기에 부족함은 없었지만, 개념으로만 남았고 나 스스로 공부하다보니 무언가를 .. 2020. 1. 13.