본문 바로가기

전체 글72

Graph (그래프) ✅ Graph (그래프)란? 노드(node)와 간선(edge)으로 이루어진 자료 구조 Graph 종류 그래프는 방향성에 따라 무방향 그래프(Undirected Graph), 방향 그래프(Directed Graph)로 나눌 수 있다. 1. 무방향 그래프 (Undirected Graph) 간선을 통해서 양 방향으로 갈 수 있다. 정점 A와 정점B를 연결하는 간선은 (A, B)와 같이 정점의 쌍으로 표현한다. (A, B) = (B, A) 동일 2. 방향 그래프 (Directed Graph) 간선에 방향성이 존재한다. A ➡ B로만 갈 수 있는 간선은 로 표현한다. 는 와 다름 Graph 용어 노드(node) 위치라는 개념 (node라고도 부름) 간선(edge) 위치 간의 관계 즉, 노드를 연결하는 선 인접 정.. 2021. 1. 24.
Hash Table (해시 테이블) ✅ Hash Table (해시 테이블)란? 해시 테이블은 Key-Value로 데이터를 저장하는 자료구조 중 하나로 빠르게 데이터를 검색할 수 있는 자료구조다. 해시 테이블이 빠른 검색속도를 제공하는 이유는 내부적으로 배열(버킷)을 사용하여 데이터를 저장하기 때문이다. 해시 테이블은 각각의 Key에 해시함수를 적용해 배열의 고유한 index를 생성하고, 이 index를 활용해 값을 저장하거나 검색하게 된다. 해시 테이블(hash table) key-value를 넣으면 해시함수를 거쳐 인덱스로 변환 후 저장하는 자료구조 해시함수(hash function) key를 (저장소의) index로 바꾸는 함수 해싱(hashing) 해시함수를 통해 key를 index로 바꾸는 작업 해시값(hash value) inde.. 2021. 1. 23.
Linked List (연결 리스트) ✅ Linked List (연결 리스트)란? 각 노드가 데이터와 링크를 가지고 한 줄로 연결되어 있는 방식으로 데이터를 저장하는 자료 구조 노드 Data : 값을 저장 Link : 다음 주소를 가리키는 공간 위 그림과 같이 노드는 Data를 저장하는 공간과 다음 주소를 가리키는 공간이 필요하다. 사용자가 입력하는 정보를 Data공간에 담고 노드가 추가될 때마다 Link를 통해 다음 노드와 연결하는 것이다! 좀더 자세히 알아보자! Linked List(연결리스트)는 노드로 연결되어있다고 했다. 하지만 각 노드는 연속된 공간에 저장되어 있지 않고 메모리의 여러 부분에 분포되어 있다. 그래서 각 노드에 다음 노드의 주소를 저장함으로써 다음 노드를 탐색할 수 있다. (예를 들면 전화를 하면 각 부서로 연결해주는.. 2021. 1. 22.
TIL_210121 📝 오늘 한 일 / 배운 것 🖋 LinkedList, Hash Table 🖋 Graph, Tree 🙏 기억할 것 🖋 밀린 블로깅 꼭 주말에 하기 핑계인 것 같지만 자료 구조 공부를 하며 관련 sprint를 풀며 블로깅까지하려니 도저히 시간이... ㅠㅠ 가뜩이나 블로깅하는데 시간을 한나절 보내는 나는.. hash table을 자바스크립트로 구현하는데 이틀이나 걸렸다. 개념정리도 제대로 하지 못했는데 문제를 풀려하니 더욱 더 시간이 오래걸린 것 같다. 꼭 개념을 정리하고 전에 배웠던 것들을 잘 활용할 수 있도록 복습을 하자! 주말엔 완성하길! 🖋 손을 믿지 말자 같은 코드인데 왜 이건 되고 저건 안 되지..? 하다가 언더바 하나 때문에 이러한 일이 벌어졌단 사실을 알고 너무 허탈했다. 이 하나 때문에 몇시간.. 2021. 1. 22.
TIL_210119 📝 오늘 한 일 / 배운 것 🖋 자료 구조 Stack, Queue 자료 구조에 대한 전반적인 정의를 공부하고 그 중 2개인 Stack, Queue를 집중적으로 공부했다. 직접 관련된 메소드를 만들어보는 시간을 가졌다. 🙏 기억할 것 🖋 자료 구조 자료의 집합으로써, 자료를 더 효율적으로 저장하고, 관리하기 위함 🖋 Stack LIFO : 후입 선출 🖋 Queue FIFO : 선입 선출 2021. 1. 20.
Stack&Queue ✅ 자료 구조(Data Structure)란? 자료 구조 자료(Data)의 집합을 의미 자료에 대한 처리를 효율적으로 수행할 수 있도록 자료를 구분하여 정의 목적 자료를 더 효율적으로 저장하고, 관리하기 위해 사용 잘 선택된 자료구조는 실행시간을 단축시켜주거나 메모리 용량의 절약을 이끌어 낼 수 있다. ✅ 스택(Stack)이란? 스택(stack)이란 간단하게 말해 쌓아올린다는 것을 의미한다. 따라서 스택 자료구조는 쌓아 올린 형태의 자료구조를 뜻한다. 특징 같은 구조와 크기의 자료를 정해진 방향으로만 쌓을 수 있고, top으로 정한 곳을 통해서만 접근할 수 있다. 즉, 자료가 들어오고 나갈 수 있는 곳이 한 곳이고, 한 번에 하나의 데이터만 처리할 수 있다. 이를 LIFO(Last In, First Ou.. 2021. 1. 20.
psuedoclassical VS class[ES6] 상속 방법 자바스크립트는 프로토타입 기반 객체지향 언어언어다. 그렇기 때문에 class라는 개념이 없어서 prototype을 기반으로 class를 흉내냈다! (ES6에서 class 문법이 추가되었지만 클래스가 아닌 프로토타입을 기반으로 한 문법) 지금까지 class를 통해 객체(인스턴스)를 만드는(흉내) 프로토타입에 대해 이해를 했다면, 오늘은 객체지향의 특징 중 하나인 클래스에서 클래스로 행해지는 '상속'에 대해 공부해보려고 한다. ✅ psuedoclassical (prototype) ES6에서 class 문법이 추가되기 전에 class를 흉내내기 위한 방법 중 하나이다. 다음 예시는 Human - Student 상속을 구현하는 과정이다. 방법 뿐만아니라, 추가적인 것들도 알아보자. 우선 복습을 해보자면, pro.. 2021. 1. 16.
TIL_210115 📝 오늘 한 일 / 배운 것 🖋 객체지향 프로그래밍과 자바스크립트 프로토타입 정리 어제 TIL을 작성하지 못했다.. 핑계긴하지만 OOP를 이해하는데 오래걸리지 않았지만, 프로토타입 개념에 대해서 이해하고 정리하는데 너무 오랜 시간이 걸렸다. 코드스테이츠 수업이 끝난 6시부터 시작을 했는데 다음날 아침 6시까지 너무 이해가 가지않았다..ㅠㅠ 하지만 오늘 드디어 이해를 할 수 있었고, 나만의 언어로 정리를 할 수 있게 되었다. 🖋 class 메서드(ES6), pseduoclassical 방법으로 상속 흉내내기 완벽한 이해와 정리가 되지 않은 상태에서 페어분과 sprint를 진행했다. 바로 클래스의 기능을 구현하는 것! 오히려 이해가 되질않아 이것저것 찾아보며 코드를 짜보니 이해가 된 것 같다..? 역시 개발.. 2021. 1. 16.
프로토타입(Prototype) 이해하기(2) 프로토타입(Prototype) 이해하기(1)에서는 목적인 프로토타입에 대해 공부하기보다 단순히 프로토타입 기반 언어인 자바스크립트가 어떻게 클래스 기능을 흉내내는지 알아봤다. 이번엔 정말로 프로토타입에 대해 알아보자! ✅ 자바스크립트의 프로토타입이란? 프로토타입에 대해 알기 전에 몇가지 정리하는 것이 필요할 것 같다. 나 같은 경우에도 이상한 말들이 자꾸 튀어나와 이해하는데 정말 많은 시간이 걸린것 같다 ㅠㅠ 밑에 글들을 보기전에 결론을 먼저 말하자면 정리 🖋 prototype 자바스크립트의 모든 객체는 자신의 부모 역할을 담당하는 객체와 연결되어 있다. 그리고 이것은 마치 객체 지향의 상속 개념과 같이 부모 객체의 프로퍼티 또는 메소드를 상속받아 사용할 수 있게 한다. 이러한 부모 객체를 prototy.. 2021. 1. 15.
프로토타입(Prototype) 이해하기(1) C++, Java와 같은 클래스 기반 객체지향 언어와 달리 자바스크립트는 프로토타입 기반 객체지향 언어다. 객체지향 프로그래밍에 대해서 미리 공부한 상태라고 가정할 것이다. 클래스 기반 객체지향 프로그래밍 언어는 객체 생성 이전에 클래스를 정의하고 이를 통해 객체(인스턴스)를 생성한다. 하지만 프로토타입 객체지향 프로그래밍 언어는 클래스라는 개념이 없다. 그럼에도 자바스크립트가 객체지향 언어인 이유는 다른 방법으로 클래스의 기능을 구현했기 때문이다. (ES6에서 class 문법이 추가되었지만 클래스가 아닌 프로토타입을 기반으로 한 문법) 그리고 클래스 기반 객체지향 프로그래밍에서 명심할 것 클래스란, 객체를 만들어 내기 위한 추상적인 개념, 설계도 혹은 틀 객체란, 소프트웨어 세계에 구현할 대상, 클래스.. 2021. 1. 15.
객체 지향 프로그래밍 (OOP) 객체 지향 프로그래밍(Object-Oriented Programming)에 대해서 공부하기 전에 알아야 할 개념들이 있다. (객체지향은 이데아론에서 시작되었다고 한다..?!) 바로 클래스(Class)와 객체(Object)다. 지금의 나로써는 명확한 정의를 내리기 어려우니 예시를 들어 정리해보려고 한다. 한 번 단순히 사과라는 것을 생각해보자. 머리속에서 정확한 색(RGB), 크기, 무게 등을 생각하지 않고 대충 사과는 어떤지만 생각한다! 그런데 우리(인간)은 위 사진을 봤을 때, 전부 사과라고 인식한다. 크기(큰지, 작은지), 색깔(진한지, 연한지), 잎의 유무 등을 신경쓰지 않고 보자마자 이건 사과다! 라고 인식할 수 있다. 왜냐하면 우리의 머리 속에는 이미 정확하진 않지만 어떠한 이상적인 사과라는 원.. 2021. 1. 14.
TIL_210113 📝 오늘 한 일 / 배운 것 🖋 Hiring Assessment 리팩토링 오늘은 프리코스에서 이머시브 과정으로 넘어가는 과정 중 하나였던 Hiring Assessment 를 리팩토링 하는 시간을 가졌다. 이번 주에 배웠던 this, 화살표 하무, destructuring 등을 활용하는 것이 목표였다. 자신만만하게 풀었던 알고리즘도 다시보니 직관적이지 않고, 더욱 줄일 수 있었다! 특히 페어분께서 많은 도움을 주셨는데, 생각의 관점을 바꿀 수 있는 좋은 기회였다. 🙏 기억할 것 🖋 Hiring Assessment 리팩토링 의미없는 단순 반복을 하지 말자! 변경 전 function test2(num) { let str = num.toString(); let result = 0; if(num < 0) { re.. 2021. 1. 13.