본문 바로가기

TypeScript

(18)
[TypeScript] 객체 지향 설계원칙 - S.O.L.I.D 객체지향 설계를 할때는 S.O.L.I.D 원칙을 따라서 설계하는것이 필수이다. 1. SRP 원칙 ⭐ 매우 중요 ⭐ - 클래스는 하나의 책임만 가져야 한다는 매우 기본적인 원칙이다. - 5개의 원칙 중 가장 기본적이고 중요한 원칙 - 예를 들어, 유저 서비스라는 클래스가 있다면 유저서비스에서는 유저 관련된 액션만 해야 함 잘못된 사례 : 유저 서비스에 생뚱맞게 이메일 전송 로직이 있음. 서비스 내에서 다른 서비스를 참조하는것은 지양해야 함. class UserService { constructor(private db: Database) {} getUser(id: number): User { // 사용자 조회 로직 return this.db.findUser(id); } saveUser(user: User):..
[TypeScript] 인터페이스 인터페이스 인터페이스는 TypeScript 에서 객체의 타입을 정의하는데 사용되며, 객체가 가져야하는 속성과 메서드를 정의한다. 인터페이스를 구현한 객체는 인터페이스를 반드시 준수해야 하며 이를 통해 코드의 안정성과 유지보수성을 향상시킬 수 있다. 추상 클래스와 인터페이스의 차이 1. 구현부 제공여부 추상클래스 : 클래스의 기본 구현을 제공 인터페이스 : 객체의 구조만을 정의하고 기본 구현을 제공하지 않음. 2. 상속 메커니즘 추상클래스 : 단일상속만 지원 인터페이스 : 다중상속을 지원, 하나의 클래스는 여러 인터페이스를 구현가능 3. 구현 메커니즘 추상클래스 : 추상 클래스를 상속받은 자식 클래스는 반드시 추상함수를 구현해야함 인터페이스 : 인터페이스를 구현하는 클래스는 인터페이스에 정의된 모든 메서드..
[TypeScript] 추상 클래스 추상 클래스 추상 클래스는 클래스와는 다르게 인스턴스화를 할 수 없는 클래스 추상 클래스의 목적 - 상속을 통해 자식 클래스에서 메서드를 제각각 구현하도록 강제를 하는 용도 - 물론 추상 클래스도 최소한의 기본 메서드는 정의할 수 있음. - 핵심기능의 구현은 전부 자식클래스에게 위임을 하는 것 추상클래스 사용방법 - 추상 클래스 및 추상함수는 abstract 키워들 사용 - 추상 클래스는 1개이상의 추상함수가 있는 것이 일반적 abstract class Shape { abstract getArea(): number; // 추상 함수 정의!!! printArea() { console.log(`도형 넓이: ${this.getArea()}`); } } class Circle extends Shape { rad..
[TypeScript] 상속 상속(inheritance) - 상속은 객체 지향 프로그래밍에서 클래스 간의 관계를 정의하는 중요한 개념 - 상속을 통해 기존 클래스의 속성과 메서드를 물려받아 새로운 클래스를 정의할 수 있음 - 상속이 있어서 똑같은 코드를 계속 반복적으로 작성할 필요가 없음. - 위의 예제에서 Car 라는 클래스를 생성했으면 무스탕, 골프와 같은 차량들은 Car 라는 클래스를 상속받고 자체적으로 필요한 속성 및 메소드를 추가하면 끝 - 상속을 구현하려면 extends 키워드를 사용하면 됨. class Animal { name: string; constructor(name: string) { this.name = name; } makeSound() { console.log('동물 소리~'); } } class Dog e..
[TypeScript] 클래스 클래스 클래스는 객체지향 프로그래밍 (OOP) 의 핵심 구성요소 중 하나로, 객체를 만들기 위한 틀(Template) 이다. 클래스의 구성요소 클래스에서는 같은 종류의 객체들이 공통적으로 가지는 속성(Attribute) 과 메서드(Method)를 정의한다. 속성 : 객체의 성질을 정의하는 것 ex) 붕어빵은 팥이란 속성이 있는 팥 붕어빵과 슈크림이라는 속성이 있는 슈크림 붕어빵이 있다. 메서드 : 객체의 성질을 변화시키거나 객체에서 제공하는 기능들을 사용하는 창구 ex) 붕어빵 주인은 팥 붕어빵에서 슈크림 붕어빵으로 전환할 수 있음, 붕어빵을 사는 고객들은 팥 붕어빵, 슈크림 붕어빵의 가격을 알 수 있음. 객체 객체란 클래스를 기반으로 생성되며 클래스의 instance 라고도 한다. 클래스 및 객체 정의..
[TypeScript] 프로젝트 세팅 1. 터미널을 열고 프로그램이 위치할 디렉토리 새로 생성 나는 보통 데스크탑에 만들어서, cd desktop -> mkdir [디렉토리명] -> cd [디렉토리명] 으로 접근 2. 다음의 명령어를 차례대로 입력 npm init -y 나는 노드 버전때문에 아래와 같이 최신으로 다운받아줘야 한다. nvm install node tsc --init --rootDir ./src --outDir ./dist --esModuleInterop --module commonjs --strict true --allowJS true --checkJS true --rootDir ./src : 프로그램의 소스 파일이 들어가는 경로는 src 디렉토리 --outDir ./dist : 컴파일이 된 파일들이 들어가는 디렉토리는 dis..
[TypeScript] 유틸리티 타입 1. Partial - 타입 T의 모든 속성을 선택적으로 만든다. - 기존 타입의 일부 속성만 제공하는 객체를 쉽게 생성할 수 있다. interface Person { name: string; age: number; } const updatePerson = (person: Person, fields: Partial): Person => { return { ...person, ...fields }; }; const person: Person = { name: "Spartan", age: 30 }; const changedPerson = updatePerson(person, { age: 31 }); Person 이라는 인터페이스는 name, age 라는 속성으로 구성된다. 위의 updatedPerson 함수..
[TypeScript] enum 과 object literal 비교 enum - enum 은 열거형 데이터 타입 - 상수의 그룹화를 위해서는 enum이 아주 좋은 타입이 됨. enum 의 장점 - 코드의 가독성을 높이고 명확한 상수값 정의 가능 - 컴파일 시에 자동으로 숫자값으로 매핑되어 따로 값을 할당할 필요가 없음 (특정 숫자 값으로 매핑되어야 한다면 그것은 직접 할당) enum UserRole { ADMIN = "ADMIN", EDITOR = "EDITOR", USER = "USER", } enum UserLevel { NOT_OPERATOR, // 0 OPERATOR // 1 } function checkPermission(userRole: UserRole, userLevel: UserLevel): void { if (userLevel === UserLevel.N..