본문 바로가기

개발일지

20240305 TIL #49

[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