자바스크립트
[JS] 자바스크립트 reduce() 메서드 활용 예시 모음
[JS] 자바스크립트 reduce() 메서드 활용 예시 모음
2024.07.07Array.reduce() 메서드는 배열에 있는 각 요소에 콜백 함수를 실행하여 누적된 계산 결과를 하나의 값으로 반환한다. 자바스크립트에서 제공하는 filter(), map() 등의 배열 메서드는 모두 reduce()로 구현할 수 있고, 이 외에도 다양한 활용 방법이 있기 때문에 개인적으로 가장 자주 사용하는 배열 메서드다. reduce() 메서드의 구문은 아래와 같다.reduce(callbackFn, initialValue?) callbackFn 콜백 파라미터accumulator : 이전 callbackFn 반환값초기값 지정 시 콜백을 처음 호출했을 때 값 : initialValue초기값 미지정시 콜백을 처음 호출했을 때 값 : array[0]currentValue : 현재 순회하고 있는 값초기값 지..
[JS] 자바스크립트 Set 객체의 집합 연산 메서드 (교집합, 합집합 등)
[JS] 자바스크립트 Set 객체의 집합 연산 메서드 (교집합, 합집합 등)
2024.07.04TL;DR💡 ES6에 도입된 Set 객체는 중복을 허용하지 않는 고유한 값들을 저장하는 데이터 구조다. Set은 동일한 값을 두 번 저장할 수 없기 때문에 중복된 값을 추가하면 자동으로 무시한다. 또한 삽입 순서를 기억하고, 원시형과 참조형 값을 모두 지원한다 — 참고 포스팅 Firefox 127 버전부터 별도의 폴리필 없이 크롬(Chrome)을 포함한 대부분의 주요 브라우저 엔진에서 교집합, 합집합, 차집합 등 집합 연산을 수행하는 새로운 Set 메서드를 지원한다. 크로스 브라우저에서 지원하는 메서드는 다음과 같다. A.intersection(B) : 두 Set이 공통으로 가지는 요소를 포함한 새로운 Set 반환 — 교집합A.union(B) : 두 Set이 가진 모든 요소를 포함한 새로운 Set 반환..
[DevTools] Prettier 주요 포맷팅 옵션과 추천 설정
[DevTools] Prettier 주요 포맷팅 옵션과 추천 설정
2024.06.15들어가며자바스크립트를 사용하는 개발은 코드 포맷팅 도구로 Prettier를 많이 사용한다. Prettier는 .prettierrc (혹은 .prettierrc.js) 구성 파일에 원하는 코드 스타일을 커스터마이징 할 수 있는데, 한국어로 구글링 하면 많이 나오는 국룰 커스텀(?)을 별생각 없이 사용하고 있었다.// .prettierrc{ "singleQuote": true, "semi": true, "useTabs": false, "tabWidth": 2, "trailingComma": "all", "printWidth": 80} 사용하는데 큰 문제는 없었지만 언제 한 번 선호하는 코드 스타일에 따라 설정을 손봐야겠다는 생각을 하던 참에 우연히 My Code Formatting Guidelin..
[Algorithm] 이진 탐색 및 변형 알고리즘 Binary Search Algorithm
[Algorithm] 이진 탐색 및 변형 알고리즘 Binary Search Algorithm
2024.06.02이진 탐색 알고리즘은 정렬된 배열에서 특정 값을 효율적으로 찾기 위한 알고리즘이다. 이진 탐색은 값의 크기에 따라 탐색 범위를 절반으로 줄여가며 원하는 값을 찾아내는 방식으로 작동하기 때문에 시간 복잡도는 $O(\log n)$으로 효율적이다. 예를 들어 1024개 요소를 가진 배열에서 원하는 값을 찾을 때 최대 10번의 비교만 필요하다. 하지만 데이터가 자주 변경된다면 매번 정렬을 해줘야 하기 때문에 효율성이 떨어질 수 있다. 데이터 삽입/삭제가 빈번한 경우엔 해시 테이블 같은 자료구조를 사용하는게 더 나을 수 있다. 💡 이진 탐색은 이분 탐색이라고도 불린다. 이진 탐색 기본중앙값 계산배열의 중간 인덱스를 계산한다 mid = Math.floor((left + right) / 2)중앙값과 찾고자 하는 ..
[React] 틱택토(Tic-Tac-Toe) 게임 주요 로직 톺아보기
[React] 틱택토(Tic-Tac-Toe) 게임 주요 로직 톺아보기
2024.05.30틱택토 소개틱택토는 2명의 플레이어가 자신의 기호(X, O) 3개를 가로, 세로, 대각선으로 연속해서 놓이도록 하는 보드 게임이다. 게임은 주로 3x3 격자 보드에서 진행된다. 플레이어는 번갈아가면서 자신의 기호를 놓고, 한 칸엔 한 개의 기호만 놓을 수 있다. 모든 칸에 기호를 놓았지만 어느 한쪽도 연속적인 세 개의 기호를 배열하지 못하면 게임은 무승부로 끝난다(무승부가 많은 게임). 승리 조건 체크틱택토는 행렬로 이뤄진 2차원 보드에서 진행하지만, 1차원 배열로 관리하면 각 칸을 단일 인덱스로 접근할 수 있기 때문에 데이터를 더 수월하게 관리할 수 있다. 게임 로직을 구현할 때도 인덱스 계산을 단순화시켜 코드의 복잡성을 줄이는 데 도움이 된다. 또한, 1차원 배열은 그리드 스타일을 이용해 2차원 보..
[JS] Array.fill() 메서드 사용 시 주의할 점
[JS] Array.fill() 메서드 사용 시 주의할 점
2024.05.30Array.fill() 메서드는 이름 그대로 첫 번째 인자에 주어진 값으로 배열의 모든 요소를 채우는 메서드다. 주로 Array() 생성자와 함께 사용하여, 초기값이 할당된 배열을 생성할 때 유용하게 쓰인다.Array.fill(value, start?, end?)// length가 2인 빈 배열 생성 후 null로 채움const filledArray = Array(2).fill(null);console.log(filledArray); // [null, null]const numbers = [1, 2, 3, 4];// 2~3번 인덱스를 null로 채움 (start 포함, end 미포함)numbers.fill(null, 2, 4);console.log(numbers); // [1, 2, null, null]..
[JS] Bitwise 비트 연산자 톺아보기 (feat. 비트마스크)
[JS] Bitwise 비트 연산자 톺아보기 (feat. 비트마스크)
2024.05.29비트 연산자는 정수의 이진 표현, 즉 비트(0과 1) 단위로 계산하는 연산자다. 주로 성능 최적화, 메모리 절약, 알고리즘 구현 등에서 사용한다. 자바스크립트는 64비트 부동소수점 형식으로 숫자를 저장하지만, 비트 연산을 수행할 땐 내부적으로 피연산자를 32비트 정수로 변환한다. 이는 비트 연산이 정수에만 적용되기 때문. 변환 과정에서 소수부는 버려지고 32비트 정수만 연산에 사용된다. 2의 보수 표현법2의 보수 표현법은 비트를 이용해 음수를 나타내는 표준 방식으로, 정수의 이진 표현에서 모든 비트를 반전시킨 후(1의 보수) 1을 더하는 방식으로 계산한다. 즉, 1의 보수에 1을 더하면 2의 보수가 된다. 이때 최상위 비트(Most Significant Bit; 부호 비트; 가장 왼쪽에 있는 비트)가 ..
[JS] 유니코드와 유니코드 프로퍼티
[JS] 유니코드와 유니코드 프로퍼티
2024.05.29유니코드💡 자바스크립트는 모든 문자열을 UTF-16으로 인코딩한다. UTF-16은 기본적으로 2바이트(16비트)로 인코딩하지만, 2바이트로 표현할 수 없는 이모지, 특수 기호 같은 문자는 서로게이트 페어를 통해 4바이트를 사용한다. 이를 보충 문자라고 부른다. 서로게이트 페어는 U+10000(65536) 이상의 코드 포인트를 표현하기 위해 두 개의 2바이트 코드 조합으로 보충 문자를 표현하는 방식이다. 자바스크립트는 유니코드를 사용해서 문자열을 인코딩한다. 유니코드는 전 세계의 다양한 문자와 기호를 표현할 수 있도록 설계된 국제 표준이다. 유니코드에서 각 문자는 고유한 코드 포인트(해당 문자열을 대표하는 숫자)를 가진다. 코드 포인트는 U+ 접두사와 16진수 숫자를 합친 표기법을 사용한다. 예를들어 알..
[JS] 바닐라 자바스크립트로 마리오 러너 게임 구현하기
[JS] 바닐라 자바스크립트로 마리오 러너 게임 구현하기
2024.05.29러너 게임(달리기 게임)은 플레이어가 자동으로 전진하면서 장애물을 회피하고, 점수를 획득하는 게임 유형이다. 간단한 러너 게임은 캔버스 없이 JavaScript, HTML, CSS 만으로도 구현할 수 있다. 러너 게임 구현은 크게 ①이동(전진), ②점프, ③장애물 배치, ④장애물 충돌 감지로 나눌 수 있다. 슈퍼 마리오는 플레이어가 캐릭터를 직접 조종하는 플랫포머 장르에 속하지만 친숙한 마리오 캐릭터와 구조물을 이용해서 러너 게임으로 만들어보자. 싱글톤 DOM 관리더보기// dom-manager.jsclass DomManager { static instance = null; constructor() { // 생성자 함수는 기본적으로 새로 생성된 인스턴스(this)를 반환하지만 명시적으로 반환 ..
[HTML] select, option 요소의 주요 속성과 특징
[HTML] select, option 요소의 주요 속성과 특징
2024.05.29Option() 생성자 함수 | MDN🔍 요소의 selected 어트리뷰트와 자바스크립트로 접근하는 option.selected 프로퍼티는 서로 독립적인 기능을 가진다. 요소의 selected 어트리뷰트는 초기 선택 상태를 나타내고, option.selected 프로퍼티는 현재 선택 상태를 반영하고 제어하는 데 사용한다.// Option() 생성자를 사용하면 document.createElement() 보다 더 간결하게 작성할 수 있다new Option(text?, value?, defaultSelected?, selected?); ① text : 요소에 표시할 텍스트 | 기본값 "" 빈 문자열text에 지정한 값은 option.textContent로 설정된다.② value : 요소의 value..
[Algorithm] 순열 / 조합 개념과 알고리즘 구현
[Algorithm] 순열 / 조합 개념과 알고리즘 구현
2024.05.28순열 Permutation개념순열은 서로 다른 n개 요소 중에서 r개를 선택하여 순서대로 나열하는 방법을 의미한다. 순열에선 순서가 결과에 영향을 미치기 때문에 순서가 중요하다. 동일한 요소를 서로 다른 순서로 나열하면, 각각을 별개의 순열로 간주한다. 예를 들어 A, B, C에서 A, B 두 요소를 선택하는 경우 AB와 BA는 서로 다른 순열이다. A 선택, 남은 글자 B, CB 선택, 남은 글자 C (2자리 순열이므로 무시) → ABC 선택, 남은 글자 B (2자리 순열이므로 무시) → ACB 선택, 남은 글자 A, CA 선택, 남은 글자 C (2자리 순열이므로 무시) → BAC 선택, 남은 글자 A (2자리 순열이므로 무시) → BCC 선택, 남은 글자 A, BA 선택, 남은 글자 B (2자리 순열..
[React] 리액트에서 setTimeout 더 편하게 쓰기
[React] 리액트에서 setTimeout 더 편하게 쓰기
2024.05.28React에서 setTimeout 같은 타이머 API를 사용할 때 컴포넌트의 생명주기를 고려하지 않으면 메모리 누수나 예기치 않은 예외가 발생할 수 있다. 예를 들어 타이머를 설정한 후 컴포넌트가 언마운트돼도 타이머는 여전히 실행되고, 이후 타이머 콜백에서 언마운트된 컴포넌트의 상태를 업데이트하려고 하면 에러가 발생할 수 있다. 위 같은 상황을 방지하기 위해 useEffect의 클린업 함수에 타이머 해제 로직을 추가한다. 하지만 한 컴포넌트에서 여러 타이머를 관리해야 한다면 메모리 누수 뿐만 아니라 타이머를 관리하기 위한 로직 때문에 컴포넌트의 복잡성이 높아질 수 있다. 만약 별도의 커스텀 훅에서 타이머를 관리하고, 커스텀 훅이 언마운트 될 때 모든 타이머를 자동으로 해제한다면 해당 훅을 사용하는 곳에선..