본문 바로가기

전체 글61

First-Class Functions 함수는 First-Class다!Javascript는 First-Class Function을 갖고 있다. Javascript의 함수는 First-Class이다.무슨 뜻일까? Javascript에서 함수는, 1. 변수에 저장할 수 있고2. 다른 함수의 인자(argument)로 전달할 수 있고(Callback function)3. 함수의 리턴값으로 쓸 수 있다. 어떤 프로그래밍 언어이든 위의 세 가지가 모두 가능하면, 그 언어는 "First-Class Function"을 갖는다고 할 수 있다.(First-class function - Wikipedia 참조) First-class function이 의미하는 것은 즉, 일반적인 다른 data structure, 이를테면 숫자, string, object, 배열 .. 2018. 4. 14.
Counting Sort (계수 정렬) Counting Sort(계수 정렬)에서 주목할 만한 점은, 이전까지 살펴봤던 다른 정렬 알고리즘들은 특정한 data type에 대한 가정을 따로 세우지 않았다. 하지만 지금 살펴 볼 Counting Sort는 정렬할 data의 type에 대한 가정을 세우고 시작한다. 무슨 말일까? 먼저 Counting Sort가 어떻게 동작하는지 몇 가지 사항을 간단히 살펴보자. 정렬할 data의 type에 대한 가정을 세운다.값들 끼리의 비교가 없다. 정렬이 끝날 때까지, 비교는 한 번도 이루어지지 않는다. — 대부분의 정렬 알고리즘은 요소 사이의 비교를 필요로 하고(comparison-based), O(NlogN) 이상의 성능을 기대할 수 없다. Counting Sort는 비교 대신 추가적인 배열을 이용하여, 시간.. 2018. 4. 7.
Quick Sort (퀵 정렬) 퀵정렬은 임의의 한 요소(pivot이라 칭함)를 정한 뒤, pivot의 왼쪽에는 pivot보다 작은 것들만, 오른쪽에는 pivot보다 큰 것들만 오게 만드는 Divide & Conquer 알고리즘이다. Quick Sort 내부에서 divide, 즉 partition하는 과정에 있어 크게 두 가지 접근법이 있다.1) Hoare's Partition Scheme2) Lomuto's Partition Scheme 먼저 Hoare's Partition Scheme에 대해 살펴보자.전체 과정을 정리해 보면 다음과 같다. 특히 Partition 과정을 집중적으로 보도록 하자, 1. 배열의 첫 인덱스를 start로, 길이를 end로 하여 quickSort()를 호출한다. end는 배열의 마지막 index가 아닌 배열.. 2018. 4. 6.
왜 ARIA인가? ARIA란? 보다 정확히 말하면 WAI-ARIA라고 하는데, Web Accessibility Initiative - Accessible Rich Internet Applications의 약자다. 웹 콘텐츠와 웹 어플리케이션(그 중에서도 특히 Ajax와 JavaScript를 사용하여 개발한 것들)을 제작할 때, 장애인(이를테면 screen reader 등을 이용하는)을 위한 접근성 향상 방법을 정의한 것이다(MDN 참조). 웹 개발자는 native HTML로는 제어할 수 없는 accessibility 이슈를 WAI-ARIA를 통해 관리할 수 있다. 즉 html element가 accessibility tree로 표현되는 방식을 WAI-ARIA를 이용해 수정하고(외관 상의 차이는 전혀 없이!), screen.. 2018. 4. 5.
Merge Sort (합병 정렬) merge할 때 추가적인 배열이 필요하므로, 제자리 정렬(in-place)이 아니다.시간 복잡도는 O(NlogN)이다. 절반씩 split하므로 logN에 요소의 개수만큼 비교하고 합병하므로 N을 곱한다.안정적이다(stable). 왼쪽 절반과 오른쪽 절반의 인덱스 i와 j 위치에 있는 요소를 비교하여, 같으면 위치를 바꾸지 않고 순서를 그대로 유지한다. 2018. 3. 30.
Firebase를 이용한 웹앱 메모 어플리케이션 인프런 강의(강사 신휴창 님)를 수강하는 과정에서 작성한 게시물입니다. Firebase 개발 환경 설정firebase.google.com → 구글 로그인 → 프로젝트 생성→ 좌측 Authentication 탭에서, 구글 로그인 방식을 활성화 로컬 개발 환경 설정node 설치 → 터미널에서 node -v로 설치 및 버전 확인 → npm install firebase-tools -g (Permission denied 에러 발생 시, 앞에 sudo 붙여서 다시 시도)→ firebase login 입력해서 로그인→ firebase list로 생성된 프로젝트 리스트 확인 → 작업 중인 디렉토리로 이동 후, firebase init 입력→ database 선택 → 작업하고자 하는 프로젝트 선택→ database.r.. 2018. 3. 16.
[ES6] for와 forEach, for...of / Spread... & ...Rest Operator 어떤 반복적인 작업을 하고자 할 때, 우리는 for loop을 자주 활용한다.const digits = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; for (let i = 0; i < digits.length; i++) { console.log(digits[i]); } 한편 Javascript에서는 배열의 반복을 위한 forEach라는 메소드를 제공한다.var donuts = ["jelly donut", "chocolate donut", "glazed donut"]; donuts.forEach(function(donut) { donut += " hole"; donut = donut.toUpperCase(); console.log(donut); });배열의 이름 뒤에 .forEach를 쓰고, .. 2018. 3. 16.
[ES6] Destructuring / Object literal shorthand ES6에서 추가된 또 다른 기능은 "Destructuring"이다. const point = [10, 25, -34]; const x = point[0];const y = point[1];const z = point[2]; console.log(x, y, z); const gemstone = { type: 'quartz', color: 'rose', carat: 21.29}; const type = gemstone.type;const color = gemstone.color;const carat = gemstone.carat; console.log(type, color, carat); 배열과 객체(object)에서 요소들을 다른 변수에 저장하려면, 위와 같이 각각의 요소들을 하나씩 참조하는 방식을 써야 .. 2018. 3. 16.