분류 전체보기 (180) 썸네일형 리스트형 엘레강트 오브젝트 [2장 - (2)] ⌗ 엘레강트 오브젝트 책을 리뷰해보도록 하겠습니다. 책의 내용은 다양한 언어로 되어있지만, 저는 예시 코드로 Typescript 를 사용해 제 사족을 조금씩 붙일 예정입니다. 메서드 이름을 신중하게 선택하세요 네이밍.. 항상 개발 시간 중 상당한 시간을 잡아 먹는 부분입니다. 책의 저자가 얘기하는 경험에 의한 가장 간단한 법칙은 빌더 이름은 명사로, 조정자의 이름은 동사로 짓는 것입니다. 빌더는 뭔가를 만들고 새로운 객체를 반환하는 메서드를 가리키며, 항상 뭔가를 반환합니다. pow(base: number, power: number): number; speed(): number; employee(id: number): Employee; parsedCell(x: number, y: number): stri.. 엘레강트 오브젝트 [2장 - (1)] ⌗ 엘레강트 오브젝트 책을 리뷰해보도록 하겠습니다. 책의 내용은 다양한 언어로 되어있지만, 저는 예시 코드로 Typescript 를 사용해 제 사족을 조금씩 붙일 예정입니다. Chapter2. Education 이번 챕터의 메인 주제는 '객체는 작아야 한다' 입니다. 객체가 작아야만 유지보수에 용이한 우아한 객체라고 할 수 있습니다. 그렇게 만들 수 있는 방법을 보도록 하겠습니다. 가능하면 적게 캡슐화하세요 4개 또는 그 이하의 객체를 캡슐화할 것을 권장합니다. 더 많은 객체를 캡슐화해야 한다면, 클래스에 문제가 있는 것이기 때문에 리팩토링이 필요하다고 볼 수 있습니다. class Cash { private digits: number; private cents: number; private currenc.. 엘레강트 오브젝트 [1장 - (2)] ⌗ 엘레강트 오브젝트 책을 리뷰해보도록 하겠습니다. 책의 내용은 다양한 언어로 되어있지만, 저는 예시 코드로 Typescript 를 사용해 제 사족을 조금씩 붙일 예정입니다. 생성자 하나를 주 생성자로 만드세요 class Cash { private dollars: number; public constructor(dollars: number) { this.dollars = dollars; } } constructor(생성자) 는 새로운 객체에 대한 진입점입니다. 위 예시처럼 생성자는 몇 개의 인자들을 전달받아 어떤 일을 수행한 후 객체를 준비시킵니다. 이 책의 저자는 올바른 클래스의 설계 결과물로 많은 수의 생성자와 적은 수의 메서드를 얘기하고 있습니다. 이 책에선 예시에 Java 코드를 활용해 여러 개의.. 엘레강트 오브젝트 [1장 - (1)] ⌗ 엘레강트 오브젝트 책을 리뷰해보도록 하겠습니다. 책의 내용은 다양한 언어로 되어있지만, 저는 예시 코드로 Typescript 를 사용해 제 사족을 조금씩 붙일 예정입니다. Chapter1. Birth if (price < 100) { const extra: Cash = new Cash(5); price.add(extra); } 객체는 자신의 가시성 범위 안에서 살아갑니다. 위 예제에서 if 블록 안에서만 extra 라는 객체를 볼 수 있기 때문에, if 블록 내부가 extra 객체의 가시성 범위가 됩니다. 객체는 살아있는 유기체이기에 가시성 범위가 중요하고, 살아있게 만들기 전에 객체의 환경을 정의해야 합니다. 무엇이 객체 외부에 있고, 내부에 남아있는지를 구분하는 것으로 이 주제를 시작합니다. -e.. Cluster Module in Node.JS 이번 포스팅에선 Node.JS 의 내장 모듈인 cluster 에 대해서 알아보도록 하겠습니다. Node.JS 는 기본 싱글 스레드입니다. Node.JS 어플리케이션은 하나의 core 에서 실행되므로 어플리케이션을 띄우는 환경이 멀티코어인 경우 나머지 CPU 를 활용하지 못하는 문제점이 있습니다. 흔히 사용하는 클라우드 서비스에서도 멀티코어 인스턴스를 사용하는 경우가 많으므로, 낭비없이 이를 최대한 활용하는 방법으로 Node.JS 에선 cluster 라는 내장 모듈을 제공하고 있습니다. - Cluster const cluster = require('cluster'); const os = require('os'); const process = require('process'); const cpus = os... SharedArrayBuffer & Atomics (SharedMemory) ES8 에선 새로운 공유 메모리 모델에 대해 소개하고 있습니다. 먼저 그 배경을 짧게 얘기해볼까 합니다. 기본적으로 Node.JS 단일 프로세스 단일 스레드에서 실행되고 이벤트 루프 또한 그렇습니다. 이런 기본 컨셉때문에 Node.JS 개발자들은 다른 언어들이 겪는 동시성 문제에서 꽤나 자유로웠지만, 그로 인해 갖는 단점도 있습니다. 단일 프로세스이다보니 멀티 코어 환경에선 cpu 를 제대로 활용하지 못하기때문에, cluster 모듈을 사용하는 설계를 대부분의 경우엔 깔고 들어가야 합니다. 또한 단일 스레드 모델은 cpu 집약적인 연산에 약하고, 이런 작업의 처리가 오래 걸리면 전체 성능이 저하됩니다. 그러다보니 Node.JS 도 꽤 예전버전부터 worker_threads 라는 내장 모듈을 통해 멀티 쓰.. ES8 (ES2017) 이번 포스팅에선 ES8 의 기능들에 대해 알아보도록 하겠습니다. - Async functions ES 에서 그간 추가된 스펙 중에 현재 자바스크립트 프로그래밍에서 가장 많이 쓰는 기능이 아닐까 싶습니다. async functions 이 제공하는 syntax 를 통해 훨씬 향상된 비동기 프로그래밍이 가능케 되었습니다. const test1 = () => { return new Promise(resolve => { resolve(3); }); }; (async () => { const result = await test1(); console.info(result); // 3 })(); async 함수에선 await 키워드를 사용할 수 있고, await 는 전달된 promise 의 해결을 기다리는 역할을 합니.. ES7 (ES2016) 2022년에 ES7 을 포스팅하는게 맞나 싶긴 하지만.. 정리하는 차원에서 ES7 에 나온 기능들을 알아보도록 하겠습니다. ES7 부터 TC39 산하에서 출시된 첫번째 개정판입니다. - new exponentiation operator const result1 = Math.pow(10, 2); console.info(result1); // 100 const result2 = 10 ** 2; console.info(result2); // 100 새로운 거듭제곱 연산자가 추가되었습니다. 기존에 거듭제곱을 연산하기 위해선 Math.pow 메서드의 도움을 받아야 했는데, ** 연산자로 인해 좀 더 간편해진 기분입니다. 현재는 비교적 최근에 추가된 BigInt 도 ** 연산자는 처리가 가능하며, 이 점을 제외하면.. 이전 1 ··· 5 6 7 8 9 10 11 ··· 23 다음