본문 바로가기

반응형

Coding/TIL (Today I Learned)

(29)
[JavaScript] Recursion (재귀) 코드 반복 작성만이 익숙해지는 길인가, 좀처럼 익숙해지지 않고 있는 애증의 재귀 함수. 오늘은 Recursion 재귀에 대해 정리해 본다. Recursion 이란? 함수는 자신도 호출할 수 있는데, 함수 안에서 자기 자신을 다시 호출하는 프로그래밍 패턴을 말하며 '재귀 함수'라고 한다. 재귀 함수를 사용할 때에는 반드시 재귀 함수를 끝내는 종료 조건(초기화)이 필요하다. 종료 조건을 설정하지 않으면 시스템이 무한 루프의 재귀함수를 돌아서 메모리 오류가 발생한다. 재귀는 같은 종류의 작업을 반복적으로 실행할 때 유용하다. 재귀함수를 쓰는 이유는? 재귀적 알고리즘은 비 재귀적인 알고리즘으로 변환할 수 있다. 재귀는 반복문과 유사하다. 둘 다 동일한 코드를 여러 번 실행하고 종료 조건이 필요하다. 일부 함수는..
Data Structure 03. Tree, Binary Search Tree Tree 나무를 뒤집어 놓은 것처럼 하나의 시작 노드로부터 자식 노드들이 파생되는 자료 구조다. 트리는 항상 root부터 시작해서 아래로 가지치기를 한다. 트리 구조는 그래프의 한 종류로 단일한 방향성을 가지며 원형 구조(순환구조)로는 존재하지 않는다. 하나의 노드에는 하나 이상의 차일드 노드가 붙을 수 있다. HTML의 구조가 좋은 예시가 된다. 관련 용어들 Root : 시작하는 노드를 가리킨다. 하나의 트리에는 1개만 존재. Leaf : 자식 노드가 없이 트리의 가장 마지막에 위치한 노드를 말한다. Parent / Child : 연결된 상위 부모 노드를 parent, 하위 자식 노드를 child라고 한다. Edge/Branch: 노드와 노드의 연결 선 Path: 노드 간의 연결 Children / S..
Data Structure 02: Linked List 노드가 데이터와 포인터를 가지고 일렬로 연결된 형태의 자료 구조. 포인터는 다음 데이터의 주소를 가지고 있다. 데이터의 주소를 일일이 찾아다녀야 하기 때문에 배열보다 느릴 수 있다. 배열은 배열의 길이를 늘리거나 줄일 수 없는 반면, 링크드리스트는 연결된 데이터의 주소를 추가/삭제 해서 데이터를 늘리거나 줄일 수 있다. 따라서 길이가 정해지지 않은 데이터를 핸들링 할 때 적합함. Graph 노드들이 다양한 연결관계를 갖고 있는 자유로운 형식의 자료구조. 네트워크 모델 이라고도 한다. 그래프에는 노드와 엣지가 있으며 에지의 방향이 있으면 Directes graph, 없으면 Undirected graph라고 한다. 검색방법에는 깊이우선검색Depth First Search, 넓이우선검색 ..
OOP 02: JavaScript의 Prototype 이어서, 자바스크립트에서 프로토타입은 무엇이고 왜 사용해야 할까? Prototype이란? C++, Java처럼 클래스를 이용하는 객체지향 언어에서는 객체의 설계도라고 할 수 있는 클래스를 상속할 수 있다. 반면 자바스크립트는 클래스가 아닌 객체를 상속. 이때 상속은 프로토타입 체인이라고 부르는 구조로 구현되어있다. * ECMA6 표준에서 Class 문법이 추가되었지만 문법이 추가된 것일 뿐, 자바스크립트가 클래스 기반으로 바뀐것은 아님. 우리가 함수를 정의하면 두 가지 일이 동시에 이루어진다. 1. 해당 함수에 Constructor(생성자) 자격 부여됨. 2. 해당 함수의 Prototype Object 가 생성됨. * 생성된 함수와 함수의 Prototype Object 는 서로 참조함. 자바스크립트의 함..
Data Structure 01: Stack & Queue Stack & Queue : Linear data structure. Flexible size. 스택과 큐는 모두 선형 데이타 구조이고 사이즈가 유동적이라는 공통점이 있다. 각각의 특징을 살펴보면, Stack stack은 '쌓다'라는 뜻 그대로 맨 마지막에 넣은 데이터부터 꺼낼 수 있으므로 LIFO(Last In First Out)라고 함. 자료의 입력과 출력이 한 방향에서만 이루어지는 형태의 자료구조로 역순으로 데이터를 꺼내 쓰고 싶을 때 사용함. 활용 예: 다양한 에디터의 Undo/Redo 기능 같은 것. 자바스크립트에서 스택이 가지고 있는 Method는: Array.prototype.push() Array.prototype.pop() Pseudo code로 작성해 보기: //1. 입력: 빈 스택에 ..
OOP 01: 객체지향 프로그래밍의 컨셉 이번주는 객체지향 프로그래밍에 관해 공부 중. 객체와 프로토타입의 개념은 좀처럼 이해하기가 어려웠는데, 이후의 과제를 해내려면 꼭 알아야 할 내용이라서 주요 개념과 특징을 정리해본다. Object-Oriented Programming 이란? '객체지향프로그래밍' 이라고 하는데컴퓨터 프로그래밍의 패러다임 중 하나다. 인간이 세상을 인식하는 방식으로 접근한 프로그래밍 방법론이다. - 인간은 머릿속에 가진 특징을 가진 추상적 이미지로 세상을 인식함. 현실 세계의 여러 크기와 컬러의 사과를 사과라고 인식함. 그것이 클래스인가.. OOP의 구성으로는 Class와 Object(Class의 인스턴스), Method가 있다. Car 라는 클래스를 예를 들면, - Class: 자동차 생산을 위한 청사진(블루프린트, 원형..
Git 02. 개념과 주요 명령어 immersive prep 스프린트를 진행하면서 처음으로 같은 프로젝트를 함께 코딩하는 경험을 했다. 이전에 github 에서 풀리퀘스트 하는 방법을 정리했는데 그때는 혼자 작업을 위한 과정이었음. 앞으로도 자주 사용하게 될 깃에 대한 개념을 정리해본다. Git 이란? "Distributed Version Control System" 소스 관리를 위한 분산 버전 관리 시스템으로 편리한 버전관리, 백업, 협업을 위한 도구. - 작업 내용의 변화를 기록하고 특정 시점의 작업을 불러올 수 있어 버전 관리가 된다. - 작업물이 서버 저장소에만 있는 것이 아니라 각각의 로컬 저장소에 분산되어 있다. - 한 프로젝트의 코드를 여러 사람이 함께 작업 할 수 있도록 도와주고 공동작업 시 발생한 충돌을 처리해 준다. 그..
npm, Package.json npm npm은 Node Package Manager. 하나의 프로그램은 다양한 모듈이 합쳐져서 만들어지는데, 우리는 모든것을 스스로 만들지 않고 검증된 모듈을 가져다 사용하는 경우가 많다. 필요한 모듈을 다운로드할 수 있는 일종의 앱스토어. *npm과 같은 개념으로 페이스북이 내놓은 패키지 매니저 yarn도 존재함. Package.json 이 프로그램을 실행시키기 위해 필요한 모듈들이 무엇인지, 프로그램을 실행시키는 방법, 프로그램을 테스트하는 방법 등이 명시되어 있는 일종의 제품 카탈로그 같은 것. 협업을 할 때 코드와 함께 포함하고 있는 모든 모듈을 다 전달하지 않아도 된다. package.json에서 필요하다고 하는 모듈을 npm을 이용해 다운받아 쓰면 됨. *npm install이 완료되면 no..