데이터 구조 API , JavaScript 데이터 구조와 관련된 API에 대한 간략한 개요입니다.

6244 단어
두 달 동안의 데이터 구조와 나는 완전히 길을 잃었고, 나는 ADHD를 가지고 있고 이것이 이것을 배울 수 있는 유일한 방법입니다(쓰기).

어쨌든 🤭



🤗 I'm a straight up beginner and if I lie in this " article " fill free to correct me.



leeeeet gooooo 🦸‍♂️

🦸 데이터 구조는 작업에 적합한 도구를 선택하는 것입니다. 데이터를 순서대로 저장해야 합니까, 아니면 저장하고 빠르게 검색할 수만 있으면 됩니까? 사용 사례에서 더 중요한 것은 데이터 구조가 얼마나 빨리 수행되는지 또는 얼마나 많은 메모리를 차지합니까? 서로 다른 데이터 구조에는 모두 장점, 단점 및 사용 사례가 있으며, 이것이 데이터 구조가 서로 다른 이유입니다!

🤔Consider the Array in JavaScript. It’s a really great data structure for storing ordered data because you can retrieve elements by index number. If you want the first element of an array, all you need to do is fetch it with index 0: arrayName[0]. It also provides all sorts of helpful methods for manipulating elements, such as .push() , .pop() , .sort() , and more. However, if you want to find out if a particular element exists in an array, you may need to iterate through the entire array.

🦸 What if I asked you to keep track of a series of numbers as I gave them to you, and then asked at the end whether I’d given you a particular number, you could probably do that in your memory. But if I asked you to do that in a computer program, you’d have to make choices about how to store the data. Let’s look at two possibilities of how we’d build storeNumber() and doYouHaveThisNumber() functions. Given the following list of numbers:


1, 250, -42, 0.4, 17

How might you store these numbers if I gave you each at a time? You might use an array:



const listOfNumbers = [];
const storeNumber = num => listOfNumbers.push(num);
const doYouHaveThisNumber = num => listOfNumbers.includes(num);


In this program, storeNumber() adds a number to the array, and doYouHaveThisNumber() returns true if that number exists in the array, and false otherwise. Looks pretty good, but what if you had 10000000 numbers? doYouHaveThisNumber() might start getting pretty slow, since Array.prototype.includes() iterates through the entire array until it finds the input value.

Let’s try using another built-in data type in JavaScript, the Object. Since all we want to keep track of is whether we received a particular number, we can just store those numbers in an object, and set their values to true if we received them:



const receivedNumbers = {};
const storeNumber = num => receivedNumbers[num] = true;
const doYouHaveThisNumber = num => receivedNumbers[num] === true;


In this case, we’ll have the same result on the outside, but because retrieving a value from an object is much faster than iterating through an array, the overall result will be faster.

In both cases, the public API of the code, meaning the parts of the code that we want the end-user to interact with, remained the same: we had two functions, storeNumber() and doYouHaveThisNumber(). The underlying implementation, or the way the functionality was actually achieved, is what altered.



-

하지만 Wth가 API인가요?

API is an acronym for application programming interface. An API allows end-users to access properties and methods of data structures easily and without needing to do the “behind the scenes” work.



예를 들어 배열의 끝에 새 요소를 추가하려는 경우 전체 배열을 반복하면서 요소가 몇 개인지 세고 새 값과 동일하게 myArray[currentCount + 1]를 설정할 필요가 없습니다. 대신 추가하려는 값으로 .push()를 호출하면 됩니다. JavaScript 프로그래머는 실제로 .push() 요소를 사용하기 위해 배열 끝에 요소를 추가한 방법에 대한 실제 전략이나 기본 구현을 알 필요가 없습니다.

배열의 API는 배열의 시작과 끝 부분에 요소를 추가하고 제거하는 것부터 각 요소에 대해 함수를 호출하는 반복자 메서드에 이르기까지 많은 유용한 기능을 제공합니다. 그러나 숫자 배열에서 가장 작은 숫자를 찾으려면 해당 기능을 직접 구현해야 합니다.

고유한 API 만들기

As you build your own data structures, you will implement the functionality to create public APIs. As in the example of storeNumber() and doYouHaveThisNumber(), the same public #API can be implemented in different ways, so it’s important to think about the advantages and disadvantages of different implementations.



#API는 최종 사용자에게 보내는 메시지와 같습니다. 일부 언어에는 #public#(어디서나 호출할 수 있음) 또는 #private #(클래스 내에서만 호출할 수 있음)인 메서드 또는 필드를 가질 수 있는 클래스가 있습니다. 공개 메서드는 해당 클래스의 최종 사용자가 호출할 수 있는 메서드이고 #private 메서드는 클래스 자체에서만 사용됩니다. #JavaScript는 이 개념을 실제로 지원하지 않으므로 #public이 아닌 속성은 종종 밑줄 _이 앞에 옵니다. 제한된 API를 사용하여 데이터 구조를 구축하려는 예를 살펴보겠습니다.

스택은 스택의 "상단"에서만 데이터를 추가(푸시)하거나 제거(팝)할 수 있는 데이터 구조입니다. 배열에 이미 .push().pop() 메서드가 있기 때문에 배열을 스택으로 사용할 수 있습니다! 그러나 배열을 사용하면 시작 부분에 요소를 추가하거나 인덱스로 요소에 무작위로 액세스할 수도 있습니다.

지금 당장 스택 데이터 구조의 모든 내용을 다루지는 않겠지만 공개 API와 구현을 비교하기 위해 빠른 사용자 정의 스택 클래스를 빌드해 보겠습니다.

class Stack {
  constructor() {
    this._array = [];
  }
}


스택에서 어레이 자체는 _array로 저장되므로 스택을 의도한 대로 사용하려면 직접 액세스할 필요가 없어야 한다는 신호입니다. 거기에서 .push().pop() 메서드를 구현할 수 있습니다.

class Stack {
  constructor() {
    this._array = [];
  }

  push(newValue) {
    this._array.push(newValue);
  }

  pop() {
    return this._array.pop();
  }
}


이제 기본 데이터와의 직접적인 상호 작용을 .push().pop() 로 제한하는 스택 데이터 구조를 만들었습니다. 개발자는 여전히 기본 배열에 액세스하여 다른 조작을 수행할 수 있습니다.

const stack = new Stack();
stack._array.unshift('value');


그러나 그들은 Stack 클래스의 의도된 동작을 깨뜨릴 것입니다. 공개 API의 요점은 다른 최종 사용자에게 기능을 제공한다는 것입니다. 누군가 프로그램에서 Stack 클래스를 사용하고 있다면 기본 구현을 완전히 변경할 수 있으며 최종 사용자 API가 동일하게 유지되는 한 프로그램은 계속 작동해야 합니다.

자신만의 클래스와 데이터 구조를 구축할 때 구현 #(이 작업을 수행하기 위해 내부적으로 필요한 것)과 외부 API #(사용자가 실제로 어떻게 상호 작용해야 합니까?) 간의 이러한 차이를 염두에 두는 것이 중요합니다.

좋은 웹페이지 즐겨찾기