Currying과 Closure를 연관지어서 설명해주세요. currying 이란? 여러 개의 인자를 가진 함수를 호출할 경우, 파라미터의 수보다 적은 수의 파라미터를 인자로 받으면 누락된 파라미터를 인자로 받는 기법 => 함수 하나가 N개의 인자를 받는 과정을 n개의 함수로 각각의 인자를 받도록 하는 것. // curring function add(a){ console.log(`${a}`); return function(b){ console.log(`${a} + ${b}`); return a+b; } } // add(1)(2); 이때 add(1)이 선언되는 순간, 위의 함수가 return하는 익명함수는 closure가 되어서, 자신의 실행환경을 기억하는 상태로 동작하기 때문이다. 커링을 사용하면서 장점은..
코드 스플리팅 https://velog.io/@velopert/react-code-splitting 정의 우리가 js로 개발하게 되면, 기본적으로는 하나의 파일에 모든 로직들이 들어가게 된다. 그럼, 프로젝트의 규모가 커질수록 js 파일 용량도 커질 것이다. (특히 SPA) 용량이 커지면, 인터넷이 느린 환경에서는 페이지 로딩 속도가 느려질 것이다. 코드 스플리팅을 하게되면, 지금 당장 필요한 코드가 아니라면 따로 분리시켜서, 나중에 필요할 때 불러와서 사용할 수 있다. 이를 통해 페이지의 로딩 속도를 개선할 수 있다. 실습 CRA로 프로젝트를 만든다. src 디렉토리에 아래와 같은 notify함수를 만든다. // src/notify.js const notify = () => { window.alert(..
자바스크립트는 왜 부동소수점의 정확성이 떨어질까? 0.1 + 0.2 === 0.3 // false 왜? 자바스크립트 숫자는 항상 64bit 이다. 자바스크립트는 정수/짧은/긴/부동소수점 등의 다른 유형을 정의하지 않는다. C는 short, int, float, double 등 다양하지만 자바스크립트는 무조건 number이다. (BigInteger도 있당) 그리고 이건든 국제 표준인 IEEE 754에 따라서 계산되고 정의되어지는데, 이것은 64bit일때 15자리의 정확도까지 보장한다. 10진수 값을 bit로 저장하려고 2진수로 바꾸게되는데 0.1, 0.2같은 부동 소수점은 무한 소수가 발생하고 이는 반올림을 통해 근사값이 저장되게 된다. 계산 이를 해결하기 위해서는 수학관련 라이브러리 혹은 정수로 바꿔서 ..
Typescript 에서 enum, const enum, union types enum vs const enum 상세 비교 feat. 역맵핑 typescript as const 란? react에서 rendering이 2번되는 이유는 무엇인가? (Strict Mode) React Route의 render와 component의 차이점은? Redux-toolkit의 장단점은?
https://overreacted.io/ko/how-are-function-components-different-from-classes/ 의 요약본이자 뇌피셜이 들어간 글입니다. 기존 react에서는 class 컴포넌트가 function 컴포넌트 보다 state등의 더 많은 기능을 제공한다고 믿어왔다. 하지만 Hook의 등장으로 이 특징은 이제 크게 와닿지 않게 되었다. 둘 중에 성능이 뭐가 좋으냐, 많은 실험이 있었으나 유의미한 결과를 도출해내지는 못했다. 그럼 도대체 무엇이 다른것인가. 함수형 컴포넌트는 렌더링된 값들을 고정시킨다. 위 코드는 아주 유명한 예제이다. https://codesandbox.io/s/pjqnl16lm7 겉으로는 함수 컴포넌트, 클래스 컴포넌트가 같은 동작을 하는 것처럼 보..
타입스크립트에서 interface를 정의할때 I-prefix를 붙이는 것은 권장되지 않는다. 인터넷을 뒤져보면서 다양한 헝가리안 표기법을 지양하는 이유에 대해서 모아보았다. 1. 헝가리안 표기법의 시대는 끝났다. 원래 I-prefix를 사용한 이유는 네이밍만 보고 그 구문의 역할을 바로 알아챌 수 있었다는 점이다. 예를 들어서, I는 interface C는 클래스 A는 추상 클래스 S는 문자열 c는 const 변수 i는 정수형 변수 에 해당하는 의미를 가지고 있다. 즉, 마우스를 hover안하고 이름만 보고도 타입의 정보를 알아챌 수 있는 것이다! 하지만 변수나 함수인자의 이름을 기억하기가 힘들어지고, 데이터 타입이 바뀌면 이름도 바꿔주어야 한다. 그 외에도 여기서 언급되지 않은 장/단점이 매우 많이 존..
- 리팩터링 2판 중 리팩터링하면 프로그램 성능이 느려질까봐 걱정하는 사람이 많다. 나는 실제로 소프트웨어를 이해하기 쉽게 만들기 위해서 속도가 느려지는 방향으로 수정하는 경우가 많다. 직관적인 설계 vs 성능 은 중요한 주제이다. 내가 성능을 무시하는 이유는 설계의 순수성을 우선시하거나 조만간 더 빠른 하드웨어가 나오리라 믿기 때문이 아니다. 예전에도 너무 느린 소프트웨어는 고객이 수용해주지 않았고 빠른 하드웨어가 등장하더라도 성능 기준이 낮아지는 경우는 드물었다. 리팩터링하면 소프트웨어가 느려질 수도 있는 건 사실이다. 하지만 그와 동시에 성능을 튜닝하기는 더 쉬워진다. 하드 리얼타임 시스템을 제외한 소프트웨어를 빠르게 만드는 비결은, 먼저 튜닝하기 쉽게 만들고 나서 원하는 속도가 나게끔 튜닝하는 것..
- 리팩터링 2판 중 리팩터링은 소프트웨어 아키텍처를 바라보는 관점을 완전히 바꿔놓았다. 내가 프로그래밍을 시작한지 얼마 되지 않은 시절에는 코딩을 시작하기 전에 소프트웨어 설계와 아키텍처를 어느정도, 심지어 거의 완료해야한다고 배웠다. 일단 코드로 작성된 뒤로는 아키텍처를 바꿀 수 없었고, 부주의로 인해 부패할 일만 남았다고 여기곤 했다. 리팩터링은 이런 관점을 크게 바꿔놓았다. 그래서 나는 수년 동안 운영되던 소프트웨어라도 아키텍쳐를 대폭 변경할 수 있었다. 이 책의 부제처럼 리팩터링으로 기존 코드의 설계를 개선할 수 있다. 하지만 앞에서 말했듯이 레거시 코드는 변경하기 어려울 때가 많다. 특히, 탄탄한 테스트가 뒷받침해주지 못하면 더더욱 어렵다. 리팩터링이 아키텍처에 미치는 실질적인 효과는 요구사항..