본문 바로가기
반응형

분류 전체보기119

OOP (Object Oriented Programming) & Inheritance Patterns 프로그래밍 방식은 이분법적으로 나눌 수 있는게 아니다. "지향"이라는 단어를 사용한 만큼에 있어 어떤 방식에서 무엇을 좀더 중요시하며 프로그래밍을 할 뿐, 두 방식은 서로를 배제하지 않는다. 두 방식들이 공존하는 부분도 있다는 점 유의하자. 절차 지향 언어 프로그램을 하나의 절차로 묶어 기능들(함수)을 순서대로 실행함으로써 개발자가 의도한 대로 작업을 처리하는 방식. ex) C, COBOL, Fortran, Perl HTML 등 객체 지향 언어 "클래스"라고 불리는 데이터 모델들의 청사진(블루 프린트)를 사용해서 프로그래밍 하는 방식. 프로그램(프로젝트)의 모든 요소(속성, 메서드)는 객체를 이용해서 형성된다. ex) Java, C++, C#, Python, PHP, JavaScript, Ruby, Ob.. 2020. 10. 28.
Graph Tree BST Graph 그래프는 노드(Node, 정점 -vertex-)와 노드와 노드를 연결하는 간선(edge)로 구성된다. 간선은 방향가질수도, 무방향(undirected)일 수 있다. 진입 차수 진입 차수(in-degree): 방향 그래프에서 외부에서 오는 간선의 수 (내차수 라고도 부름) 진출 차수(out-degree): 방향 그래프에서 외부로 향하는 간선의 수 (외차수 라고도 부름) 방향 그래프에 있는 정점의 진입 차수 또는 진출 차수의 합 = 방향 그래프의 간선의 수(내차수 + 외차수) 인접 행렬 방식 NxN 불린 행렬(Boolean Matrix)로써 matrix[i][j]가 true라면 i -> j로의 간선이 있다는 뜻이다. V개의 노드를 표현하기 위해 V*V 만큼의 크기가 필요하므로 공간복잡도는 O(V^.. 2020. 10. 27.
IssueHandling) for..in vs for..of 배열을 for..in을 사용해서 순회하려다 계속해서 에러 핸들링에 실패해서 원인을 찾던 도중 발견했다. for..in 반복문을 사용할 때는 iterable한 객체의 모든 속성이 순회되기 때문에 단순히 배열의 요소만 순회되는 것이 아니다. ES6에 추가된 for..of 는 [ Symbol.iterator ] 속성을 갖는 컬렉션을 위한 것이다. forEach 함수는 익명함수를 사용해야 하므로 this 키워드를 사용할 때는 사용하지 않거나, 화살표 함수를 사용할 필요가 있다. 2020. 10. 26.
IssueHandling) 객체 접근시 주의점 obj[key] vs obj.key key가 변수이고 안에 obj의 어떤 키값이 들어있다고 할 때 obj[key]는 obj 의 key변수안의 값을 키로한 obj안의 밸류를 의미하고 obj.key 는 obj의 'key' 라는 키값의 밸류를 의미한다. 즉, obj.key === obj[ 'key' ] //true 키 값을 정확히 알고, 그 키값이 string 일 때만 .key를 사용할 수 있다. obj[key]는 다양하게 대괄호 안에 값을 넣을 수 있다. string 타입 변수를 넣어도 되고, number 타입 변수를 넣어도 되고, ''로 감싼 문자열을 넣어도 되고, ''로 감싸지 않은 문자열을 넣어도 된다. 만약 string 변수처럼 문자열 타입의 데이터가 들어있는 변수를 대괄호 안에 넣고 사용하게 되면, 변수 안의 문자열이 key가 되어 .. 2020. 10. 26.
Linked List, Hash Table Linked List 단일 연결 리스트는 노드가 바로 다음 노드 방향으로 단일 연결만을 갖는 구조이다. 때문에 탐색 방향이 한쪽으로 밖에 진행되지 않는다. 이중 연결 리스트는 노드가 앞뒤의 노드와 연결된 구조이다. 양쪽으로 탐색이 가능하기 때문에 탐색의 시작을 처음과 끝 둘 중에 하나로 지정할 수 있다. 연결리스트의 임의의 위치에 노드를 추가하거나 삭제할 때 O(1)의 상수시간만큼의 시간 복잡도를 갖는다. 배열은 추가와 삭제에 대해 O(N)의 선형시간 만큼의 복잡도를 갖는다 연결리스트는 인덱스를 갖지 않는다. 그렇기 때문에 특정 데이터를 리스트에서 조회하고자 할 경우, 처음부터 전체를 확인해야 하며 O(N)의 시간복잡도를 갖는다. 조회삽입삭제Linked ListO(N)O(1)O(1) Hash Table .. 2020. 10. 26.
Queue 큐 / Stack 스택 Queue 큐 큐는 일상생활에서 줄서기를 할 때와 동일한 형태로 동작하는 자료구조다. 먼저 줄을 서있던 사람이 먼저 줄에서 이탈한다. 큐도 마찬가지로 먼저 입력된 데이터가 먼저 제거된다. 시간복잡도 자료구조 조회 삽입 삭제 Queue O(n) O(1) O(1) Stack 스택 스택은 쌓여있는 접시를 사용할 때와 같은 구조다. 추가와 삭제는 스택의 최 상위에서만 수행할 수 있다. 가장 먼저 입력된 데이터가 가장 먼저 이탈한다. 시간복잡도 자료구조 조회 삽입 삭제 Stack O(n) O(1) O(1) 2020. 10. 26.
npm package.json NPM NPM은 Node Package Manager로 필요한 모듈을 다운로드할 수 있는, 모듈들이 모여있는 모듈 스토어다. 앞으로 필요한 모듈은 대부분 NPM에서 다운로드해서 사용한다. node 모듈을 사용하는 프로젝트에서 npm이라는 키워드는 하나의 명령어처럼 사용된다. npm start처럼, 프로젝트를 실행시킬 때 npm 키워드를 사용하기도 한다. package.json 프로젝트에 대해 필요한 모듈이 무엇인지 알려주는 역할을 하는 것이 바로 *_package.json *_이다. package.json에는 이 프로그램을 실행시키기 위해 필요한 모듈들이 무엇인지, 프로그램을 실행시키는 방법, 프로그램을 테스트하는 방법 등이 명시되어 있다. 프로그램을 실행시키기 위해 필요한 실제 모듈은 node_modu.. 2020. 10. 25.
this call() apply() bind() this 패턴바인딩되는 객체 (브라우저)바인딩되는 객체 (node.js)Globalwindow (strict mode - undefined)module.exportsFunction 호출window (strict mode - undefined)global 화살표함수의 this const foo = () => { return this } foo() === module.exports //true 메서드 안에서 this를 호출하면 global이 바인딩되는 것이 맞지만, 화살표 함수 내에서 this를 호출하면 메서드 내부에서 호출한 것이 아닌 해당 함수가 선언된 위치를 기준으로 this 가 바인딩 되게 된다. (*좋은 설명 있으면 추가할 것.) call() call은 항상 함수를 "실행"한다. 첫 번째 인자가 항.. 2020. 10. 20.
shorthand syntax / 객체분해 / rest spread syntax 예시 const name = 'gildong' const age = 19 const human = { name, age, level: 'Junior' } console.log(human) // { name: 'gildong', age: 19, level: 'Junior' } 객체에 변수 명을 key로 변수 값을 value로 할당할 수 있다. 객체분해 cosnt student = {name: 'gildong', major: 'computerScience'} const { name } = student { name } === { name: 'gildong' } //true 객체의 특정 키값만 따로 임의의 객체에 저장할 수 있다. rest / spread syntax 이용 const student = { name:.. 2020. 10. 20.
반응형