Languages

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..
Why Js? 프로그래밍 언어를 배우다보면 결국 언어는 별게 아니라는 생각을 하게 된다. 중요한 것은 구조이고 언어는 수단일 뿐이다. 하지만 우리는 그 언어의 특성을 알때 언어의 장점을 극대화 하여 어떤 프로그램의 성능을 높일 수 있다. 언어를 잘 알아야 프로젝트에서 언어를 선택할때 어떤 언어를 사용할지에 대한 정확한 근거가 생긴다. 프론트앤드와 백앤드 심지어 데이터베이스까지 모든 분야에서 사용가능하다는 점에서 나는 javascript에 큰 매력을 느꼈고, 자세히 공부해 보려한다. Js는 풀스택이 되는 가장 빠른 선택일 것이다. Js를 배우고 프론트앤드, 백앤드, 데이터베이스의 전체 로직과 구조를 훑고 세부분야를 선택해 공부하며 필요에 따라 다른 언어와 프레임 워크를 공부할 계획이다. 이 모든 게획은 J..
thecloer
'Languages' 카테고리의 글 목록