Languages

유튜브에 공개된 네이버 사내 기술 교류 행사인 NAVER ENGINEERING DAY 2024(5월)에서 발표되었던 세션을 보고 타입스크립트의 타입 시스템에 대한 이해가 깊어졌습니다. 해당 발표 영상을 보고 추후 다시 찾아볼 수 있도록 정리한 내용입니다. 본문에는 제 나름 대로의 해석이 추가되어 오해의 여지가 있을 수 있습니다.발표 영상: infer, never만 보면 두려워지는 당신을 위한 고급 TypeScript 타입이론과 TypeScript러셀의 역설(Russell's Paradox)의 발견으로 수학의 근간인 집합론이 흔들리며 함수에 대한 고찰도 이루어졌다.기존 집합 사이의 관계로만 생각했던 함수에 대한 고찰을 시작은 람다 대수(Lambda Calculus)의 고안을 이끌었고 이를 고도화하던 중 타..
Thread Java에서는 JDK 1.0부터 `Thread` 클래스를 제공해 멀티태스킹을 지원했습니다.(Thread) `Thread` 클래스를 통해 스레드를 생성할 수 있고 이 클래스를 상속받아 run() 메서드를 오버라이드하거나 `Runnable` 인터페이스를 구현해 `Thread` 클래스 생성자의 인자로 넘겨줌으로써 원하는 작업을 수행하는 스레드를 생성할 수 있습니다. 스레드의 상태는 다음과 같습니다. (Thread.State) New: 새로 생성된 스레드, 아직 시작되지 않음 Runnable: 실행 가능 혹은 실행 중인 상태 Blocked: 동기화에 의해 차단됨 Waiting: 다른 스레드가 특정 액션을 수행하길 기다림 Timed Waiting: 지정된 시간 동안 기다림 Terminated: 실행 ..
이번 글에서는 macOS에서 JDK 버전 관리 방법을 다룹니다. nodejs에서는 `n` 혹은 `nvm`과 같은 버전을 관리 툴을 사용하면 손쉽게 새로운 버전을 확인, 설치할 수 있고 설치된 버전을 변경, 삭제할 수 있습니다. java에서는 설정할 것이 노드에 비해 더 많기 때문에 미래의 저와 다른 분들에게 도움이 되고자 블로그에 정리해 봅니다. 이 글은 설정 과정과 이유를 담고 있습니다. 빠르게 설정만 필요하신 분들은 글 아래의 `정리` 부분을 바로 읽으시면 시간을 아끼실 수 있습니다. Homebrew 설치 `Homebrew`는 macOS의 오픈소스 패키지 관리 시스템입니다. CLI기반 툴이라 처음 사용하시면 어색할 수 있지만 JDK 버전 관리 글을 읽고 있는 분이라면 익숙하실 거라 생각합니다. hom..
이번 글에서는 잘 사용하면 복잡한 연산을 쉽고 빠르게 처리할 수 있는 비트 연산과 시프트 연산을 알아보고 Java로 실습해 보겠습니다. 비트 연산 `비트 연산(bitwise operation)`은 이진수에 대해 비트 단위로 적용되는 연산입니다. 비트 연산자에는 논리 연산에서 사용되는 논리합(OR), 논리곱(AND), 배타적 논리곱(XOR), 부정(NOT)이 있습니다. 많은 프로그래밍 언어에서 `비트 연산자`로 &(AND), |(OR), ^(XOR), ~(NOT)을 사용합니다. `비트 연산의 진리표`는 논리 연산의 진리표에서 True와 False를 1과 0으로 바꾸면 됩니다. 진리표는 아래와 같습니다. AND(&) OR(|) XOR(^) NOT(~) 1 & 1 1 1 | 1 1 1 ^ 1 0 ~1 0 1 ..
Object로 구성된 Array에서 특정 property 값을 타입으로 추출하기. feat. type guard Object array에서 타입 추출하기 typescript에서 같은 형태의 object를 담은 array에서 object의 특정 키값을 추출할 상황이 생각보다 많이 나온다. 이참에 한번 정리해보자. The Problem 웹 사이트를 만들다가 객체 배열을 관리하다 생긴 문제였고 typescript를 사용할 때 많이 마주치는 경우인 것 같아 예시를 통해 정리해보려 한다. 예시를 위해 작성된 코드이기에 내용은 이상하더라도 구조는 같으니 어떻게 처리하는지만 봐주셨으면 한다. 사람들의 데이터를 관리하고 처리하는 상황을 예시로 들어보자. 모든 사람들에 대한 정보를 담은 people 배열이 있고 사람은 ..
let userError:object; userError = { name: "cloer", age: 10 }; // console.log(user.name) // Error: Property 'name' does not exist on type 'object'. type Score = 'A'|'B'|'C'|'D'; interface User { name: string; age: number; gender?: string; //optional readonly birthYear: number; [grade:number]: Score }; let user:User = { name:'cloer', age:10, birthYear: 2012 }; user.gender = 'male'; // user.birthYe..
// primary type const myName:string = 'cloer' const age:number = 13 const married:boolean = false // Array const weekdays:string[] = ['mon', 'tue', 'wed'] const weekend:Array = ['sat', 'sun'] // tuple const user:[string, number] = [myName, age] // void const voidFunc = ():void => { // No return } // never const naverFunc1 = ():never=>{ while(true){ // Infinite loop } } const naverFunc2 = ():neve..
· Languages/R
다른 언어를 쓰다 R을 처음 접하면 요소에 접근하는 방법이 헷갈린다. 정리하며 익혀보도록 하자! 첨자(Indexing) R에서 요소근은 $, [], [[]], [,]등 여러 형태로 나타난다. 또 R언어는 인덱스가 1부터 시작한다. 프로그래밍을 처음 배울때는 왜 0부터 시작하지? 했는데 이제는 왜 1부터 시작하지? 라는 생각이 든다. matlab도 1부터 시작하는 것을 보면 아마 통계기반 언어들의 특징인것 같다. 통계를 위한 데이터들을 나타낼 때 0번째는 의미가 없기 때문이 아닐까한다. 그럼 이제 벡터, 행렬, 배열, 리스트, 데이터 프레임등 열거형 데이터의 인덱싱을 알아보자! 벡터 인덱싱 벡터는 다른 언어와 마찬가지로 [](대괄호)를 사용한다. test.vector = 1:8 test.vector[1]..
기본형(primitive type)과 참조형(reference type) 데이터를 담는 변수의 선언, 초기화, 할당 과정을 메모리 측면에서 이해하고 가변형(mutable type)과 불변형(immutable type)의 의미를 파악해보자. 데이터 타입과 가변성, 불변성 어떤 언어를 배우든 가장 먼저 변수를 배우게 됩니다. 이를 공부하다 보면 mutability와 immutability라는 단어를 마주하게 됩니다. 가변성 불변성이라고 번역되지만 불변하다고 하는데 값을 바꿀 수 있는 것 같고... 의미가 잘 와닿지 않습니다. 메모리의 관점에서 변수의 생성 과정을 보는 것이 불변, 가변의 의미를 이해하는데 조금은 도움이 될 수 있습니다. Js에서 데이터의 타입에 따른 변수의 선언, 초기화, 할당 과정을 메모리..
· Languages/R
R언어에는 다른 언어에는 없는자료형이 있다. 처음 접했다면 각 자료형끼리는 어떤 차이가 있는지 어떻게 사용해야하는지 헷갈린다. R에만 있는 자료형들을 중점으로 각 자료형의 사용법을 알아보고 예제를 통해 익혀보자. R은 통계를 위한 언어이다. R은 통계를 위해 태어났다. 아무리 파이썬이 데이터 시각화에 좋다고 하더라도 한 우물만 파는 R에는 안된다. 여러 분포함수와 통계함수를 지원하기 때문이다. data frame 만 봐도 그렇다. 딱 봐도 통계를 위해 존재한다. 따라서 R의 장점을 제대로 활용하기 위해서는 R에만 있는 것 들을 잘 다룰 수 있어야한다. R의 장점을 활용하지 못한다면 R을 쓰는 이유가 없다. 자주 헷갈리는, R에만 있는 자료형에 집중하며 데이터 형식을 알아보자. 이 글에서는 vector, ..
· Languages/R
통계를 위한 R언어를 배워보자 Matlab 안녕~ Why R? R언어는 통계적 계산과 그래픽에 특화되어 있는 오픈소스 언어이다. R은 많은 통계 모델과 데이터를 제공하는데 이를 이용해 통계적 분석을 해보며 사용법을 익혀보자! 이 글에서는 R의 아주 기본적인 내용만 대충 다룰 예정이다. 필자는 에디터로 Rstudio를 사용했다. R언어 기본 R언어를 시작하기전에 R언어는 내장함수 검색이 아주 편리하다. 함수의 사용법, 매개변수 혹은 함수 사용법이 궁금하다면 다음과같이 검색할 수 있다. 아주 편리한 방법이니 자주 사용하길 바란다. (1) ?mean - help(mean)과 같다. 키워드에 대한 설명을 보여주고 특수문자, 기본연산자도 검색이 가능하다. 함수명이 아닌 키워드는는 ""로 감싸 검색해야한다. (2)..
var와 let의 차이를 공부하다 나온 호이스팅과 TDZ에 대해 알아보자. 호이스팅과 TDZ 호이스팅과 TDZ로 인해 기존에 다른 프로그래밍 언어를 배운 사람들은 Js코드가 이상하다고 느낀다. 나도 그랬다. 하지만 Js를 쓰다보면 호이스팅덕분에 더 편한것 같다. 호이스팅 (hoisting) Js는 함수의 코드를 실행하기 전에 함수 선언에 대한 메모리부터 할당한다. 덕분에 스크립트내에서 함수 선언의 위치는 중요하지 않다. 스크립트내에서 함수 호출을 함수 선언보다 먼저 해도 문제가 없다. 또 호이스팅은 스코프 단위로 일어난다. 예를 보며 이해해보자. callFunc();// 함수 호출 function callFanc() { console.log("나 함수!"); } // 함수 선언 가장 처음 배운 언어가 C..
thecloer
'Languages' 카테고리의 글 목록