타입스크립트를 처음 배워본 날! 뭔가 알것 같으면서도.. 조금 여러번 보고 써봐야 익숙해질 것 같다.
1. 타입스크립트 기본
1-1. 타입이 필요한 이유
- 타입스크립트는 런타임 단계에서 발생하는 타입 에러를 컴파일 단계에서 미리 확인하고 고칠 수 있음.
- 동적 타입 정적으로 선언 가능
- 타입 유추를 통한 타입 제어 가능
- 자바스크립트에서 찾을 수 없는 추가 코드 기능 제공
1-2. 타입스크립트 개요
타입스크립트의 기본 타입
기본 참조형(primitive type)
- string
- boolean
- number : 부동 소수값 저장 (2진수, 8진수, 10진수, 16진수 사용 가능)
- null
- undefined
- symbol
참조 자료형(reference type)
추가 자료형
- tuple
- enum
- any
- void
- never
1-3. Utility types
- 타입스크립트는 공통 타입 변환을 용이하게 하기 위해 유틸리티 타입을 제공.
- 유틸리티 타입은 전역으로 사용 가능
Partial<T>
: 프로퍼티를 선택적으로 만드는 타입을 구성, 주어진 타입의 모든 하위 타입 집합을 나타내는 타입을 반환.
Readonly<t>
: 프로퍼티를 읽기 전용으로 설정한 타입을 구성함.
Record<t>
: 프로퍼티의 집합K로 타입 구성함, 타입의 프로퍼티들을 다른 타입에 매핑시키는데 사용함.
Pick<T,K>
: 프로퍼티 K의 집합을 선택해 타입을 구성한다.
Omit<T,K>
: 모든 프로퍼티를 선택한 다음, K를 제거한 타입을 구성한다.
Exclue<T,U>
: T에서 U에 할당할 수 있는 모든 속성을 제외한 타입을 구성
Extract<T,U>
: T에서 U에 할당할 수 있는 모든 속성을 추출하여 타입을 구성.
NonNullable<T>
: null과 undefined를 제외한 타입.
Parameters<T>
: 합수타입 T의 매개변수 타입들의 튜플 타입을 구성한다.
ConstructorParameters<T>
: 생성자 함수 타입의 모든 매개변수 타입을 추출, 모든 매개변수 타입을 가지는 튜플타입(T가 함수가 아닌 경우 never)을 생성한다.
ReturnType<T>
: 함수 T의 반환 타입으로 구성된 타입을 생성함.
Required<T>
: T의 모든 프로퍼티가 필수로 설정된 타입을 구성.
1-4 TypeScript를 이용해 함수 사용하기.
함수 정의할 때 쓰는 변수 = 매개변수 = 파라미터
함수를 호출할 때 사용되는 값 = 인수
일급 객체
- 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체 = 일급객체
- 조건1. 다른 함수에 매개변수로 제공 할 수 있음
- 조건2. 함수에서 반환 가능
- 조건3. 변수에 할당 가능
- 자바스크립트와 타입스크립트의 함수는 일급객체임.
함수 선언식 vs 함수 표현식
타입스크립트에서 함수 사용하기
- 타입스크립트 함수 작성 시, 반환 타입을 추론하도록 하는 것을 권장
- 함수의 매개 변수와 인수의 탕비이 호환 가능하게 작성
- 인수의 타입을 잘못 전달하면 에러가 발생
타입 추론
- 타입 스크립트 컴파일러는 방정식의 한쪽에만 타입이 있더라도 타입을 추론할 수 있음.
- 이러한 타입 추론 형태를 "contextual typing" 이라고 함.
- 이를 통해 프로그램에서 타입을 유지하기 위한 노력을 줄일 수 있음.
1-5. 함수의 매개변수
기본 매개변수
- 함수에 주어진 인자의 수는 함수가 기대하는 매개변수의 수와 일치해야함.
선택적 매개변수
- 자바스크립트에서는 모든 매개변수가 선택적으로, 인수가 없으면 Undefined가 됨.
- 타입스크립트에서도 선택적 매개변수 사용 가능. (변수명 뒤에 '?')
기본-초기화 매개변수
- 타입스크립트에서는 값을 제공하지 않거나, undefined로 했을 때 매개변수의 값 할당 가능.
나머지 매개변수
- 컴파일러는 생략부호(...) 뒤의 인자 배열을 빌드해 함수에서 사용할 수 있음.
- 나머지 배개면수는 매개변수의 수를 무한으로 취급
- 아무것도 넘겨주지 않을 수도 있음.
2. 클래스
2-1. 객체지향 프로그래밍 (OOP)
객체지향언어 (OOP)
-
OOP는 컴퓨터 프로그램을 객체의 모임으로 파악하려는 프로그래밍 패러다임.
-
객체들은 서로 메시지를 주고받을 수 있으며 데이터를 처리할 수 있다.
-
장점 1) 프로그램을 유연하고 변경이 용이하게 함.
-
장점 2) 프로그램의 개발과 보수를 간편하게 만듦
-
장점 3) 직관적인 코드 분석을 가능하게 함.
-
객체 지향 프로그래밍의 중요한 특성 : 강한 응집력과 약한 결합력.
클래스 용어 설명
- 클래스의 요소
- 인스턴스 : new 연산자에 의해 생성된 객체.
2-2. 접근제어자 / 상속
접근제어자
- 속성 또는 메소드로의 접근을 제한하기 위해 사용.
- public > protected > private
- 자바와 다르게 package개념이 없어 default 접근 제어자는 존재하지 않음.
public
- 프로그램 내에서 선언된 멤버들이 자유롭게 접근 가능.
- 기본적 멤버는 public,
private
protected
- 멤버가 포함된 클래스와 그 하위클래스 외부에서의 접근을 막음.
상속
- OOP는 상속을 이용하여 존재하는 클래스를 확장해 새로운 클래스 생성 가능.
- extends 키워드로 Animal이라는 기초 클래스에서 Dog클래스가 파생됨.
- 파생된 클래스는 하위 클래서, 기초 클래스는 상위클래스
2-3. Getter & Setter / readonly / static
getter & setter
- 비공개로 설정하려는 속성은 private으로 설정하고, 속성값을 읽고 수정하는 getter/setter함수를 사용한다.
- 클래스 속성에 직접 접근하는 것을 막고, getter/setter함수를 사용해 값을 받아오거나 수정함.
- 속성에 직접 접근해 수정하면 데이터 무결성 깨짐 (캡슐화 권장)
- 각 객체의 멤버에 접근하는 방법을 세밀하게 제어 가능.
readonly
- 읽기만 가능한 속성을 선언하기 위해 사용
- 선언될 떄나 생성자에서 값을 설정하면 이후 수정 불가.
static
- 전역 멤버를 선언할 때 사용함.
- 전역 멤버 : 객체마다 할당되지 않고 클래스의 모든 객체가 공유하는 멤버
- "클래스명."을 앞에 붙여 static 멤버에게 접근할 수가 있음.
2-4. 추상클래스
추상클래스
- 추상 클래스는 다른 클래스들이 파생될 수 있는 기초 클래스임
- 직접 인스턴스화 할 수 없음
- abstract 키워드는 추상 클래스나 추상 메소드를 정의하는데 사용
- 추상 메소드는 클래스에는 구현되어있지 않고, 파생된 클래스에서 구현해야함.
추상클래스를 활용한 디자인 패턴
- 프로그램의 일부분을 서브클래스로 캡슐화해 전체 구조를 바꾸지 않고 특정 단계의 기능을 바꾸는 것을 디자인 패턴이라고 함.
- 전체적인 알고리즘은 상위 클래스에서 구현하고 다른 부부은 하위 클래스에서 구현함.
- 전체 구조는 유사하지만 부분적으로 다른 구문으로 구성된 메소드의 코드 중복을 최소화 할 수 있다.