#TIL_21.11.04

ISOJ·2021년 11월 4일
0

Today I Learned

목록 보기
36/43
post-thumbnail

React 심화

useImperativeHandle 사용자 정의 Hook

  • useImperativeHandle: 상위 컴포넌트에서 하위 컴포넌트를 이용하기 위한 함수들을 정의한 Hook
  • 라이브러리 등의 특수한 컴포넌트에서 상위 컴포넌트에서 하위 컴포넌트를 함수호출을 통해 제어하는 목적으로 사용
  • Ref 를 통한 제어

컴포넌트를 잘 설계하기 위한 방법

  • 컴포넌트를 어떻게 설계해야 하는가?
  • 모듈에서 중요한 것 ... 응집도 결합도

응집도

  • 모듈 내의 요소들이 서로 연관되어 있는 정도 ... 높을수록 좋은 설계
    공통 폐쇄 원칙: 같은 이유로 동일한 시점에 변경되는 기능을 하나의 모듈로 묶어야 한다는 원칙 ... 적은 수의 컴포넌트 / 재사용성 낮음
    공통 재사용 원칙: 모듈 내의 기능들은 함께 재사용이 될 수 있어야 한다는 원칙 ... 많은 수의 컴포넌트 / 재사용성 높음
    위 상반된 두 원칙을 상황에 따라 골고루 사용해야 좋은 설계 방법 ... 정답은 없음
  • 개발자의 수가 많다면 재사용성에서 이점을 가지는 공통 재사용 원칙이 더 유리할 수 있고, 개발자의 수가 적다면 컴포넌트 관리가 용이한 공통 폐쇄 원칙이 유리할 수 있다.

결합도

  • 다른 모듈과의 의존성에 대한 정도 ... 낮을수록 좋은 설계
    안정된 의존성 원칙: 더 안정된 모듈을 의존하자는 원칙
    안정된 추상화 원칙: 컴포넌트는 안정된 만큼 추상적이어야 한다는 원칙

타입스크립트 소개

  • 타입이 적용된 자바스크립트
  • 장점
    • 타입이 있다는 것 ... 안정성 / 컴파일 단계에서 미리 오류를 감지할 수 있음
    • 가독성이 좋음 ... 타입을 보고 해당 로직이 어떤 기능을 하는지 알기 쉬움
  • 단점
    • 초기설정이 필요함
    • 스크립트 언어의 유연성이 낮아짐
    • 컴파일 시간이 길어질 수 있음

타입스크립트의 문법

  • 타입 주석 / 타입 추론
    타입 주석: 변수, 상수, 반환 값의 타입을 나타냄
    let a: number = 1;
    타입 추론: 해당 변수가 어떤 타입인지 추론 (생락할 시, 컴파일 때 알아냄)
    let b = 2;
  • 인터페이스
    객체의 타입을 정의하는 방법 ... interface 라는 키워드로 사용 / Object 형식의 익명 인터페이스로 바로 할당해 줄 수도 있다.
interface ObjectName {
    	name: string;
        age: number;
        location?: string;
        // location? ... 선택 속성 (undefined 가 가능함)
        ...
}
  • tuple
    값을 묶는 방법 (배열)
    const tuple: [string, number] = ['string', 123];
  • Enum
    값을 열거하는 방법
enum Pruits {
	A = 'apple',
    B = 'banana',
    C = 'chery'
};

const pruit = Pruits.A;
  • 대수 타입
    여러 자료형의 값을 가질 수 있게하는 방법 ... 합집합 타입 / 교집합 타입
    교집합 타입은 원시 타입에서는 사용할 수 없음 (number 면서 string 불가능) ... interface 등에서 사용할 수 있음
합집합 타입
let numOrStr: number | string = 123 
// number 혹은 string 타입이 가능, 초기값은 number
    
numOrStr = 'srting' // string 가능 ... 다른 타입일 시 에러

교집합 타입
interface Name {
	name: string;
}
interface Age {
	age: number;
}
let info: Name & Age = {
	name: '내이름',
    age: 27
}
  • optional
    선택 속성을 편하게 이용할 수 있는 방법
  • Generic
    하나의 인터페이스로 여러 타입을 이용할 수 있게 하는 방법 ... 함수에도 사용할 수 있다.
interface Value<T> {
	value: T;
    // <T> 를 통해 외부에서 원하는 타입을 지정하여 사용할 수 있다.
}
const value: Value<number> = { ... }

function toString<T>(a: T): string { ... }
  • Partial, Required, Pick, Omit
    기존 interface 를 재활용 할 수 있게 한다.
    Partial: 모든 필드가 Optional 이 된다.
    Required: 모든 필드가 Required 가 된다.
    Pick: 특정 필드만 골라서 사용할 수 있다.
    Omit: 특정 필드만 빼고 사용할 수 있다.
    & 연산자를 통해 위의 문법을 같이 사용할 수 있다.
  • extends
    특정 인터페이스를 상속받아 인터페이스를 확장할 수 있다.

회고

타입스크립트를 처음 배우는 시간이었다. 팀프로젝트에서 Prop-types 를 통해 Prop 의 타입을 정해주고, defaultProps 로 기본값을 지정해 주었던 경험이 있어서 이해가 좀 더 잘 된것 같다. 물론 더 복잡한 타입을 다루기에 연습이 필요할 것 같다.

profile
프론트엔드

0개의 댓글