카일_

Programming

Programming/TypeScript

[TS] 클래스의 디자인 패턴 - 1

Singleton 패턴 Singleton 패턴은 애플리케이션 내에서 단 하나의 인스턴스만을 가지도록 보장하는 디자인 패턴이다. 이 패턴을 사용하면 전역 변수를 사용하지 않고, 객체 인스턴스를 공유하여 리소스를 절약할 수 있다. Singleton 패턴을 구현하는 방법은 다음과 같다. Singleton 클래스 생성 Singleton 패턴을 구현하기 위해, 먼저 Singleton 클래스를 생성한다. 이 클래스는 단 하나의 인스턴스만을 가질 수 있도록, private 생성자를 가지고 있다. class Singleton { private static instance: Singleton; private constructor() {} public static getInstance(): Singleton { if (!..

Programming/TypeScript

[TS] 클래스(Class)

Class(클래스) Class(클래스)는 객체를 생성하기 위한 템플릿(Template)이다. 클래스를 사용하면 객체의 속성과 메소드를 묶어서 쉽게 관리할 수 있다. TypeScript에서 클래스를 정의하는 방법은 다음과 같다. class ClassName { // 속성과 메소드 정의 } 위의 코드에서 ClassName은 클래스의 이름이다. 중괄호({}) 안에는 클래스가 가지는 속성(properties)과 메소드(methods)를 정의한다. 속성은 클래스의 데이터를 나타내며, 메소드는 클래스에서 수행하는 동작을 나타낸다. class Person { name: string; age: number; constructor(name: string, age: number) { this.name = name; thi..

Programming/Node.js

[Node] MongoDB와 Express를 이용한 간단한 서버 오픈

MongoDB 설정 회원가입 후 새로운 프로젝트 생성 New Project를 클릭 프로젝트명을 입력 후 Next를 클릭 Create Project 클릭하여 프로젝트 생성 클러스터 생성 Build a Database 클릭 DB의 무료요금제(M0)선택 후 리전(Region)은 한국 선택 후 클러스터명을 작성 후 Create를 클릭 연결 및 인증에 사용할 유저명과 비밀번호 설정 IP 엑세스 리스트에 0.0.0.0 추가 후 Finish Admin 권한 설정 Database Access에서 Actions의 EDIT클릭 Built-in Role Atlas admin으로 변경 클러스터에서 Application 연결 Database의 클러스터에서 Connect 클릭 Connect your application 클릭 N..

Programming/TypeScript

[TS] 함수(Function)

Function(함수) Function(함수)는 특정 작업을 수행하기 위한 코드의 블록이다. 함수는 특정한 입력 (인자)을 받아들이고, 그 입력에 따라서 일련의 계산을 수행한 뒤, 그 결과를 반환할 수 있다. 함수는 모듈화된 코드를 작성할 때 매우 유용하다. 함수는 함수의 인자와 반환 값의 타입을 명시할 수 있다. 이를 통해 함수의 사용자는 함수가 어떤 형태의 인자를 받고, 어떤 형태의 값을 반환하는지 미리 예측할 수 있으며, 이를 기반으로 코드를 작성할 수 있다. 함수의 인자와 반환 값의 타입 명시는 함수를 사용하는 코드의 안정성을 높여준다. 함수의 타입 명시는 함수 선언문 또는 함수 표현식에서 가능하다. 함수 선언문은 함수 이름과 함수 인자를 명시하여 함수를 정의하는 것이며, 함수 표현식은 함수를 변..

Programming/TypeScript

[TS] 타입 연산자(Type Operators)

Type Operators(타입 연산자) 타입스크립트(TypeScript)는 자바스크립트(JavaScript)의 상위 집합 언어로, 정적 타입(static type)을 지원한다. 타입스크립트는 변수, 함수, 객체 등의 값의 타입을 사전에 정의하고, 그것이 잘못 사용되는 것을 방지할 수 있다. 이 때, 타입스크립트에서는 다양한 Type Operators(타입 연산자)를 제공하여 타입 정의를 더욱 유연하게 할 수 있다. Union Type Operator: | (or) 유니언 타입 연산자는 | 기호로 표시된다. 이 연산자는 두 개 이상의 타입을 묶어서 하나의 타입으로 정의할 때 사용된다. 예를 들어, 문자열과 숫자 중에서 하나의 타입을 가지는 변수를 정의하려면 다음과 같이 작성할 수 있다. let myVar..

Programming/TypeScript

[TS] Never | Any | Unknown

Never never는 값이 결코 발생하지 않는 것을 나타내는 타입이다. 이는 함수나 메서드의 반환 타입으로 사용되거나, 변수나 매개변수의 타입으로 사용될 수 있다. 보통 never는 예외를 던지거나 무한 루프 등과 같이 실행이 끝나지 않는 경우에 사용된다. function throwError(message: string): never { throw new Error(message); } 위의 throwError 함수는 항상 예외를 던지므로, 반환 타입으로 never를 사용한다. 이렇게 never를 사용하면, 해당 함수를 호출한 코드에서는 반환값을 받지 않아도 되기 때문에, 예외를 던지는 것과 같은 예기치 않은 동작을 방지할 수 있다. 또한 never는 다른 타입의 서브 타입이 아니기 때문에, 모든 타입..

Programming/TypeScript

[TS] 고급타입(Advanced Types) - Mapped Types

매핑 타입(Mapped Types) 매핑 타입(Mapped Types)은 기존 타입을 변환하여 새로운 타입을 만들 수 있는 유틸리티 타입 중 하나다. 매핑 타입을 사용하면 기존 타입의 속성 이름, 타입 등을 변경하여 새로운 타입을 만들 수 있다. 매핑 타입의 구조는 아래와 같다. { [P in K]: T } 위 구조에서 P는 속성 이름의 타입, K는 P에 포함될 속성 이름의 타입을 의미하며, T는 속성의 타입을 나타낸다. interface Person { name: string; age: number; location: string; } 위 Person 인터페이스를 매핑 타입을 사용하여 다음과 같이 변환할 수 있다. type ReadonlyPerson = { readonly [P in keyof Pers..

Programming/TypeScript

[TS] 고급타입(Advanced Types) - 3

Recursive Types(재귀 타입) Recursive Types(재귀 타입)는 자기 참조하는 타입을 정의할 수 있도록 해준다다. 이는 트리, 그래프 등과 같이 반복적인 형태의 데이터 구조를 다룰 때 유용하다. 예를 들어, 다음과 같은 트리 구조를 타입으로 표현할 수 있다. type TreeNode = { value: number; left?: TreeNode; right?: TreeNode; } 위 타입 정의에서 TreeNode은 left와 right 프로퍼티가 자기 자신을 참조하는 타입이다. 이는 트리가 자식 노드를 가질 수 있기 때문에 가능하다. Recursive Types은 무한히 중첩될 수 있기 때문에, 끝없이 반복되는 형태의 데이터 구조를 다루기에 적합하다. 하지만 이를 사용할 때에는 주의..

Programming/TypeScript

[TS] 고급타입(Advanced Types) - 2

Literal Types(리터럴 타입) Literal Types(리터럴 타입)은 특정한 값 자체를 타입으로 사용하는 것을 말한다. 타입스크립트에서는 문자열, 숫자, 불리언 값 등의 Literal Types을 지원하며, 이를 통해 값을 정확하게 지정하여 유효성 검사나 코드의 가독성을 높일 수 있다. 예를 들어, 아래와 같이 문자열 'hello'를 타입으로 지정할 수 있다. let greeting: 'hello'; greeting = 'hello'; // OK greeting = 'hi'; // 에러: Type '"hi"' is not assignable to type '"hello"' 위 예시에서 greeting 변수는 문자열 'hello'를 타입으로 지정되어 있으므로, 다른 값인 'hi'를 할당하면 컴파..

Programming/TypeScript

[TS] 고급타입(Advanced Types) - 1

Generic Types(제네릭 타입) Generic Types(제네릭 타입)은 다양한 타입의 인자를 받아들이는 타입을 정의할 수 있게 해준다. 이를 통해 코드의 재사용성을 높이고 유연성을 확보할 수 있다. 예를 들어, Array는 여러 타입의 원소를 담을 수 있는 배열을 생성할 수 있다. 하지만 Array는 한 가지 타입만을 받아들이는 것이 아니라, string, number, boolean 등 다양한 타입의 원소를 담을 수 있다. 이런 경우, Array를 사용하기 위해서는 Array, Array와 같은 형태로 타입 인자를 전달해야 한다. function identity(arg: T): T { return arg; } let output1 = identity("myString"); // 타입 인자로 s..