컴퓨터언어(271)
-
[Hash Table] 배열과 달리 비연속적인 공간에 데이터를 저장
배열이 데이터를 메모리에 연속으로 따닥따닥 보관했다면, 해시테이블은 메모리 이곳저곳에 랜덤으로 자료를 보관한다. 해시테이블은 언어에 따라 명칭이 다르지만, 모두 가지고 있는 중요한 자료구조다. 해시테이블은 key-value 쌍으로 이루어져 있는데, 여기서의 key는 배열에서 숫자 인덱스 역할을 한다. 배열은 데이터들이 0번칸부터 차례로 존재했기 때문에, 맨뒤 원소를 제외한 데이터의 추가/삭제를 하려면 인덱스 전체를 다시 싹 뜯어고쳐야하므로 O(n)의 시간이 소요됐다. 하지만 해시테이블은 key를 Hash Function에 넣어서 나온 해시를 메모리 주소로 하는 장소에 데이터를 보관하기 때문에, 주소의 중복만 일어나지 않는다면 O(1)의 시간복잡도를 가진다. 다시 말해, 같은 key값은 언제나 같은 해시를..
2020.05.22 -
[배열] string 거꾸로 출력하기
function reverse(str){ if (!str || str.length=0; i--) { go += str[i] } return go } reverse("Hi My Name Is John") const reverse2 = str => [...str].reverse().join("") reverse2("Even more concise")
2020.05.21 -
[Array - VanillaJS] 배열 만들어보기
class myArray { constructor() { this.length = 0; this.data = {}; } get(index) { return this.data[index] } push(item) { this.data[this.length] = item; this.length++; } pop() { const data = this.data[this.length-1]; delete this.data[this.length-1]; this.length--; return data; } delete(index) { const item = this.data[index]; this.shiftItems(index); } shiftItems(index) { for (let i=index; i
2020.05.21 -
Context, Instantiation
Context : 문학에서는 "문맥"이라면, 프로그래밍에서는 현재 이 오브젝트가 document상 어느 위치에 있는지 알려준다. this 키워드 사용. 만약 어떤 함수가 {} 객체 내 속성으로 정의되어 있고 그 함수 내에서 this를 사용한다면, 해당 this는 객체 내 함수만을 가리킨다. const obj = { myFunc: function () { console.log(this); } }; Instantiation : 클래스(Constructor Function)를 정의하고 해당 속성과 메서드를 가지는 객체들을 인스턴스화하는 것. new 키워드 사용. 클래스는 extends로 상속이 가능하며, 상속시에는 반드시 super(인자들) 메서드를 먼저 사용한 후에 오버라이딩 또는 커스터마이징해야 한다. c..
2020.05.21 -
Primitive Type, Reference Type
Primitive Type : JavaScript가 미리 만든 내장된 자료형 (String, Number, Boolean, null, undefined) Reference Type : 개발자가 정의한 자료형 (Array, Object) 변수에 Reference Type을 새로 선언할 때마다(우변에 새로운 {} 또는 []의 등장) 서로 다른 메모리에 할당된다. 단, 이미 하나의 Reference Type을 담고 있는 변수 자체를 다른 변수에 대입할 때는 서로 같은 메모리를 가리킨다.
2020.05.21 -
[Array] 배열, 정적배열, 동적배열
배열 : 연속된 메모리 공간에 같은 자료형의 데이터를 저장하는 방식. "인덱스"로 관리하기 때문에 다음과 같은 특징이 있다. 탐색 : 유리 O(1) 맨 마지막 위치에 삽입: 정적배열=>유리 O(1) / 동적배열에서메모리초과시=>불리 O(n) 맨 마지막 위치의 원소 삭제: 유리 O(1) 업데이트(원하는 위치에 삽입/삭제) : 불리 O(n) Static Array Dynamic Array 특징 배열을 정의할 때부터 길이를 정하기 때문에 고정됨 개발자가 메모리 관리할 수 있음 길이를 초과하게 되면 할당할 메모리를 새로 늘리고 이전 정보를 복붙해서 이어나감(보통 기존 크기의 2배로 옮김) 길이변화에 유연하지만, 메모리 관리에 소홀함 언어 저레벨 언어(C++) 고레벨 언어(Python-List, JS-Array,..
2020.05.21