본문 바로가기

전체 글

(291)
[수치해석 08] 특수 행렬과 Gauss-Seidel법 특정 행렬들은 특수한 구조를 가지고 있는데, 이런 행렬들을 특수 행렬이라고 부른다. 띠행렬 주 대각선을 중심으로 한 띠(band)를 제외한 모든 요소가 0인 정사각형 행렬. 주 대각선의 원소 중 일부가 0인지 여부와는 관계 없이, 띠를 제외한 요소가 0이면 된다. 피벗화(행끼리 위치를 바꾸는 것)가 필요하지 않다면, 0인 요소에 대해서는 연산을 수행하지 않는 알고리즘이 가능. 대역폭(bandwidth, BW)과 반대역폭(half-bandwidth, HBW)는 다음과 같은 관계를 만족한다. BW = 2HBW + 1 삼중대각 시스템 띠의 폭이 3인 띠행렬로, Thomas 알고리즘에 의해 해를 구할 수 있다. Thomas 알고리즘 삼중대각 시스템의 해를 구하는 알고리즘으로, O(n)의 시간 복잡도를 지닌다. ..
[자바스크립트] 자바스크립트 엔진 01 생각하다 보니, 자바스크립트를 사용하면서도 실제로 이 언어가 어떻게 작동하는지에 대해서는 생각해 본 적이 없었다. 당연한 이야기지만, 컴퓨터는 프로그래밍 언어 자체를 인식하지는 못한다. 기본적으로 프로그래밍 언어는 사람의 사용을 목적으로 만들었기 때문에, 이를 기계어로 번역하는 과정이 필요하다. 이 시점에서 나는 자바스크립트의 경우 어떻게 변환과정을 거치는지에 대해 궁금해졌다. 자바스크립트에 대해 우선, 자바스크립트가 무엇인지 생각해보자. 자바스크립트는 ECMA-262의 사양을 구현하는 언어로, 비영리 표준화 단체인 ecma의 TC39 위원회에 의해 관리되고 있다. 사양은 일종의 인터페이스라고 볼 수 있는데, 사양을 구현한다는 의미는 자바스크립트가 ECMA script라는 인터페이스를 만족하도록 구현되었..
[타입스크립트] 유틸리티 타입 part 1 이전에 언급했던 Partial 유틸리티 타입처럼, 타입스크립트 자체적으로 지원해주는 많은 유틸리티 타입이 존재한다. 이번에는 이렇게 프로그래머를 도와주는 유틸리티 타입에 대해 공부할 예정이다. Documentation - Utility Types Types which are globally included in TypeScript www.typescriptlang.org # Partial Type 집합의 프로퍼티를 선택적으로 설정한 타입을 생성한다. 유저가 계정을 생성하는 경우를 생각해보자. 우리는 계정을 생성할 때 ID, 비밀번호, 이름, 이메일 등의 정보를 필수적으로 수집한다. 이 정보들은 반드시 필요한 값들이므로, null 또는 undefined로 설정되어서는 안된다. 이 경우, 이러한 프로퍼티들을..
[타입스크립트] Partial 유틸리티 타입 예전에 nestjs 관련 강의를 듣다가 타입스크립트에 Partial 같은 유틸리티 타입이 존재한다는 사실을 알게 되었다. Partial 유틸리티 타입은 대상이 되는 집합의 모든 프로퍼티를 선택적으로 변환한다. 예를 들어 Partial 이라면, Human의 모든 프로퍼티는 선택적(?을 이용하여 표기하는 것)으로 바뀐다. 구체적인 예시를 들어보자. 특정 유저의 정보를 변환하는 update 메서드가 있다. 이 메서드는 UserEntity라는 유저의 프로퍼티를 정의한 클래스를 input으로 받아들이는데, 해당 유저의 다양한 프로퍼티 중 실제로 업데이트가 필요한 프로퍼티만을 객체를 통해 전달하도록 동작하게 만들고 싶다. UserEntity 및 update는 아래와 같다. 이때 몇가지 제한을 걸자. UserEnti..
[타입스크립트] Generics . 제네릭 C++, C#, Java 같은 언어들에서는 컴포넌트의 재사용성을 증진시키기 위해 template, 혹은 generic 문법을 지원한다. 타입스크립트에서도 이런 편리성을 위해 제네릭 문법을 지원한다. Documentation - Generics Types which take parameters www.typescriptlang.org 타입스크립트의 근원이 되는 자바스크립트는 기본적으로 동적 타입 기반의 언어이므로 제네릭 문법이 필요하지 않다. 우선 특정 변수나 객체의 타입을 명시하는 방법이 언어 측면에서 지원되지 않고, 특정 타입을 함수 등의 인수에 강제하지도 않기 때문이다. 단지 해당 인수의 기능을 외워 함수 안에서 구현하기만 하면 된다. function howAreYou(arg: string): str..
[타입스크립트] Narrowing 타입스크립트는 자바스크립트의 superset으로, 현재까지는 웹에서 타입스크립트 코드를 바로 사용하는 방법이 존재하지 않는다. ts-node도 컴파일을 거치지는 않더라도 자바스크립트 코드로 변환하여 node에게 전달하고 있다. 이때 타입스크립트의 토대가 되는 자바스크립트는 기본적으로 동적 타입을 채택하고 있으므로, 함수의 매개변수의 타입이 한정되지 않으며, 이로 인해 내부적으로 타입을 검사하는 코드가 존재하지 않는 경우 any로 취급된다. 이에 비해 타입스크립트는 정적 타입 시스템을 채택하고 있기 때문에, 함수의 매개변수를 명확히 한정할 수 있고, 함수 내부에서는 한정된 타입으로 동작하여, 자동완성 기능이 잘 작동하는 편이다. 이렇듯 타입스크립트는 자바스크립트와 채택하는 타입 시스템이 다르므로, if~e..
[수치해석 07] LU분해법과 역행렬 LU 분해법 하나의 행렬 A를 주대각성분이 1인 하삼각행렬 L, 상삼각행렬 U로 나누는 것 [A] = [L][U] 계수 [A]는 같고, 우변만 달라 여러 방정식의 해를 구해야 할때, 각 방정식의 해를 O(n^2)으로 구할 수 있다. [A]{X} = {B1} [A]{X} = {B2} ... 가우스 소거법을 이용한다. 해를 구하는 과정 1. LU 분해 단계 [A]를 [L][U]꼴로 분해한다. 행렬에 대해 가우스 소거법을 적용하여 상삼각행렬을 만들고, 이때 발생하는 계수들로 하삼각행렬을 구성한다 저장공간 활용을 위해 다음과 같이 저장할 수 있다. 알고리즘 2. 대입 단계 [L] 과 [U] 를 이용하여 벡터 {B} 에 대한해 {X}를 구한다. [A]{X} = {B} ⇒ [L][U]{X} = {B} : [A]를 ..
[타입스크립트] express 를 typescript와 사용하기 express는 자바스크립트와 사용해도 충분히 좋은 프레임워크이다. 하지만 특정 부분에서 자동완성이 작동하지 않기 시작하면서부터 나 자신에게 기억력 테스트를 요구하게 되며, 이로 인한 사기 저하를 뼈속 깊이 느끼게 된다. 특히 함수를 작성할 때 이런 감정을 느꼈는데. express에서 미들웨어를 분리하는 순간부터 req, res, next에 어떤 값이 들어있는지 빈약한 머리 수준으로는 알 방법이 없어 몇번씩 되돌아 보는 등, 삽질을 한 경험이 있다. 타입스크립트를 사용하면 위와 같은 눈물나는 상황은 나오지 않는다. 타입을 명시하여 자동완성이 잘 지원되기 때문이다. express에 이런 특징을 도입하여 좀더 편하게 사용해보자. @nodes/express 설치 npm init -y // 프로젝트를 defau..