Type<Challenge[]> #Easy
·
메모
Pick type MyPick = { [entry in K]: T[entry] } K를 T의 키 집합의 부분집합으로 좁히고 해당 키와 타입을 새로운 오브젝트 타입. Readonly type MyReadonly = { readonly [K in keyof T]: T[K] } T의 키 집합에 대해 readonly를 적용한다. 이때 T[K]은 readonly의 대상이 아니기 때문에 DeepReadonly가 아니다. Tuple to Object type TupleToObject = { [P in T[number]]: P } readonly 배열(readonly any[]) 타입으로 한정된 T타입의 모든 배열 요소들(T[number])를 key와 value로 갖는 오브젝트 타입. First of Array con..
프로젝트 회고 #작성중
·
프로젝트/개발
최근 주어진 요구사항에 맞게 구현하는 프로젝트를 하나 진행했는데, 그동안 잘 만들어진 프레임워크에 익숙해져 뭔가 착각을 하고 있었던 것 같다. 또 타입스크립트를 사용하면서 단순한 형태의 타입 시스템만 이용해 어중간한 코드를 작성하고 있었다는 생각이 들었다. 그래서 이 글은 이펙티브 타입스크립트를 읽으며 타입스크립트를 어떻게 더 타입스크립트답게 사용할 수 있을지 고민? 회고? 하는 글이다. 아이템 33. string 타입보다 더 구체적인 타입 사용하기 type RecordingType = 'studio' | 'live'; // OR enum RecordingType { STUDIO = 'studio', LIVE = 'live', } 타입스크립트에서 문자열 타입인 string 외에도 유니온으로 문자열 리터럴..
Typescript로 구현한 Linked list
·
메모
타입스크립트 숙련도를 높이기 위해 자료구조/알고리즘을 구현하고 있습니다. 더 좋은 방법 또는 틀린 부분을 알려주시면 진심으로 감사드립니다!! Linked list(이하, 링크드 리스트)는 대표적인 자료구조이며 다른 알고리즘(스택, 큐,...)에도 유용하게 활용되는 자료구조이다. 배열처럼 고정된 크기가 아닌 동적인 크기를 가지며 배열에 비해서 삽입/삭제에 큰 연산이 필요 없지만 탐색의 경우 \(O(N)\) 시간 복잡도를 가지는 알고리즘이다. 크기를 알 수 없고, 탐색보단 삽입 삭제가 자주 일어나는 경우 유용한 알고리즘이다. class LinkedListNode { val: T; next: LinkedListNode | null; prev: LinkedListNode | null; constructor(va..
JS의 메모리관리
·
메모
자바스크립트의 메모리 관리 C언어 같은 저수준 언어에서는 개발자가 메모리를 원하는 시점에 할당하고 또 반환할 수 있다. 하지만 이 방식에는 실수가 존재할 경우 치명적인 문제가 발생하기 때문에 메모리를 잘 관리하는 것은 C언어 같은 저수준 언어 개발자들의 실력과도 관계있다고 생각된다. 반면에 JS는 JS를 사용하지 않는 개발자도 가비지 컬렉터가 존재한다는 것을 알고 있다. 가비지 컬렉터는 메모리 관리를 개발자가 아닌 언어 차원에서 관리해 개발자는 비즈니스 로직에 집중할 수 있도록 도와준다. 하지만 모든 CS 분야가 그렇듯 은 총알은 존재하지 않으며 항상 적절한 trade-off를 감수해야만 한다. 가비지 컬렉션은 치명적인 결과를 낳는 메모리 누수를 막지만, 누수될 메모리를 항상 추적하고 제거하는 등 컴퓨터..
정규화
·
독서/데이터베이스
Every entity in your database needs to have a single theme - Edgar F. Codd 정규화는 함수적 종속성의 특징에 따라 테이블을 분리해 나가 데이터 구조의 안정성을 최대화시키고, 중복을 배제하여 삽입, 삭제, 갱신 이상의 발생을 방지한다. 따라서 모든 Entity는 하나의 주제로 구성되도록 구성되어야 한다. 제1 정규형 (1NF) 릴레이션에 속한 모든 도메인은 원자성을 가진다. 하지만 원자성이란 모호함을 구분하기 위해 크리스토퍼 데이트는 다음과 같은 1 정규형의 정의를 가진다. 열에는 위-아래의 순서가 없다. 행에는 좌-우의 순서가 없다. 중복되는 열이 없다. 모든 열과 행의 중복지점에는 (열과 행의) 해당되는 분야에서 한 개의 값을 가진다. 모든 행은..
백준 1965 상자넣기
·
독서/알고리즘
data class Matryoshka constructor(private val size: Int) { fun lessThen(other: Matryoshka): Boolean { return this.size < other.size } } class MatryoshkaLine constructor(private val nums: Array) { fun solve(): Int { val dp = Array(nums.size) { 0 } var result = 0 for (i in nums.indices) { val l = getLongest(i, dp) dp[i] = l + 1; result = result.coerceAtLeast(dp[i]) } return result } private fun ge..