-
Notifications
You must be signed in to change notification settings - Fork 13
Data Structures in JavaScript
비즈니스 로직이 백엔드에서 프론트엔드로 넘어감에 따라 프론트엔지니어의 전문지식이 더욱 중요해졌습니다. 프론트엔드 개발자는 생산적으로 리액트와 같은 뷰 라이브러리를 사용하고 있습니다. 뷰라이브러리에서 데이터를 관리하기 위한 Redux와 같은 상태 관리 라이브러리를 사용하고 있습니다. 리액트와 리덕스는 UI 업데이트가 데이터 변경에 반응하는 reactive 프로그래밍
패러다임입니다.백엔드는 점점 API 서버로써의 역할을 하고 업데이트 할 때만 엔드포인트를 제공합니다. 실제로 백엔드는 데이터베이스를 프론트엔드로 "전달"하여 프론트엔드 엔지니어가 모든 컨트롤러 로직을 처리할 것으로 예상합니다. 마이크로서비스 및 GraphQL의 인기가 높아짐에 따라 이러한 추세가 증가하고 있습니다.
이제 프론트엔드 엔지니어는 HTML과 CSS를 심미적으로 이해할 뿐만 아니라 자바스크립트도 마스터 해야합니다. 클라이언트의 데이터 저장소는 서버의 데이터베이스에 대한 "복제본"이고 관용적인 데이터 구조에 대한 깊은 지식이 중요합니다. 실제로 엔지니어 경험의 수준은 특정 데이터 구조를 사용한 시기와 사용한 이유를 구별할 수 있는 능력에서 유추할 수 있습니다.
나쁜 프로그래머는 코드에 대해 걱정합니다. 훌륭한 프로그래머는 데이터 구조와 관계에 대해 걱정합니다. - 리눅스 토발즈, 리눅스와 깃 창시자
높은 수준에서 기본적으로 세가지 유형의 데이터 구조가 있습니다. 스택과 큐는 항목을 삽입하고 제거하는 방법만 다르고 배열과 유사한 구조 입니다. 링크드리스트(연결리스트), 트리, 그리고 그래프는 다른 노드에 대한 참조를 유지하는 노드로 구조를 가집니다.
일부 의역이 들어간 경우도 있으므로 해당 원문의 내용과 조금 다를 수 있습니다.
문제가 될 소지가 있다거나 혹은 수정이 필요한 사항이 있다면 있다면 issues 보내주세요.
기술문서
- 호출스택
- 원시자료형
- 값타입과 참조타입
- 명시적 변환, 암시적 변환, Nominal, 구조화, 덕 타이핑
- == vs === vs typeof
- 함수 범위, 블록 범위, 렉시컬(lexical) 범위
- 식(expression) vs 문(statement)
- IIFF, Modules, Namespaces
- 메세지큐와 이벤트루프
- setTimeout, setInterval, requestAnimationFrame
- 자바스크립트 엔진
- 비트 연산자, 형식화 배열, 버퍼(배열)
- DOM과 Layout Trees
- 팩토리와 클래스
- this, call, apply, bind
- new, 생성자, instanceof, 인스턴스
- 프로토타입의 상속과 체인
- Object.create와 Object.assign
- map, reduce, filter
- 순수함수, 부수효과, 상태변이
- Closure
- 고차함수
- 재귀
- 컬렉션과 생성기
- Promise
- async, await
- 자료구조
- 함수 성능과 빅 오 표기법
- 알고리즘
- 상속, 다형성, 코드의 재사용성
- 설계패턴
- 부분 어플리케이션, 커링, Compose, Pipe
- 클린코드