전체 글 527

구조분해 할당

// 구조 분해 할당 Desturcturing Assignment // 데이터 뭉치(그룹화)를 쉽게 만들 수 있다. const fruits = ['apple','banana','kiwi', 'strawberry'] const [first, second, ...others] = fruits console.log(first) // apple console.log(others) // ['kiwi', 'strawberry'] const point = [1, 2] const [x, y, z = 0] = point function createUpper(){ return ['apple', 'APPLE'] } const [title, upper] = createUpper() console.log(title) // ap..

병합정렬(mergeSort)

병합 정렬은 정렬하고 싶은 수열을 두 개의 수열로 분할해 갑니다. 더 이상 분할되지 않는 상태에 이르면 그룹들을 병합해 나갑니다. 병합할 때에는 정렬이 끝난 두 개의 수열을 병합해서 정렬이 끝난 하나의 수열로 만듭니다. 이것을 하나의 그룹이 될 때까지 반복합니다. `` const merge = function (left, right) { let merged = []; let leftIdx = 0, rightIdx = 0; const size = left.length + right.length; for (let i = 0; i = left.length) { merged.push(right[rightIdx]); rightIdx++; } else if (rig..

자료구조 2022.04.21

2022-04-20 일기: 모르는 것을 모르지 않게

오늘 코드 스테이츠 4월 커리어 레슨에서 쏘카에서 재직 중이신 데이터 엔지니어님의 강연을 들을 수 있었다. 그중 가장 기역 나는 말씀이 시니어로 가는 길은 모르는 걸 모르지 않게 해야 한다는 것이었다. 시니어도 모르는 게 있고 아는 걸 까먹을 수도 있지만 그걸 줄여 나가는 게 시니어로서의 길이라고 말씀해 주셨다. 이 말을 듣고 최근 취업 전선에 뛰어서 이것저것 알아가면서 내가 모르는 것들이 이렇게나 많구나 하며 조금은 지친 나에게 힘이 되어주는 말이었다. 아직 취업도 하지 못한 헷병아리니깐 모르는건 많지만 그걸 매워 가는게 평생 개발자가 해야하는 일이겠지

일기 2022.04.20

이터레이션(이터러블)

이터레이션 프로토콜 반복 가능한 규격, 약속, 인터페이스이다 팁 오브젝트 이름을 지을때는 명사로 짓고 인터페이스의 경우는 able을 붙이고 있습니다. // Iterable 하다는건! 순회가 가능하다는 것 // [Symbol.iterator](): IterableIterator // 심볼정의를 가진 객체나, 특정한 함수가 IterableIterator를 // 리턴한다는 것은 순회 가능한 객체다! 라는것을 의미한다. // 순회가 가능하면 무엇을 할 수 있나? // 바로 반복문, 연산자들을 사용할 수 있습니다. const arr = [1, 2, 3] console.log(arr.values()) // Object [Array Iterator] {} console.log(arr.entries()) // Obje..

제너레이터

이터레이터를 조금 더 간편한 방식으로 만들 수 있게 해줍니다. // 제너레이터를 만들기 위해서는 함수를 만들어야 하는데 이때 *를 같이 입력해야합니다. function* multipleGenerator(){ try{ for(let i = 0; i < 10; i++){ // 사용자가 next를 사용할 때까지 기다렸다가 하나하나씩 리턴해줍니다. // 즉 사용자가 next를 호출해줘야 i는 0에서 1로 증감한다. yield i ** 2 } } catch(err){ console.log(err) } } const multiple = multipleGenerator let next = multiple.next() console.log(next) next = multiple.next() console.log(nex..

mock

실제 객체를 만들어 사용하기에 시간, 비용 등의 Cost가 높거나 혹은 객체 서로간의 의존성이 강해 구현하기 힘들 경우 가짜 객체를 만들어 사용하는 방법입니다. 필요한 순간 테스트 작성을 위한 환경 구축이 어려운 경우 테스트가 특정 경우나 순간에 의존적인 경우 테스트 시간이 오래 걸리는 경우 ProductService.js const ProductClient = require('./product_client') class ProductService { constructor() { // 좋지 못한 코드 클래스 내부에서 의존성을 만들어주는 것은 OOP설계 원칙을 벗어나는 행위 this.productClient = new ProductClient() } fetchAvailableItems() { return ..

TDD 2022.04.19

basic

자동 환경 설정 npm i jest -g npm i jest "scripts": { "test": "jes --watchAll" }, 지금 내가 작업하는 것들에 대해서만 작용하고 싶다면 "scripts": { "test": "jest --watch" }, git init를하고 .gitignore 파일을 생성 후 .gitignore에 node_modules/* 이렇게하면 내가 수정한 파일만 test가 됩니다. Unit test const add = require('../add.js') test('add 1 + 2 to equal', () => { // 테스트 코드 작성! // === expect(add(1, 2)).toBe(3) }) add.js에 있는 add함수를 사용하여 그 값이 3이여야 한다. npm..

TDD 2022.04.19

TDD란

테스트란 무엇인가? 제품(함수, 기능, ui, 성능, API 스펙)이 원하는데로 동작하는지 확인하는 것 어떤 플랫폼에서 하는지 어떤 환경에서 하는지에 따라 다양한 테스트가 존재 진행 순서 수행하는 js.code가 있고 이 코드가 제대로 수행하는지 알 수 있는 test 코드를 작성합니다. 이 test코드는 우리가 원하는 epectation(함수, 기능, ui, 성능, API 스펙)의 요구 사항에 맞게 확인할 수 있도록 테스트를 작성한다. TDD테스트의 장점 자동화 속도(빠르게) 쉽게 작성 높은 커버리지 TDD테스트를 하는 이유 기능이 정상 동작 요구 사항 만족 이슈에 대해 예측 버그를 빠르게 발견 자신감 있게 리팩토링 손쉬운 유지 보수 코드의 품질 향상 코드간 의존성을 낮춤 좋은 문서화 시간을 절약 테스트..

TDD 2022.04.19

헷갈릴 수 있는 용어들 정리(2)

논 블록킹 vs 블록킹 블로킹 블로킹은 A 함수가 B 함수를 호출하면, 제어권을 A가 호출한 B 함수에 넘겨준다. A함수가 B함수를 호출하면 B에게 제어권을 넘긴다. 제어권을 넘겨받은 B는 열심히 함수를 실행한다. A는 B에게 제어권을 넘겨주었기 때문에 함수 실행을 잠시 멈춘다. B함수는 실행이 끝나면 자신을 호출한 A에게 제어권을 돌려준다. 논 블록킹 논블로킹은 A함수가 B함수를 호출해도 제어권은 그대로 자신이 가지고 있는다. A함수가 B함수를 호출하면, B 함수는 실행되지만, 제어권은 A 함수가 그대로 가지고 있는다. A함수는 계속 제어권을 가지고 있기 때문에 B함수를 호출한 이후에도 자신의 코드를 계속 실행한다. 이벤트 버블링 vs 이벤트 캡쳐링 이벤트 버블링 자식 요소에서 부모 요소로 이벤트가 전..