HOME
[JS] 유니코드와 유니코드 프로퍼티
[JS] 유니코드와 유니코드 프로퍼티
2024.05.29유니코드💡 자바스크립트는 모든 문자열을 UTF-16으로 인코딩한다. UTF-16은 기본적으로 2바이트(16비트)로 인코딩하지만, 2바이트로 표현할 수 없는 이모지, 특수 기호 같은 문자는 서로게이트 페어를 통해 4바이트를 사용한다. 이를 보충 문자라고 부른다. 서로게이트 페어는 U+10000(65536) 이상의 코드 포인트를 표현하기 위해 두 개의 2바이트 코드 조합으로 보충 문자를 표현하는 방식이다. 자바스크립트는 유니코드를 사용해서 문자열을 인코딩한다. 유니코드는 전 세계의 다양한 문자와 기호를 표현할 수 있도록 설계된 국제 표준이다. 유니코드에서 각 문자는 고유한 코드 포인트(해당 문자열을 대표하는 숫자)를 가진다. 코드 포인트는 U+ 접두사와 16진수 숫자를 합친 표기법을 사용한다. 예를들어 알..
[TS] 타입스크립트 클래스(class) 문법, 추상 클래스와 메서드
[TS] 타입스크립트 클래스(class) 문법, 추상 클래스와 메서드
2024.05.29클래스 정의자바스크립트에선 생성자 내부에서 프로퍼티를 선언하고 초기화한다. 클래스 필드를 사용하는 경우를 제외하곤 클래스 바디에 프로퍼티를 따로 선언할 필요가 없다. 반면 타입스크립트에선 먼저 클래스 바디에 프로퍼티를 미리 선언하고 타입을 지정해야 한다. 클래스 바디에 프로퍼티를 선언하지 않으면 에러가 발생한다.class User { name: string; // 프로퍼티 선언 및 타입 지정 constructor(name: string) { this.name = name; // 프로퍼티 초기화 }}const user = new User('John');console.log(user); // { name: 'John' } 타입스크립트에선 public, protected, private 접근 제한자..
[DevTools] 웹에서 VSCode 사용하기 - github.dev / github1s
[DevTools] 웹에서 VSCode 사용하기 - github.dev / github1s
2024.05.29웹에서 레포지토리를 살펴보다가 코드를 좀 더 편하게 들여다보고 싶을 때 github1s 서비스를 이용해서 웹 기반 VSCode 환경으로 볼 수 있다. github1s를 사용하려면 github 도메인 뒤에 1s를 붙여서 github1s.com/... 주소로 이동해야 한다. 보통은 주소를 변경해주는 자바스크립트 코드를 즐겨찾기에 추가해 두고 사용한다.javascript: window.location.href = window.location.href.replace(/github(1s)?.com/, function(match, p1) { return p1 ? 'github.com' : 'github1s.com' }) 그러다 우연히 Github에서 공식으로 제공하는 github.dev라는 서비스를 발견했다. gi..
[AWS] VSCode에서 AWS EC2 원격 연결 / EC2 메모리 부족 해결
[AWS] VSCode에서 AWS EC2 원격 연결 / EC2 메모리 부족 해결
2024.05.29터미널로 AWS EC2에 접속해서 서버 코드를 수정하려면 Nano나 Vim 등을 이용해야 한다. 익숙한 VSCode 환경이 아니기 때문에 오타가 발생할 가능성도 높고, 이 에디터들의 기본 설정은 Linter도 안되기 때문에 불편하다. VSCode 확장 기능을 이용해 AWS EC2에 원격 접속한 후 VSCode에서 코드를 직접 수정할 수 있다. VSCode에서 EC2 인스턴스 SSH 연결❶ VSCode 확장기능 Remote SSH 설치 (링크) ❷ CMD SHIFT P 명령 커맨드 → Remote-SSH: Connect to Host → Configure SSH Hosts → 사용자 수준의 config 파일 클릭 ❸ SSH Config 파일 설정# 입력 예시Host aws-ec2-seoul-privat..
[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💡 HTML 옵션 태그의 selected 어트리뷰트와 자바스크립트로 접근하는 option.selected 속성(프로퍼티)은 서로 독립적인 기능을 가진다. 옵션 태그의 selected 어트리뷰트는 초기 선택 상태를 나타내고, option.selected 속성은 현재 선택 상태를 반영하고 제어하는데 사용한다.// Option 생성자를 사용하면 document.createElement() 보다 더 간결하게 작성할 수 있다new Option(text?, value?, defaultSelected?, selected?) ◼︎ text : 옵션 요소에 표시할 텍스트 | 기본값 "" 빈 문자열text에 지정한 값은 option.textContent로 설정된다.◼︎ 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의 클린업 함수에 타이머 해제 로직을 추가한다. 하지만 한 컴포넌트에서 여러 타이머를 관리해야 한다면 메모리 누수 뿐만 아니라 타이머를 관리하기 위한 로직 때문에 컴포넌트의 복잡성이 높아질 수 있다. 만약 별도의 커스텀 훅에서 타이머를 관리하고, 커스텀 훅이 언마운트 될 때 모든 타이머를 자동으로 해제한다면 해당 훅을 사용하는 곳에선..
[React] 크롬 확장 프로그램 개발 배경 지식 및 튜토리얼
[React] 크롬 확장 프로그램 개발 배경 지식 및 튜토리얼
2024.05.28크롬 확장기능 주요 기능사용자 인터페이스 사용자화 : 브라우저 툴바에 버튼 추가, 사용자 정의 팝업/오버레이 생성 등콘텐츠 스크립트 : 웹페이지에 직접 스크립트를 삽입하여 DOM 조작 가능백그라운드 스크립트 : 브라우저를 사용하는 동안 지속적으로 실행돼서 필요한 기능 제공API 접근 : 북마크/탭/윈도우 관리, 히스토리 조작 등 브라우저의 다양한 영역 접근 가능🔍 탭 이동, capture, zoom 등 다양한 방식으로 제어 가능메시징 시스템 : 확장 기능의 다른 컴포넌트 혹은 웹페이지와 메시지 교환 가능웹 요청 조작 : 네트워크 요청 가로채기, 광고 차단, 프라이버시 보호, 웹 트래픽 관리 등🔍 chrome.webRequest API로 http 요청을 가로채거나 request header 수정 가능사..
[Algorithm] 자바스크립트 Map으로 구현하는 LRU Cache 알고리즘
[Algorithm] 자바스크립트 Map으로 구현하는 LRU Cache 알고리즘
2024.05.28LRU 캐시 특징캐시(Cache)는 데이터나 연산 결과를 일시적으로 저장하는 것을 가리킨다. 자주 사용하는 데이터나 연산 결과를 메모리 영역에 보관해서 동일한 정보를 요청받았을 때 더 빠른 속도로 제공할 수 있다. LRU 캐시는 대표적인 캐시 알고리즘 중 하나로 제한된 저장 공간을 관리하기 위해 가장 오래전에 사용한 데이터를 제거하는 알고리즘이다. LRU는 Least Recently Used의 약자로 사용한지 가장 오래된 정도로 해석할 수 있다. LRU 캐시에선 조회/쓰기시 해당 값을 가장 최근에 사용한 것으로 처리하는게 핵심이다. 자바스크립트 Map 등을 이용해서 구현할 땐 값이 뒤에 위치할 수록 가장 최근에 사용한 것으로 표시한다. 조회 : 캐시에 값이 존재하면 해당 값을 캐시 마지막(최신)으로 이동..
[Algorithm] 최소 힙(Heap)으로 우선순위 큐 구현하기
[Algorithm] 최소 힙(Heap)으로 우선순위 큐 구현하기
2024.05.28힙의 특징최단 경로를 찾을 때 널리 사용하는 다익스트라 알고리즘은, 탐색 큐의 자료구조가 전체 성능에 결정적인 영향을 미친다. 때문에 추가/삭제를 빠르게 수행할 수 있는 우선순위 큐를 주로 사용한다. 우선순위 큐는 일반 큐와 비슷하지만, 각 요소가 우선순위를 가지고 있으며, 우선순위가 높은 요소가 먼저 출력된다는 점이 다르다. 우선순위 큐는 크게 배열, 연결리스트, 힙 이렇게 세 가지 방법으로 구현할 수 있다. 그중 완전 이진 트리 구조를 갖는 힙으로 구현하면 추가/제거의 효율성이 크게 향상된다. 구현 방법삽입삭제순서 없는 배열O(1)O(n)순서 없는 연결리스트O(1)O(n)정렬된 배열O(n)O(1)정렬된 연결리스트O(n)O(1)힙O(log n)O(log n) 이진 트리는 각 부모 노드가 왼쪽/오른쪽 최..
[Algorithm] 다익스트라 알고리즘 — 최단 경로 찾기
[Algorithm] 다익스트라 알고리즘 — 최단 경로 찾기
2024.05.28문제 분석프로그래머스 레벨 2의 배달 문제(12978)는 마을 개수 N, 두 마을 사이의 거리 정보 road, 배달 가능한 시간(거리) K를 인자로 받아, 1번 마을에 있는 음식점이 K이하 시간에 배달할 수 있는 마을의 개수를 반환해야 한다. 마을 개수 N : 1 ≤ N ≤ 50거리 정보 : [[a, b, c], [...]]a b : 두 마을의 번호c : 두 마을의 거리(시간)배달 가능한 시간 K : 1 ≤ K ≤ 500,000 위 마을 이미지를 기준으로 1번부터 5번 마을까지 최소 배달 시간을 [번호, 시간] 배열 형태로 나타내면 아래와 같다. 만약 배달 가능한 시간 K가 3이라면 1, 2, 4, 5번 마을이 모두 3시간 이하여서 정답은 4가 된다. 이처럼 1번 마을에서 다른 모든 마을까지 소요되는 ..