처음부터 차근차근

[TIL - 231113] 코어자바스크립트 Prototype, Heap 구현, 채용 과제 진행 본문

TIL

[TIL - 231113] 코어자바스크립트 Prototype, Heap 구현, 채용 과제 진행

HangJu_95 2023. 11. 13. 23:41
728x90

오늘 한 일

  • 저번주 동안 Infograb 채용 과제를 진행했다.
  • Heap 구현
  • 코어자바스크립트 Prototype, class

Infograb 채용 과제

  • 저번주 동안 infograb 채용 과제를 진행
  • 로그인, 로그아웃 기능이였으며, HTML 페이지를 리턴하는 과제
  • Passport를 처음 사용해봤으며, 이를 통해 NestJS가 어떻게 구성되어있는지 조금 더 자세히 알게 됬다.

저번주동안 바빠서 TIL을 적지 못했다.

채용 관련 Test 과제와 발표 준비로 인해 바빠서 적지 못한 점이 아쉬웠다.

Test의 내용은 간단하였다.

  • Login, Logout이 되는 서버 구현
  • 그 외 모든것이 자유
  • Passport-local, Passport-JWT를 구현한 로그인, 로그아웃 기능 구현

나는 Passport를 사용해 본 적이 없기 때문에, 이를 구현하기에는 쉽지 않았다.

하지만 Fastcampus와 NestJS 공식 문서를 통해 알기 쉬웠으며, 이를 통해 빠르게 구현했지만

강의 준비가 문제였다.

Passport와 NestJS 모듈이 어떻게 서로 유기적으로 연결되는지 공부하였으며, 또한

NestJS LifeCycle을 구현할 줄 알아야 했기 때문에, 이 또한 어려운 점이 있었다.

발표는 Notion을 통해 진행하였으며, 면접은 1시간 내외라고 했지만 1시간 반 정도 진행하였다.

면접 때 아쉬웠던 점으로는

  • ORM 사용 시 n+1 문제에 대하여 아는가?
  • REST API 사용 시 Overfetch, Underfetch 문제
  • RESTful 한 API 설계 시 설계 방법
  • NestJS 모듈

을 설명하지 못한 점이 아쉬웠다.

또한 이번주 내로 NestJS Lifecycle과 Request LifeCycle, 그리고 그 내부 구성도 정리할 예정이다.

Passport 또한 정리할 예정

Heap 구현

  • Heap을 구현하였다.
  • Class를 통해 구현
Heap은 여러 개의 값 중에 가장 크거나 가장 작은 값을 빠르게 찾기 위해 만든 완전 이진트리를 의미합니다. 완전 이진트리의 일종으로 우선순위 큐를 위하여 만들어진 자료구조입니다.
힙은 일종의 반 정렬 상태이며, 힙 트리에서는 중복된 값을 허용합니다.
이진탐색트리와의 차이점으로는 이진 탐색 트리는 탐색을 쉽게 하기 위해 왼쪽이 더 작고 오른쪽이 더 큰 값으로 꼭 구성되어야 하지만 힙은 그렇지 않습니다.
힙의 시간복잡도는 최대 혹은 최소값을 참조할 경우 O(1)이 걸리며, 탐색은 O(n), 삽입 / 삭제는 O(logN)이 걸립니다.

Heap을 실제로 구현했지만, 프로그래머스 코딩테스트 Lv2는 통과하지 못했다.

내일 아침에 다시 해볼 예정

코어 자바스크립트 Prototype, Class

  • Prototype과 Class를 정리했다.
  • Class는 기존에 있던 정리 내용에 추가하는 형태로 진행하였으며, 추후 Deep Dive를 통해 다시 정리할 예정
  • Prototype은 자바스크립트의 기초적인 내용으로, 필수적으로 공부해야 한다.
Prototype을 번역해보면 시제품 이라는 뜻입니다.
클래스 기반 언어는 클래스에서 상속을 기반으로 사용하지만, 프로토타입 기반 언어는 어떤 객체를 시제품, 원형으로 삼고 이를 복제함으로써 상속과 비슷한 효과를 얻습니다.
즉, 자바스크립트 객체가 다른 객체로부터 메서드와 속성을 상속받는 메커니즘을 의미합니다.
어떠한 생성자 함수를 통해 인스턴스를 만들어내면, proto라는 프로퍼티가 자동으로 부여되는데, 이 프로퍼티는 Constructor의 프로퍼티를 참조합니다. 이를 통해 인스턴스는 Constructor의 프로퍼티에 접근하여 prototype의 메서드나 속성을 사용할 수 있습니다.
여기서 프로토타입 체인은 어떤 데이터의 proto 내부에 다시 proto 프로퍼티가 연쇄적으로 이어진 것을 의미하며, 프로토타입 체이닝은 프로토타입 체인을 따라가며 메서드를 검색하는 것을 의미합니다.