목록공부/TypeScript (14)
저장을 습관화
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bzZdGl/btstLQgSjx8/Ie99NKGNL189yPB2snKO6K/img.png)
nest.js를 사용할때 유용한 패키지 데이터 타입을 변환할때 사용한다 설치 방법 $ npm install class-transformer 예를 들어, 영화의 정보 등을 작성하는 API를 만들었다고 가정하자. body에는 "title", "year", "genres"를 입력하도록 하였다. 이때 데이터의 "id"는 기본적으로 number로써 저장된다. 그 후, URL에 ID를 입력하여 GET이나 UPDATE, DELETE를 하는 상황에서 localhost:3000/1 이라고 입력하였을때, 리퀘스트에 파라미터로써 들어가는 "id", 1의 데이터 타입은 string이다. 이 상태로는 파라미터 "1"과 실제로 저장된 데이터의 id "1"은 서로 데이터 타입이 다르므로 아래와 같은 상황이 발생한다. 이는 cont..
작업 환경: Windows 10, VSC 작업 목표: 도서관 관리 프로그램 주요 기능 - 권한: 도서 추가 기능 - 사서 도서 삭제 기능 - 사서 도서 대여 기능 - 유저 도서 반납 기능 - 유저 작업 기록 1. 환경 구축 $ npm init -y $ tsc --init --rootDir ./src --outDir ./dist --esModuleInterop --module commonjs --strict true --allowJS true --checkJS true --rootDir: 소스 파일이 들어가는 경로를 명시적으로 지정함 이번에는 ./src 디렉토리에 넣겠다고 하였음 -- outDir: 컴파일된 파일이 tsc로 되면 TS파일이 JS 파일로 나올것임 여기서는 ./dist 디렉토리에 들어가게끔 하..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/tRpec/btspNO7Wc1M/UqaMTNIugN9ZyC3rtKNbc0/img.png)
1. S(Single Responsibility Principle, 단일 책임 원칙) SOLID 중에서 가장 중요한 사항이다. 하나의 클래스는 다른 클래스의 역할과 권한을 침범해서는 안되며, 하나의 클래스가 해야하는 역할과 권한은 해당 클래스만 가질 수 있도록 보장되어야 한다. 잘못된 예시) class UserService { constructor(private db: Database) {} getUser(id: number): User { // 사용자 조회 로직 return this.db.findUser(id); } saveUser(user: User): void { // 사용자 저장 로직 this.db.saveUser(user); } sendWelcomeEmail(user: User): void { ..
1. 인터페이스란 타입스크립트에서의 인터페이스는 객체의 타입, 객체가 가져야 하는 속성과 메서드를 정의한다. 인터페이스를 구현한 객체는 인터페이스를 반드시 준수하여야 한다는 규약이 있어 어길 수 없다. C나 자바같은 정적언어에서는 어떠한 메소드로 구현되어야 하는지만 정의하지만 타입스크립트의 인터페이스는 규약과 타입까지도 정의하기에 코드의 안정성과 유지 보수성을 향상시킬 수 있다. 2. 추상 클래스와 인터페이스의 차이 1) 구현부 제공 여부 - 추상 클래스 클래스의 기본 구현을 제공 - 인터페이스 객체의 구조만을 정의하고 기본 구현은 제공하지 않음 2) 상속 메커니즘 - 추상 클래스 단일 상속만 지원한다. - 인터페이스 다중 상속을 지원한다. 즉, 하나의 클래스는 여러 인터페이스를 구현할 수 있다. 3) ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bGewio/btspFLYyfZ1/GdqWKF54eG6plTC2rDBsC1/img.png)
1. 추상 클래스란 추상 클래스는 일반적인 클래스와는 다르게 인스턴스화를 할 수 없다.(붕어빵의 틀로써 사용할 수 없다.) 2. 추상 클래스의 존재 이유 이러한 추상 클래스의 목적은 상속을 통해 자식 클래스에서 메서드를 제각각 구현하도록 강제하기 위해서이다. 최소한의 기본 메서드까지는 정의 해주지만, 핵심 기능의 구현은 자식 클래스에게 위임한다. 3. 추상 클래스 사용 방법 추상 클래스 및 추상 함수는 abstract 키워드를 사용하여 정의하며, 추상 클래스는 1개 이상의 추상 함수가 있는 것이 일반적이다. 사용 예시) abstract class Shape { // 추상 클래스 정의 abstract getArea(): number; // 추상 함수 정의 printArea() { console.log(`도..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/MwAHq/btspBzxpkE4/RK3OQ2eJhMKFQWh4OR95Wk/img.png)
1. 상속 객체 지향 프로그래밍에서 클래스(붕어빵 틀)들 간의 관계를 정의한다. 상속을 통해 기존 클래스(베이스 클래스 or 부모 클래스)의 속성과 메서드(속이 팥인지 슈크림인지)를 물려받아 새로운 클래스를 정의할 수 있다. 상속이 있기에 똑같은 코드를 반복적으로 작성할 필요가 없다. 상속을 구현하려면 extends 키워드를 사용한다 사용 예시) class Animal { name: string; constructor(name: string) { this.name = name; } makeSound() { console.log('동물 소리~'); } } class Dog extends Animal { // Animal 클래스와 객체, 메소드가 동일 age: number; constructor(name: ..
https://ctrs.tistory.com/120 메모 - 객체지향의 가장 기본적인 예시 class 붕어빵 { 내용물; 가격 = 500; constructor(내용물, 가격) { this.내용물 = 내용물; if (가격) this.가격 = 가격; } 할인() { this.가격 = this.가격 * 0.8; } } const 붕어빵1 = new 붕어빵("팥"); console.log(붕어빵1); // ctrs.tistory.com 가장 흔하게 쓰이는 예시인 붕어빵을 이야기 하자. 1. 클래스 붕어빵 틀이 클래스라면, 이 틀로 찍어 만들어낸 붕어빵은 객체라고 할 수 있다. 클래스는 객체를 만들기 위한 틀(template)이다. - 클래스의 구성 요소 클래스에서는 같은 종류의 객체들이 공통으로 가지는 속성(..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/GTevl/btsplaq05eZ/l2Gobkkm5z2IGdDEqn3PqK/img.png)
작업 환경: Windows 10, VSC 작업 목표: 카페 관리 프로그램 만들기 주요 기능 - 권한: 음료 등록 기능 - 어드민 음료 삭제 기능 - 어드민 음료 조회 기능 - 어드민, 고객 음료 주문 기능 - 고객 음료 준비 완료 기능 - 어드민 음료 수령 기능 - 고객 작업 기록 1. 환경 구축 $ npm init -y $ tsc --init --rootDir ./src --outDir ./dist --esModuleInterop --module commonjs --strict true --allowJS true --checkJS true --rootDir: 소스 파일이 들어가는 경로를 명시적으로 지정함 이번에는 ./src 디렉토리에 넣겠다고 하였음 -- outDir: 컴파일된 파일이 tsc로 되면 T..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/kPRM8/btspl62SNRh/cWTNJ3JwV9keaCJMDTNBUK/img.png)
1. Partial partial: 부분적인, 불완전한 타입 T의 모든 속성을 선택적으로 만든다. 사용 예시 위 코드에서 인터페이스 Person은 name, age 두 속성을 가지고 있다 함수 updatePerson은 2번째 인자로 Partial 타입의 field를 받고 있다. 이 field의 인자가 구성될 수 있는 경우의 수는 다음과 같다. 1) name이라는 속성만 있을 것 2) age라는 속성만 있을 것 3) name, age 속성 둘 다 있을 것 이 외의 상황은 허용되지 않는다. { id:blah, gender: blahblah } 등 기존에 없는 속성을 넣어서는 안된다. 2. Required require: 필요하다, 요구하다 required: 필수의 모든 속성을 필수적으로 만든다. 즉, 타입 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/wdRyZ/btspfkan4Tj/Fa9xyow8b4VS4jE1El51yk/img.png)
가변적인 타입의 데이터를 저장해야할 때 1. any string, number, boolean, tuple, enum.. 모든 타입의 최상위 타입 어떤 타입의 값이든 저장할 수 있어 어떠한 타입이 와야할지 판단하기 어려운 경우 사용 자바스크립트의 object 타입과 같은 역할 사용 예시 언뜻 편리해보일 수도 있으나 사람들이 타입스크립트를 사용하는 가장 큰 이유인 '타입 안정성 확보'가 희미해지게 된다. 코드의 안정상과 유지 보수성을 낮출 수 있으므로, 가급적이면 사용하지 않도록 하자. 2. unknown any 타입과 비슷하게 모든 타입의 값을 저장할 수 있으며 그 값을 다른 타입의 변수에 할당하려면 명시적으로 타입을 확인하여 더 안전하다. 사용 예시 위와 같이 stringValue = unknownVa..