스택(Stack)과 큐(Queue)는 프로그래밍이라는 개념이 탄생할 때부터 고전적인 자료구조 중 하나이다. 이 두 자료구조는 자바스크립트에 내장되어있진 않지만 배열(Array)과 내장함수들을 이용해 스택과 큐를 흉내낼 수 있다. 또한 프로그래밍에 있어 중요한 자료구조이며 대부분의 알고리즘 문제를 풀 때 배열을 이용해 풀어도 통과하지만, 시간복잡도라던가 데이터의 양이 매우 큰 경우 통과할 수 없어 알고 있어야 한다. 스택 (Stack) LIFO(Last in, Last out) 원칙으로 만들어진 자료구조이며 가장 나중에 들어온 데이터가 먼저 나간다. (후입선출) 함수 실행 콘텍스트들이 쌓이는 콜스택과 브라우저 방문 기록이 쌓이는 히스토리 스택이 대표적이다. 서로 관계가 있는 여러 작업을 연달아 수행하며 이..
개발/Javascript
자바스크립트는 함수 안쪽에 또 다른 함수를 선언하는 중첩 함수(Nested Functions)가 가능하다. 자바스크립트가 함수를 변수와 같이 값(value)처럼 다루기 때문이다. (자바스크립트에선 같은 이름의 변수와 함수를 선언하는 것 불가능하다.) 또한 중첩 함수는 최상위 레벨에만 작성이 가능하다. if 또는 while문 등 문장에서 작성할 수 없다. 1. 클린 코드 //유저가 무직자인지 확인한다. if(user.job == null){ ... } if(user.isUnemployed()){ ... } 두 코드는 같은 행동을 나타낸다. 1번 코드 예제는 주석으로 의도를 명시했지만 2번 코드 예제는 코드 그 자체로 의도를 표현한다. 1번 코드와 같이 주석으로 설명하는 것이 많아지면 코드가 길어지고 가독성..
mutable 1. 변할 수 있다. 2. 참조 타입 3. 해당 데이터 주소를 찾아 값을 변경한다. immutable 1. 불변, 변할 수 없다. 2. 원시 타입 3. 해당 데이터 주소와 별개의 새로운 주소에 값이 할당한다. 4. 문자열 [핵심] mutable은 원본 데이터를 변화시키려는 속성이고 immutable은 원본 데이터를 유지하려는 속성이다. Array Method - immutable of mutable 메서드 별로 달라서 자주 사용하는 것 알아두면 좋다. - concat() : immutable //concat() - immutable const arr1 = [1, 2, 3]; const arr2 = [4, 5]; const concatArr = arr1.concat(arr2); concatA..
Array에는 map()이나 filter(), join() 등의 메소드가 있다. 이 기능은 모두 reduce로도 구현이 된다. 또한 initialValue에 배열이나 객체를 주면 전역으로 객체변수를 하나 만드는 효과를 낼 수 있다. reduce() 배열의 왼쪽부터 콜백 함수를 실행 후 누산한다. 배열.reduce(function(acc, cur, index, arr){ }[, initialValue]) 1. 누산기 accumulator (acc) 2. 현재값 (cur) 3. 현재 인덱스 (index) 4. 원본 배열 (arr) 5. initialValue(optional: 사용해도 되고 안해도 됨) : callback의 최초 호출에서 첫 번째 인수에 제공하는 값이며 초기값을 제공하지 않으면 배열의 첫 번..
자바스크립트에는 다양한 문자열 비교 방법이 있다. 동등연산자로 문자열이 동등한지 비교하거나 문자열의 크기를 비교할 수 있다. 1. 동등 연산자 (==, ===)로 문자열 비교 두 개의 문자열이 같은지 다른지 확인할 때 사용한다. 두 문자열이 같으면 'true' 다르면 'false' 리턴한다. const str1 = 'hello'; const str2 = 'hello'; const str3 = 'world'; console.log(str1 === str2); // true console.log(str1 === str3); // false console.log(str2 === str3); // false console.log(str1 == str2); // true console.log(str1 == str..
전개 구문은 ECMAScript6(2015)에서 새로 추가된 문법이다. 간단하게 이 문법은 문법 이름 그대로 객체 혹은 배열을 펼칠 수 있게 해준다. //펼칠 대상이 객체인 경우 {...obj} //펼칠 대상이 배열인 경우 [...arr] {...arr} 간단하게 배열이나 객체 앞에 점 세개 (...) 를 붙여주면 된다. 그대신 펼쳐진 객체나 배열을 담을 곳이 필요하다 → 객체는 객체로, 배열은 배열 또는 객체로 담을 수 있다. [새로운 배열 만들기] 전개 연산자를 활용해 새로운 배열을 만들 수 있다. ES5에서의 concat 메소드 보다 코드가 간결하고 가독성도 좋다. const arr1 = [1, 2, 3]; const arr2 = [4, 5, 6]; const arr3 = [7, 8, 9]; con..
자바스크립트에서 숫자, 문자열, 객체 배열을 정렬하는 방법! 1. 숫자 배열 정렬 const arr = [23, 15, 2, 9, 1, 3]; arr.sort(); // [1, 15, 2, 23, 3, 9]; 숫자 배열에 단순히 sort() 를 적용하면 숫자를 문자열로 반환해 정렬함 이때 문자열 "11"은 "2"보다 작기 때문에 숫자 크기대로 정렬되지 않음!! - 오름차순 const arr = [23, 15, 2, 9, 1, 3]; arr.sort((a, b) => a - b); // [1, 2, 3, 9, 15, 23] sort()에 두 개의 숫자를 비교하는 함수를 구현해 인자로 전달해야 함. a - b 의 값을 리턴하도록 하면 오름차순이 됨 a 가 크면 양수, b가 크면 음수, 같으면0 이 리턴되기 ..
자바스크립트 배열안의 원소들 중 최대값, 최소값 구하는 방법 정리 1. Math.max(), Math.min() 파라미터로 입력받은 숫자들 중 최대값과 최소값 구해 리턴하는 함수 const maxNum = Math.max(1, 2, 3, 4, 5); //5 const minNum = Math.min(1, 2, 3, 4, 5); //1 배열에 담긴 여러 숫자 중 최대값과 최소값을 구하기 위해서는 배열의 원소들을 하나씩 꺼내 Math.max(), Math.min() 함수의 파라미터로 전달하면 됨 이렇게 하기 위해서 Function.prototype.apply() 메소드를 사용하거나 Spread Operator(전개 연산자)를 사용함 2. Function.prototype.apply() func.apply(t..
증감 연산자는 연산자가 어디 위치했는가에 따라 전위 연산자(prefix operator) 와 후위 연산자(postfix operator)로 구분됨 1. 후위 연산자 //postfix increment num++; - 연산자가 변수 뒤에 위치 [예시 코드] let x = 3; let y = x++; console.log(`x: ${x}, y: ${y}`); // x: 4, y: 3 나도 x: 3, y: 4가 출력 될 거라 생각함 (결과는 x: 4, y: 3) → 후위 연산자는 변수를 먼저 할당(대입) 후 연산을 수행하기 때문!! 따라서, 1. 먼저 x 를 y 에 대입 (x=3, y=3) 2. x 에 +1 증가 (x=4, y=3) let x = 3; let y; //이 때 y는 undefined y = x;..
블로그에 가장 처음 썼던 글이 var, let, const 의 차이점이었음 이번 프로그래머스 문제를 풀면서 for문에서도 변수를 let으로 선언해줘야 한다는 점을 깨달음 for문을 사용할 때 조건식 영역에서 var을 사용할 때와 let을 사용할 때 결과 값이 다르게 나옴 var, let, const 각각의 변수는 유효범위(scope)를 가지는데 var은 function scope, let은 block scope를 가짐 block scope인 변수는 블록 안에서 선언되면 블록 밖에서 참조 불가! (if문, for문 에서 보이는 대괄호{}가 블록임) //블록 안에서 선언, 블록 밖 참조 for (let i = 0; i < 10; i++){ let add1 = 1; } console.log(add1); //U..