1. Git의 무결성 깃은 데이터를 저장하기 전에 항상 체크섬을 구하고 체크섬으로 데이터를 관리한다. 그래서 체크섬을 이해하는 깃 없이는 어떤 파일, 디렉토리도 변경할 수 없다. 체크섬은 깃에서 사용하는 가장 기본적인 데이터 단위이자 기본 철학이다. 깃은 SHA-1 해시를 사용해 체크섬을 만든다. 만든 체크섬은 40자 길이의 16진수 문자열이다. 파일 내용이나 디렉토리 구조를 이용해 체크섬을 구한다. SHA-1은 이렇게 생겼다. 24b9da6552252987aa493b52f8696cd6d3b00373 깃은 모든 것을 해시로 식별하므로 이런 값은 자주 보인다. 실제로 깃은 파일을 이름이 아닌 해당 파일의 해시로 저장한다. 2. Git은 데이터를 추가할 뿐 깃으로 무얼하든 깃 데이터베이스에 데이터가 추가 된..
개발
1. 버전 관리 버전 관리 시스템(VCS)은 파일 변화를 시간에 따라 기록하고 후에 특정 시점 버전을 다시 꺼내올 수 있다. VCS를 사용하면 각 파일을 이전 상태로 되돌리거나 프로젝트를 통째로 이전으로 돌리거나 시간에 따라 수정 내용을 비교해 볼 수 있다. 또는 누가 문제를 일으켰는지 언제 만들었는지의 이슈도 알 수 있다. 1) 로컬 버전 관리 프로그래머는 오래전에 로컬 VCS를 만들었다. 이것은 아주 간단한 데이터베이스를 사용해 파일의 변경 정보를 관리할 수 있다. 많이 쓰는 VCS 도구 중 RCS(Revision Control System)라고 부르는 것은 오늘까지도 많이 사용한다. RCS는 기본적으로 Patch Set(파일에서 변경되는 부분)을 관리한다. 이 Patch Set은 특별한 형식의 파일..
스택(Stack)과 큐(Queue)는 프로그래밍이라는 개념이 탄생할 때부터 고전적인 자료구조 중 하나이다. 이 두 자료구조는 자바스크립트에 내장되어있진 않지만 배열(Array)과 내장함수들을 이용해 스택과 큐를 흉내낼 수 있다. 또한 프로그래밍에 있어 중요한 자료구조이며 대부분의 알고리즘 문제를 풀 때 배열을 이용해 풀어도 통과하지만, 시간복잡도라던가 데이터의 양이 매우 큰 경우 통과할 수 없어 알고 있어야 한다. 스택 (Stack) LIFO(Last in, Last out) 원칙으로 만들어진 자료구조이며 가장 나중에 들어온 데이터가 먼저 나간다. (후입선출) 함수 실행 콘텍스트들이 쌓이는 콜스택과 브라우저 방문 기록이 쌓이는 히스토리 스택이 대표적이다. 서로 관계가 있는 여러 작업을 연달아 수행하며 이..
자바스크립트는 함수 안쪽에 또 다른 함수를 선언하는 중첩 함수(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..