본문 바로가기

프로그래밍/TypeScript

(11)
11. 제네릭 11. 제네릭 any로 타입을 느슨하게 만들 경우 유연하지만, 특정 타입으로 강제하지 않아 타입 안전성이 떨어진다. 그렇다고 string 타입으로 지정하면, 유연성이 떨어진다. 제네릭을 사용하여 유연함과 타입 안전성의 장점을 모두 취할 수 있다. - 제네릭의 장점 1. 타입 검사를 컴파일 시간에 진행하여 타입 안전성을 보장한다. 2. 캐스팅 관련 코드를 제거할 수 있다. 3. 제네릭을 이용하면 재사용이 가능한 코드를 만들 수 있다. ----------------------------------------------------------- function arrayConcat (array1: T[], array2: T[]): T[] { return array1.concat(array2); } let arr..
10. 타입선언과 변경, 호환 10.타입선언과 변경, 호환 10.1.1 타입 에일리어스 단일 타입에 대해 타입 에일리어스를 선언해서 사용하는 것은 직관적이지 않습니다. - 타입 에일리어스를 이용한 유니언 타입 선언 ------------------------------------------- type myId = string; type myAlias = string | undefined; type User = { id: myId; alias?: myAlias; city: string; }; let id1: User = { id: "happy1", city: "seoul" }; let id2: User = { id: "happy2", alias: undefined, city: "busan" }; let id3: User = { id: ..
09. 고급 타입 09. 고급 타입 9.1 유니언 타입과 타입 가드 유니언 타입은 여러 타입을 받을 수 있다는 장점이 있습니다. 하지만, 여러 타입을 받음으로서 타입을 확신할 수 없다는 문제도 있습니다. 따라서 매개변수가 유니언 타입일 때 안전한 값을 할당하려면 타입 검사를 거쳐야 합니다. 이처럼 유니언 타입에 대해 타입검사를 통해 타입 안정성을 주는 방법을 타입가드 라고 합니다. 타입 가드(type guards) typeof나 instanceof 연산자를 사용해 타입 질의를 한 후 명시된 타입과 일치하는지 검사합니다. --------------------------------------------------------- //union-typeof.ts function myIndexOf(x: number | string,..
08.모듈 08. 모듈 : 독립 가능한 기능의 단위 자주사용하는 공통 기능을 모듈로 정의해 사용하면, 앱의 수정없이 모듈의 수정과 교체만으로 코드를 효과적으로 수정할 수 있습니다. 장점 1) 유지보수가 쉬워진다. : 중복 코드 개선 2) 전역 스코프 오염 방지 : 전역 스코프는 global namespace 이므로 변수나 함수이름을 중복해서 선언할수 없습니다. 모듈 내부에 변수나 함수를 선언하면 namespace가 파일 단위로 제한되어 global namespace를 침범하지 않습니다. 3) 재사용성 reusability : 모듈은 프로젝트에서 자주 사용되는 공통기능으로 자주 호출될 가능성이 높습니다. 모듈화를 잘 해두면 다른 프로젝트에도 공유해 지사용하 수 있습니다. - modular programming 1) ..
07.클래스와 인터페이스 기반의 다형성 7.3.3 클래스와 인터페이스 기반의 다형성 1. 클래스의 다형성 --------------------------------------------------------- class Planet { public diameter: number; // 지름 public isTransduction: boolean = true; // 공전 getIsTransduction(): boolean { return this.isTransduction; } stopTransduction(): void { console.log("stop1"); this.isTransduction = false; } } class Earth extends Planet { public features: string[] =["soil", "wat..
07. 클래스와 인터페이스 7.2 인터페이스 인터페이스는 자바스크립트(ES6)에서는 지원하지 않습니다. 인터페이스는 타입이며 컴파일 후에는 사라집니다. 추상클래스는 선언과 구현이 모두 존재하지만, 인터페이스는 선언만 존재합니다. 멤버 변수와 함수를 선언할 수 있지만, 접근제한자는 설정할 수 없습니다. 자식 인터페이스는 여러 부모 인터페이스를 다중상속할 수 있습니다. 7.2.2 인터페이스의 역할과 컴파일 결과 분석 자바스크립트 객체는 구조를 고정할 수 없고 쉽게 변화하는 특성이 있습니다. 객체는 유지보수와 확장, 안정성을 고려해 선언과 동시에 고정할 필요가 있습니다. 인터페이스를 이용하면 객체의 구조를 고정할 수 있습니다. 인터페이스는 컴파일 과정에서 타입 검사의 용도로 사용되고, 컴파일 후에는 제거됩니다. P.208 인터페이스 사..
06. 함수 06. 함수 태초에 javascript에 기명함수와 익명함수가 있었다. 기명함수의 경우 var와 마찬가지로 hoisting 문제가 발생했다. ex) myFunction(1, 2); function myFunction(a, b) {} // 함수 선언부 전에 함수 호출이 가능해져 코드가 복잡해지는 문제 이를 해결하기 위한 방법은 변수에 익명함수를 할당하는 것이다. ex) let resultMultiple = function(a, b) { return a * b; } // 익명함수는 함수 선언 전에는 호출이 불가하다. TypeScript는 함수의 매개변수와 반환타입에 모두 타입을 명시하여 함수내부에 타입 검증을 하는 불필요한 코드를 삭제하거나, 의도치 않은 캐스팅에 대비하도록 한다. function max(x..
04. 조건문, 제어문 / 05. 연산자 04. 조건문, 제어문 1. for number type -> 0 : false, else : true string type -> "" : false, else : true for in : index for of : value for (let index in array) { } for (const value of array) { } for of 의 경우 변수에 const를 쓸 수 있다. 일반 for문에서는 const를 사용하면 상수값이 바뀌지 않기때문에 무한루프를 돈다. 하지만 for of 문은 Symbol.iterator의 구현을 통해 각 이터레이션 값의 요소를 가져오기 때문에 const를 사용할 수 있다. 2. map, set map, set은 ES5로 컴파일되지 않는다. 하지만 map을 사용하지 않..