TIL (2023/09/02) Saturday
새로 알게된 (깊게는 모르지만 존재한다는 것을) 컨셉들
- CICD
- Typescript
물론! TypeScript와 JavaScript는 둘 다 프로그래밍 언어로서 많은 공통점이 있지만 몇 가지 중요한 차이점이 있습니다.
- 정적 타입 vs. 동적 타입:
- TypeScript는 정적 타입 언어이며, 변수의 데이터 유형을 선언하고 컴파일러가 이를 검사합니다. 이는 코드에서 유형 관련 오류를 미리 잡을 수 있도록 도와줍니다. 동적 타입 언어인 JavaScript에서는 이러한 타입 검사가 실행 시간에 이루어집니다.
- 타입 어노테이션:
- TypeScript에서는 변수의 데이터 유형을 명시적으로 어노테이션(annotation)으로 선언합니다. 이를 통해 개발자와 컴파일러가 변수의 타입을 이해하고 오류를 방지할 수 있습니다. JavaScript에서는 이러한 어노테이션을 사용하지 않습니다.
- 컴파일러:
- TypeScript 코드는 컴파일러를 통해 JavaScript 코드로 변환됩니다. 이렇게 변환된 코드가 브라우저나 Node.js에서 실행됩니다. JavaScript는 직접 실행됩니다.
- ES6+ 표준 지원:
- TypeScript는 JavaScript의 최신 표준(ES6, ES7, ES8 등)을 완전하게 지원합니다. 따라서 TypeScript 코드는 JavaScript 코드와 호환되며, JavaScript 라이브러리와 함께 사용하기가 더 편리합니다.
- 타입 시스템:
- TypeScript에는 인터페이스, 제네릭, 열거형 등과 같은 고급 타입 시스템이 내장되어 있습니다. 이를 사용하여 코드의 가독성과 안정성을 높일 수 있습니다.
- 에러 처리:
- TypeScript는 컴파일 시간에 발견되는 많은 오류를 감지합니다. 이는 런타임 오류를 줄이고 안정성을 향상시킵니다.
- 개발 생산성:
- TypeScript는 큰 코드베이스와 협업 프로젝트에서 특히 유용합니다. 정적 타입 검사와 문서화가 개발자 간의 의사소통을 쉽게 만들어줍니다.
- 선택사항:
- TypeScript는 JavaScript의 상위 집합으로, 기존 JavaScript 코드와 함께 사용할 수 있습니다. 따라서 TypeScript를 사용할지 여부는 프로젝트에 따라 선택사항입니다.
요약하면, TypeScript는 정적 타입, 타입 어노테이션, 타입 시스템 등을 제공하여 개발자에게 코드 안정성과 가독성을 제공하며, 컴파일러를 통해 JavaScript로 변환됩니다. JavaScript는 동적 타입 언어로서 컴파일 과정이 없으며, 브라우저와 Node.js에서 직접 실행됩니다.
고급 타입 시스템은 TypeScript에서 제공하는 기능으로, 코드의 가독성과 안정성을 높이고, 재사용성을 높이는데 도움을 줍니다. 여기서는 TypeScript의 몇 가지 고급 타입 시스템 요소에 대해 간단히 설명하겠습니다.
- 인터페이스 (Interfaces):
- 인터페이스는 TypeScript에서 객체의 구조(속성과 메서드)를 정의하기 위한 방법입니다. 인터페이스를 사용하면 객체의 모양(shape)을 정의하고, 해당 모양을 따르는 다양한 객체를 만들 수 있습니다. 이는 코드의 가독성을 높이고 재사용성을 높이는데 도움이 됩니다.
typescriptCopy codeinterface Person { name: string; age: number; } const user: Person = { name: "Alice", age: 30 }; - 제네릭 (Generics):
- 제네릭은 데이터 유형을 추상화하여 코드의 재사용성을 향상시키는 방법입니다. 제네릭을 사용하면 함수나 클래스를 여러 데이터 유형에서 사용할 수 있게 됩니다. 이는 컨테이너 클래스나 제네릭 함수를 작성할 때 특히 유용합니다.
typescriptCopy codefunction identity<T>(arg: T): T { return arg; } const numberValue = identity(42); // number const stringValue = identity("Hello"); // string - 열거형 (Enums):
- 열거형은 숫자 또는 문자열 값 집합을 정의하는데 사용됩니다. 열거형을 사용하면 코드를 더 읽기 쉽게 만들고, 실수를 줄이며, 특정 값 집합을 표현하는데 도움이 됩니다.
typescriptCopy codeenum Color { Red = "RED", Green = "GREEN", Blue = "BLUE", } const selectedColor: Color = Color.Red;
이러한 TypeScript의 고급 타입 시스템 요소들은 코드를 더 견고하게 만들고, 타입 안정성을 높이며, 개발자가 더 효율적으로 작업할 수 있게 도와줍니다.
- 파사드 패턴
파사드 패턴(Facade Pattern)은 소프트웨어 디자인 패턴 중 하나로, 서브시스템의 복잡한 인터페이스를 단순화시키고 클라이언트에게 더 쉽게 사용할 수 있는 인터페이스를 제공하는 구조 패턴입니다. 이 패턴의 주요 목적은 복잡한 시스템을 단순화하고 사용자가 시스템과의 상호작용을 단순화하는 것입니다.
파사드 패턴은 다음과 같은 주요 구성 요소로 이루어집니다:
- 파사드 (Facade): 파사드는 서브시스템의 복잡한 기능을 감싸고 간단한 인터페이스를 제공하는 클래스입니다. 클라이언트는 주로 파사드를 통해 서브시스템과 상호작용하며 서브시스템 내부의 복잡성을 알 필요가 없습니다.
- 서브시스템 (Subsystems): 서브시스템은 파사드가 감싸는 복잡한 기능을 가진 클래스 또는 모듈의 집합입니다. 이러한 서브시스템은 각각 독립적으로 동작할 수 있으며 파사드를 통하지 않고도 사용될 수 있습니다.
- 클라이언트 (Client): 클라이언트는 파사드를 사용하여 서브시스템과 상호작용합니다. 클라이언트는 서브시스템의 복잡성을 숨기고 파사드의 간단한 인터페이스를 통해 작업을 수행할 수 있습니다.
파사드 패턴은 다음과 같은 장점을 제공합니다:
- 복잡한 시스템을 단순화하여 사용하기 쉽게 만듭니다.
- 시스템의 의존성을 줄이고 클라이언트와 서브시스템 간의 결합을 약화시킵니다.
- 코드 유지 및 확장을 쉽게 만듭니다. 새로운 서브시스템을 추가하거나 기존 서브시스템을 변경할 때 파사드만 업데이트하면 됩니다.
파사드 패턴은 주로 복잡한 라이브러리, 프레임워크 또는 API를 사용하는 경우에 유용하며, 사용자가 이러한 복잡성을 신경쓰지 않고 간단한 인터페이스를 통해 상호작용할 수 있도록 도움을 줍니다.