🔥목차🔥
1. 자료구조 [ Queue,Steck ]
2. JavaScript Prototype
📖오늘의 TIL 시작!📖
자료구조 [ Queue,Steck ]
- Queue
- 먼저 집어넣은 자료가 먼저 나오는 (First In First Out) 구조로 저장하는 형식을 말함
- Steck의 반대개념
- Queue는 put(insert) , get(delete)를 이용한다
- front(head)와 rear(tail)은 데이터의 위치를 가르킨다
- front는 데이터를 get 할 수 있는 위치를 의미
- rear은 데이터를 put 할 수 있는 위치를 의미
- Queue가 꽉차서 자료를 넣을수 없는 경우를 Overflow 라고 함
- Queue가 비어있어서 자료를 꺼낼 수 없는 경우를 Underflow 라고 함
- Queue의 사용 사례
- 프로세스 스케쥴링
- 대부분의 입출력
- 프린터 대기열
- 네트워크 패킷 처리
- 게임 대기열
- 대부분 순차대로 진행하는 업무에 활용성이 높아보임
- Queue의 대표적인 함수들
- Enqueue
- Dequeue
- 그 외에 Size를 확인하는 함수, Queue가 비어있는지 확인하는 함수 등등이 있음
- Queue의 종류
- 선형
- 막대 모양으로 되어있는 Queue
- 크기가 제한되어있고 빈 공간을 사용하려면 모든 자료를 꺼내거나 자료를 한 칸씩 옮겨야 한다는 단점이 있음
- 환형(원형)
- 선형 Queue의 문제점(배열로 Queue를 선언할시 Queue의 삭제와 생성이 게속 일어났을때, 마지막 배열에 도달 후 실제로는 데이터 공간이 남아있지만 Overflow가 발생)을 보완 한것이 환영 Queue임
- front가 큐의 끝에 닿으면 큐의 맨 앞으로 자료를 보내어 원형으로 연결 하는 방식이다.
- 원형큐는 맥시멈 사이즈로 인해 오버플로우가 발생 될 수 있음
- Steck
- 먼저 들어온 데이터가 나중에 나오는 ( First In Last Out) 구조로 저장하는 형식을 말함
- Queue 의 반대개념
- 데이터가 쌓여가는 형식
- 한쪽 끝에서만 자료를 넣거나 뺄 수 있는 선형구조로 되어있음
- Steck은 push와 pop을 이용한다
- 꺼내지는 자료는 가장 최근에 push한 자료부터 나오게 된다
- Steck 의 명령어
- S.top()
- Steck의 가장 위에 데이터를 반환한다. 만약 Steck이 비었다면 이 연산은 정의불가 상태
- S.pop()
- Steck의 가장 윗 데이터를 삭제한다. Steck이 비었다면 연산 정의불가 상태.
- S.push()
- Steck의 가장 위 데이터로 top이 가리키는 자리 위에
(top = top + 1) 메모리를 생성, 데이터 x를 넣는다.
- S.empty()
- Steck이 비었다면 1을 반환하고,그렇지 않다면 0을 반환한다.
JavaScript Prototype
- JavaScript는 클래스라는 개념이 없어서 기존의 객체를 복사(cloning)하여 새로운 객체를 생성하는 프로토타입 기반의 언어임
- Class가 없음으로 인해 기본적으로 상속에대한 기능이 없음
- 그래서 Prototype을 기반으로 상속을 "흉내"내도록 구현해서 사용함
- 최근에는 ECMA6표준에서 Class문법이 추가되었다곤 하나 JavaScript가 Class기반으로 바뀌었다는건 아님
- 그래서 어디에 사용하는지?
- 위에 적혀있는 것처럼 "흉내"낼 수 있는 방법이 있다
- 함수(function)와 new를 통해서 가능하다
- 함수의 프로퍼티의 빈 Object가 어딘가에 존재하고 함수로부터
생성된 객체들은 어딘가 존재하는 Object에 들어가있는 값을 모두 사용이 가능하다
- 어딘가에 존재하는 Object에 들어가있는 모든값을 빼서 사용할수있다 라고 이해했음 ( 조금더 확인이 필요 )
- Prototype Link와 Prototype Object
- JavaScript에는 Prototype Link와 Prototype Object라는 것이 존재합니다
- Prototype Object
-
객체는 언제나 함수로 생성됨
-
일반적인 객체를 코드로 예를 들어보자
var obj = {};
-
해당 코드를 자세히 보면
var obj = new Object();
- 둘이 같은 의미를 가지는 코드임
- 위 코드에서 Object가 자바스크립트에서 기본적으로 제공하는 "함수"임
- 기본적 Object와 마찬가지로 Function,Array도 모두 함수로 정의 되어있음
그리고 함수가 정의될때는 2가지 일이 동시에 이루어짐
- 첫번째
- 해당 함수에 Constructor(생성자)자격 부여
- Constructor 자격 부여시 new를 통해 객체를 만들어 낼 수 있게 됨
- 이게 함수만 new키워드를 사용 할 수 있는 이유
- 두번째
- 해당 함수의 Prototype Object 생성 및 연결
- 함수를 정의하면 함수만 생성되는게 아니라 Prototype Object도 같이 생성됨
- 그리고 생성된 함수는 prototype이라는 속성을 통해 Prototype Object에 접근할 수 있음
- Prototype Object는 일반적인 객체와 같으며 기본 속성으로 constructor와 __proto__를 가지고 있음
- Prototype Object는 일반적인 객체이므로 속성을 마음대로 추가/삭제 할 수 있음
- Prototype Link
- prototype 속성은 함수만 가지고있던 것과는 달리 __proto__속성은 모든 객체가 빠짐없이 가지고있는 속성임
- __Proto__는 객체가 생성될 때 조상이였던 함수의 Prototype Object를 가르킴
- 객체가 prototype Object를 직접 가지고있기 않기때문에 속성을 찾을때까지 상위 프로토타입을 검색함
- 최상위인 Object의 Prototype Object까지 도달했는데도 못찾았을 경우엔 undefined를 리턴함
- __proto__속성을 통해 상위 프로토 타입과 연결되어있는 형태를 Prototype Chain이라고 함
- 이런 프로토타입 체인구조 때문에 모든객체는 Object의 자식이라고 불림
Object Prototype Object에 있는 모든 속성을 사용 가능함
- 📖Prototype에 대한 오늘의 정리 및 마무리📖
- 이전에 Swift에서는 Class라는 개념이 있어서 직접적인 Object의 상속이 가능했었는데 JavaScript는 상속의 개념이아니라 지정해서 사용하는 프로토 타입이 있다는게 조금 신기했다
- 원리에 대해서는 알아야겠지만 직접적인 라이브러리를 만들지 않는이상 내가 직접 프로토타입을 만드는건 지양해야할 부분인거같다
- 만약 내가 이해한게 맞다면 함수를 만들어 Object를 프로토타입 지정을해서 객체로 하여금 꺼내서 언제든지 사용할 수 있게 하는 기능인거같다
- Prototype도 객채지향 언어의 한 갈래라고 하니 조금더 연구하고 공부 해야할 부분인거같다.
- 오늘은 주제들이 너무 방대하다 보니 끝내는데 시간을 좀 많이 사용해서 원래 오늘 하려던 주제를 다 끝내지 못한게 조금 아쉽다
- 내일은 꼭 이번주에 구상했던 주제들을 모두 끝내는걸 목표로 해야겠다 🔥화이팅!!🔥