본문 바로가기

전체 글

(117)
Refactoring. 예시를 통해 알아보자 리팩터링이라는 책을 읽으려고 하는데, 1장에 간단한 예시와 팁들이 있어서 정리를 하고 가려고 한다. 먼저 예시 코드를 보자. import plays from "./plays.js" import invoices from "./invoices.js" function statement(invoice, plays){ let totalAmount =0 let volumeCredits = 0 let result =`청구 내역 (고객명: ${invoice.customer})\n`; const format= new Intl.NumberFormat('en-US', {style: "currency", currency: "USD", minimumFractionDigits: 2}).format for(let perf of i..
This Month. 1월 오늘은 어제의 week 복습에 이어서 이번 한 달 공부한 내용들을 돌아보자. 면접 준비한다고 쓴 것들이랑 여러 가지 글들이 너무 많아서 일단은 리스트로 보자. DOM 자바스크립트 관련 글들(실행 컨텍스트, 엔진, 히든 클래스, 이터러블,프로토타입, 클로저, 모듈 등) 타입스크립트 관련 글들( 타입스크립트에 관해, 인터페이스, 제네릭, 설정, 코드 생성 관계) 리액트 최적화 관련 훅들 ,리덕스 간단한 개념 CSR, SSR, FLUX DI, DIP개념 이번 달이 특별히 많을 수도 있다. 이전에 정리했던 글들을 블로그에 다시 쓰면서 몰아서 쓴 경향이 있다. 이걸 앞으로 어떻게 해야 될지 명확하지 않은데, 그래도 한 번씩 더 보면서 복습을 하면 그것만으로도 충분히 의미가 있다고 생각이 든다. TWIL은 미처 정..
This Week. 24 ~ 29 한 주간 정리 오늘부터 시작하는 일주일을 되돌아보는 시간. 먼저 이번 주에 공부한 내용들을 체크해 보자. FenickTree, Segment Tree 타입스크립트 제너릭, 코드 중복 슬라이딩 윈도우, 투 포인터 quick sort, merge sort 타입스크립트 설정 및 코드 생성 간단하게 펜윅트리랑 merge sort 복습하는 겸 백준 문제에서 1517 버블 소트라는 문제를 풀면서 정리를 해야겠다. 이문제가 마침 두 가지로 풀 수 있다. 먼저 펜윅트리부터 보자. 트리 크기는 세그먼트랑 다르게 입력값만큼 만들어 주면 된다. #include #define fastio ios::sync_with_stdio(0), cin.tie(0), cout.tie(0) #define endl "\n" #define pii pair #..
Essay. #1 사실 회고를 쓰려고 했는데, 무슨 말을 해야 될지 그리고 말하다 보면 별걸 다 쓸 거 같아서 간단하게 중간점검 형식으로 내 상황을 체크해 봐야겠다. 일단 TIL, Today I Learned 매일 쓰려고 하고 있는데, 가끔은 억지로 쓰는 것도 있는 거 같다. 그래도 나름 꾸준히 하고 있어서 더 지켜봐야겠다. 사실 글을 최대한 많이 써보려고 계획 중이어서 오늘 배운 것들 뿐만 아니라 이번 주, 이번 달에 공부한 것을 되돌아보는 형식으로 글을 작성하려고 계획 중이다. 뭐 매주, 매달마다 쓰면서 모든 내용을 적을 건 아니고, 복습 차원에서 적는 게 크다. 근데 굳이 왜 블로그에 적냐면, 이게 적다 보니까 약간에 강제성이 생겨서 공부하는데 도움이 되는 거 같다. 그래서 일주일 그리고 달에 적는 내용들은 복습하다..
TS. 타입스크립트 설정 관련 그리고 코드 생성과의 관계 오늘은 상당히 바쁜 하루였다. 그래서 이펙티브 타입스크립트에서 공부한 부분을 간단하게 정리하려 한다. 왔다 갔다 하면서 보고 있어서 빼먹는 부분을 오늘 간단히 정리하겠다. 타입스크립트는 설정하는 거에 따라서 완전 다른 언어가 될 수 있다. 컴파일을 할 때 설정을 하면서 컴파일해줄 수 있다. 근데 그것보다 설정 파일을 사용하는 것이 좋다고 한다. 타입스크립트 설정들은 어디서 소스 파일을 찾을지, 어떤 종류의 출력을 생성할지 제어하는 내용이 대부분이다. 그런데 언어 자체의 핵심 요소들을 제어하는 설정도 있다. 이러한 설정을 제대로 사용하려면, noImplicityAny와 strictNullChecks를 이해해야 한다. noImplicityAny는 변수들이 미리 정의된 타입을 가져야 하는지 여부를 제어한다. ..
Algo. quick sort , merge sort 간단 정리 오늘 어쩌다 보니 sort에 대해 생각할 시간을 가지게 되었다. 갑작스럽게 생각을 하려니 또 잊어버린 부분이 많아서 다시 되새기는 김에 정리하려 한다. 먼저 merge sort부터 정리해 보겠다. 병합 정렬은 기본적으로 분할 정복 방식으로 정렬을 진행 한다. 코드의 진행을 먼저 간단히 말하면 재귀적으로 계속 반씩 쪼개나 가면서 길이가 1개일 때까지 내려간다. 그 뒤 다시 올라오면서 값들을 병합하는 단계를 거친다. 여기서 시간 복잡도를 결정하는 부분은 병합하는 부분인데 병합 단계에서 최대 n번만큼 비교할 수 있다. 또한 순환 호출할 때 깊이가 반씩 나누기 때문에 logn이다. 따라서 최종적으로 nlogn이 된다고 한다. 자세한 부분은 밑에 블로그를 참고 하자. 여기서 또 내가 생각해야 될 부분은 이 병합 ..
PS. 슬라이딩 윈도우 그리고 투포인터 오늘은 투 포인터 관련 문제를 풀다가, 이전부터 정리하고 싶었던 두 가지 기법을 정리하려고 한다. 간단히 개념만 정리하고 끝내겠다. 먼저 슬라이딩 윈도우란 고정 사이즈의 윈도우가 이동하면서 윈도우 내에 있는 데이터를 이용해 문제를 풀이하는 알고리즘이다. 네트워크에서 사용되던 알고리즘을 문제 풀이에 응용한 경우라고 한다. 투 포인터랑 다른 점은 고정 사이즈의 윈도우를 사용해서 순회를 하는 방식이다. 그리고 투포인터는 보통 정렬 배열을 대상으로 하는데 슬라이딩 윈도우는 정렬 여부에 관계없이 활용된다는 차이가 있다. 그리고 투포인터는 꼭 뭐 앞에서 순차적으로 찾을 필요 없이 양쪽에서 다가와도 되고 문제마다 다르다. 물론 슬라이딩 윈도우도 다르긴 하다. 근데 일단 슬라이딩 윈도우는 사이즈를 고정한 점이 가장 큰..
TS. Generics 그리고 코드 중복에 관해 오늘은 간단하게 제네릭을 정리하려고 한다. 제너릭을 사용하는 이유는 코드의 중복을 없애는 게 가장 큰 목적이 아닐까 한다. 기본적으로 같은 기능을 하는 함수들이 다른 타입의 인자를 받게 될때, 제너릭을 사용해서 같은 함수로 처리할 수 있게 해 준다. 간단한 예제를 보자. 같은 기능을 하는 함수를 불필요하게 여러 개 만들 필요가 없다. function getNumber(value: number) { return value; } function getArray(value: string[]) { return value; } // 제네릭 기본 문법 - 함수 function getValue(value: T): T { return value; } getValue('hi').toLocaleUpperCase(); ge..