본문 바로가기

Language

(107)
[Typescript] 유틸리티 타입 Pick 직접 구현하기 Pick 타입?객체 타입 T에서 원하는 key(K)만 뽑아서 새로운 타입을 만드는 기능 예시interface Todo { title: string description: string completed: boolean}type TodoPreview = Pick 이렇게 하면 TodoPreview 타입은 다음과 같이 변환된다.{ title: string completed: boolean} Todo에서 'title'과 'completed'만 뽑아온 것이다. Pick을 직접 구현해보자type MyPick = { [P in K]: T[P]} K는 반드시 T의 키 중 일부여야 한다.keyof 키워드는 T의 모든 키 이름들을 유니온 타입( "title" | "description" | "completed"..
[Javascript] 지수 표기법으로 출력되는 JavaScript 숫자, 왜 그럴까? (feat. Number vs BigInt) 최근에 자바스크립트로 팩토리얼을 계산하는 코드를 짜다가 흥미로운 문제를 마주했다.팩토리얼 계산 결과가 지수 표기법으로 출력된 것이다. function extraLongFactorials(n) { let answer = 1; for(let i = n; i >= 1; i--){ answer *= i; } console.log(answer); // 1.5511210043330984e+25}1.5511210043330984e+25 같은 숫자. 이게 도대체 뭘까?🔍 지수 표기법이란?1.5511210043330984e+25는 15511210043330985984000000와 같은 숫자다.e+25는 "10의 25제곱을 곱한다"는 뜻이고, 자바스크립트는 너무 큰 숫자를 간단하게 표..
[Javascript] 자바스크립트 모듈 (export, import) JavaScript에서 모듈을 사용하면 코드의 재사용성을 높이고, 유지보수를 쉽게 하며, 다른 파일에서 필요한 기능만 가져다 쓸 수 있다. 자바스크립트 모듈의 기본 개념과 export, import의 사용법을 알아보자.HTML 파일에서 자바스크립트 모듈을 사용하는 방법 type="module" 속성을 사용하면, 해당 스크립트 파일이 모듈로 처리된다.export와 import 사용법1. 개별 함수 내보내기 및 불러오기// hello.js export function hello1() { console.log("Hello 1!"); } export function hello2() { console.log("Hello 2!"); } // main.js import { hello1, hello2 }..
[Typescript] unknown과 any의 차이 1. unknown 타입은 any를 제외한 다른 타입에 할당할 수 없다. Typescript 3.0 버전부터 추가된 타입이다. any와 마찬가지로 모든 타입의 값을 할당할 수 있다.그렇다면 그냥 any로 사용하면 되지 왜 unknown이 필요한걸까? typescriptlang.org의 설명에 따르면 unknown 타입은 any 타입 외의 어떤 타입에도 할당할 수 없다.반면 any는 never를 제외한 모든것에 할당 가능하다. 조금 더 쉽게 코드로 예시를 들어보자면, let varr:unknownlet booleanType:boolean = varr // Type 'unknown' is not assignable to type 'boolean'let bool:boolean = truelet unkw:unk..
[C++] 비트 연산 ※ int는 32bit (4byte)이지만, 이 게시물에서 편의상 8bit로 표현하였음 비트 연산자 a = 0b1110 / b = 0b0100 활용 & (AND) a & b = 0b0100 둘 다 1이면 켜짐 어떤 비트가 켜져 있는지 확인 | (OR) a | b = 0b1110 둘 중 1이 하나라도 있으면 켜짐 비트를 켤 때 ^ (XOR) a ^ b = 0b1010 서로 다르면 켜짐 비트를 끄거나 반전시킬 때 ~ (NOT) ~a = 0b0001 비트를 반전시킴 비트를 끌 때 (&와 함께 사용) (오른쪽 Shift) a >> n = a * (2 ^ -n) 비트 연산을 사용할 때 우선순위에 주의가 필요하다. 일반적으로 사칙연산(+, -, *, /)은 비교, 논리 연산자(==, >, && 등)보다 우선순위가 ..
[C++] advance 함수 std::advance(_InIt& _Where, _Diff _Off) 함수는 off만큼 반복자를 이동시킨다. vector v = { 1, 2, 3, 4, 5 }; auto it = v.begin(); advance(it, 1); cout
[Kotlin] 코루틴을 통한 비동기 처리 여러 개의 루틴을 동시에 실행하여 결과를 내고 싶다면 비동기처리를 지원하는 코루틴을 사용한다. 코루틴은 메인루틴과 별도로 진행이 가능한 루틴으로 개발자가 루틴의 실행과 종료를 마음대로 제어할 수 있는 단위이다. 코루틴을 사용할 때는 코루틴 extensions의 패키지를 모두 import 해야한다. import kotlinx.coroutines.* 코루틴의 Scope 코루틴은 제어범위 및 실행범위를 지정할 수 있다. GlobalScope : 프로그램 어디서나 제어, 동작이 가능한 기본 범위 CoroutineScope : 특정한 목적의 Dispatcher를 지정하여 제어 및 동작이 가능한 범위 CoroutineScope를 만들 때 적용가능한 Dispatcher Dispatchers.Default : 기본적인..
[Kotlin] 비트연산 비트연산: 정수형 변수를 10진법 대신 2진법 비트 단위로 연산할 수 있는 기능 실무에서 비트연산은 거의 계산에는 사용하지 않으며 (2진법을 이용한 연산 최적화가 필요하다면 컴파일러의 기능을 사용하는 경우가 대부분!!) 정수형의 값을 비트 단위로 나누어 데이터를 좀 더 작은 단위로 담아 경제성을 높이기 위한 용도로 사용된다. 예를 들어, 32비트인 Int 타입 안에 0과 1로 된 서로 다른 값을 넣는다거나 앞의 5비트와 뒤의 27비트에 서로 다른 값을 넣는 식으로 변수 하나에 여러 개의 값을 담아 사용할 수 있다. 다만 비트연산을 사용하는 부하도 무시할 수 없으므로 주로 플래그 값(여러 개의 상태값을 0과 1로 담는 방법)을 처리하거나 네트워크 등에서 프로토콜의 데이터 양을 줄이기 위해 자주 사용된다. ..