[1] TypeScript 4주차 강의 정리
1. object literal
(1) key - value pair, json 형식
(2) enum은 상수로 이루어져 number, string 값만 대입할 수 있음.
1) 간단한 상수값을 그룹화
2) 각 멤버의 값이 변하면 안 됨
(3) 객체 리터럴은 어떤 타입의 값도 대입할 수 있는 유연한 구조
1) 멤버의 값이나 데이터 타입을 변경 가능함
2) 복잡한 구조와 다양한 테이터 타입을 사용할 때
2. 유틸리티 타입
(1) Partial<T>
1) T : 제네릭 => Person을 넣고 싶으면 Partial<Person>
2) 타입 T의 모든 속성을 선택적으로 만드는 것
3) 일부 속성만 제공하는 객체를 생성할 수 있음
: field에는 최소 1개의 인자 ~ 전체 속성, 없는 속성을 추가할 수는 없음
(2) Required<T>
1) 타입 T의 모든 속성을 필수적으로 만드는 것
2) 선택적 속성을 정의해놨을 때, 이 속성을 필수로 받아야한다고 하면 Required<T>로 선언
(3) Readonly<T>
1) 타입 T의 모든 속성을 읽기 전용으로 만드는 것
2) readonly 타입으로 구성된 객체가 아니어도 완전한 불변 객체로 상수화할 수 있음.
3) mutable : 가변적인 설정, immutable : 불변적인 설정
(4) Pick<T, K>
1) 타입 T에서 K 속성들만 선택해서 새로운 타입을 만드는 것
2) Pick<Type, “property1” | “property2”>
(5) Omit<T, K>
1) 타입 T에서 K 속성들만 제외한 새로운 타입을 만드는 것
2) 속성이 많아서 Pick으로 선택하는 것보다 제외하는 것이 더 효율적일 때 사용
[2] TypeScript 4주차 강의 정리
1. class
(1) class : 붕어빵 틀 => 객체를 만들기 위한 틀
(2) 객체 : 각각의 붕어빵 => 클래스를 기반으로 생성되며 인스턴스라고도 함.
(3) class는 속성과 메서드를 정의
1) 속성 : 객체의 성질을 결정
2) 메서드 : 객체의 성질을 변화시키거나 제공하는 기능들을 사용하는 도구
(4) OOP에서 가장 중요한 개념
2. TypeScript에서 정의하는 방법
(1) class는 class 키워드로 : class Type { }
(2) 객체는 new 키워드로 : const type = new Type( )
(3) constructor (생성자)
1) 클래스의 인스턴스를 생성하고 초기화하는 데 사용되는 메서드
2) 오직 하나만 존재
3. 접근 제한자
(1) TypeScript에서 클래스의 속성과 메서드에 접근을 제한하는 것
(2) 종류
1) public
: 클래스 외부에서도 접근이 가능, default
2) private
- 클래스 내부에서만 접근이 가능, 외부에서 속성을 변경할 수 없게 제한, 클래스의 속성
- 편집을 할 때는 getter/setter 메서드로
3) protected
: 클래스 내부와 클래스를 상속받은 자식 클래스에서만 접근이 가능
4. 상속
(1) base class/parent class -> sub-class/child class
(2) base class의 속성과 메서드를 상속받아 사용할 수 있음 = 복제
(3) 새로운 속성과 메서드를 추가적으로 정의할 수 있음
(4) TypeScript에서 상속을 이용하는 방법
class A { }
class B extends A { }
(5) super
: base class의 constructor를 호출
(6) overriding
: 부모 클래스의 함수를 새롭게 정의할 수 있음
(7) OOP에서 빠질 수 없는 개념
5. supertype, subtype
(1) any는 모든 것의 슈퍼타입
(2) casting은 타입을 변환을 하는 방법
1) upcasting : subtype -> supertype
- 타입 변환은 암시적으로 이뤄짐 = 자동으로
- 서브타입 객체를 슈퍼타입 객체로 다루면 유연하게 활용할 수 있음.
2) downcasting : supertype -> subtype
- as로 명시적으로 타입 변환을 해줘야 함
- 서브타입의 메서드를 사용해야 될 때
6. 추상 클래스
(1) 인스턴스화를 할 수 없는 클래스
: new class 로 정의할 수 없음
(2) 상속을 통해 자식 클래스에서 메서드를 제각기 구현하도록 강제
(3) 기본 메서드는 정의를 하지만, 핵심 기능의 구현은 전부 자식 클래스에게 위임
(4) TypeScript에서 추상 클래스를 이용하는 방법
abstract class A {
abstract function ( ) // 보통 한 개 이상의 추상 함수가 있음
}
(5) subclass에서 추상 함수를 반드시 정의해줘야 함.
7. 인터페이스
(1) TypeScript에서 객체의 타입을 정의
(2) 객체의 속성과 메서드를 정의
(3) 인터페이스를 구현한 객체는 인터페이스를 반드시 준수해야함 => 규약 + 타입
(4) 추상 클래스 vs 인터페이스
1) 추상 클래스
- 클래스의 기본적인 메서드는 정의할 수 있음.
- 단일 상속만
- 자식 클래스는 반드시 추상함수를 구현해야함.
- 기본 구현을 제공하고 상속을 통해 확장하고 싶다면
2) 인터페이스
- 객체의 구조만을 정의함
- 다중 상속, 여러 인터페이스를 구현할 수 있음.
- 인터페이스에 정의된 모든 메서드를 구현해야 함.
- 객체가 특정 구조를 준수하도록 강제하고 싶다면
8. 객체 지향 설계 원칙 S.O.L.I.D
(1) S (SRP) : 단일 책임 원칙
1) 클래스는 하나의 책임만 가져야 함
2) 5개의 원칙 중 가장 기본적이고 중요한 원칙!
3) 다른 클래스의 역할과 권한을 침범해서는 안 되고, 해당 클래스와 연관된 액션만 해야 함.
(2) O (OCP) : 개방 폐쇄 원칙
1) 확장은 opened, 수정은 closed
2) 기존 코드를 변경하지 않고 기능을 확장해야 함
3) 인터페이스나 상속을 통해서 가능함.
(3) L (LSP) : 리스코프 치환 원칙
1) 서브타입은 슈퍼타입을 대체할 수 있어야 함
2) 자식 클래스는 부모 클래스의 기능을 수정하지 않고도 호환되어야 함.
3) 이 자식은 부모를 따랐구나 알 수 있어야 함
(4) I (ISP) : 인터페이스 분리 원칙
1) 해당 클래스에 무의미한 메서드의 구현을 방지
2) 인터페이스를 필요한 만큼만 정의
3) 클래스도 필요한 인터페이스들을 구현
(5) D (DIP) : 의존성 역전 원칙
1) 웹 서버 프레임워크 내에서 많이 적용되는 원칙
2) Java의 Spring, Node의 Nest 등
3) 하위 수준 모듈 (클래스)보다 상위 수준 모듈(인터페이스)에 의존해야한다
'개발일지' 카테고리의 다른 글
20240326 TIL #64 (0) | 2024.03.27 |
---|---|
20240318 TIL #58 (0) | 2024.03.19 |
20240304 TIL #48 (4) | 2024.03.05 |
20240222 TIL #42 (2) | 2024.02.27 |
20240221 TIL #41 (2) | 2024.02.27 |