Skip to content

Latest commit

 

History

History
37 lines (32 loc) · 1.42 KB

구조적타이핑.md

File metadata and controls

37 lines (32 loc) · 1.42 KB

구조적 타이핑

  • 구조적 타이핑이란 오직 멤버만으로 타입을 관계시키는 방식이다.
  • 즉, 두 객체 타입 사이에 어떤 관계가 선언되거나 한적이 없음에도 정상적으로 두 타입의 멤버가 같다면, 같은 타입으로 인식한다는 것이다.
  • 즉, ‘구조적으로' 타입이 맞기만 한다면 이를 허용해준다.
  • 다른 언어는 명목적 타이핑을 이용하는 것과 매우 대조된다.
  • 이는 타입스크립트가 결국 자바스크립트의 덕타이핑이라는 성질을 활용해서 구조적타이핑으로 구현된 것임을 알 수 있다.
  • 구조적 타이핑은 유닛테스트에 유리하다.
    • 왜? DB 라는 추상적인 interface 를 만들고, 상속이 아닌 구조적 타이핑으로 다양한 DB 에 대한 테스트 처리를 진행 할 수 있다.
interface Author {
  first: string;
  last: string;
}

interface DB {
  runQuery: (sql: string) => any[];
}

function getauthors(database: DB): Author[] {
  const authorRows = database.runQuery(`SELECT FIRST, LAST FROM AUTHORS`);
  return authorRows.map(row => ({ firstName: row[0], last: row[1] });
}

test('getAuthors', () => {
  const authors = getAuthors({
    runQuery(sql: string) {
      return [['Toni', 'Morrison'], ['Maya', 'Angelou']];
    }
  });
  expect(authors).toEqual([
    {first: 'Toni', last: 'Morrison'},
    {first: 'Maya', last: 'Angelou'}
  ]);
});