Nominal Typing VS Structural Typing ( + Duck Typing)

in #kr-dev6 years ago

Type System 3가지

  1. Nominal Type System
  2. Structural Type System
  3. Duck Typing

Nominal Type System

C++, Java 에서 만날 수 있는 타입 시스템이다. 우리가 기본적으로 알고 있듯이 이름이 같아야 한다.

class A {
    int a;
}

class B {
    int a;
}

A a = new B(); // ERROR!!!

Structural Type System

반면에 Structural typing 을 하는 언어들은 위의 케이스가 가능하다. 왜냐면 클래스 A 와 B의 구조가 같기 때문이다.

Typescript 나 Ocaml 같은 언어가 Structural typing 을 쓴다.

나는 이걸 보고 duck typing 과 뭐가 다르지? 라는 의문이 들었다.

Duck Typing

duck typing 은 static type system 이 아닌, dynamic 언어에서의 개념이다. 따라서 Structural typing 과는 약간 다르다.

타입 자체가 존재하지 않는 Javascript 나 Ruby 같은 것이 duck typing 이라고 볼 수 있다.

Sort:  

Duck Typing 의 Type unsafe 를 보완하는 것이 STS 라고 하네요.
http://beust.com/weblog/2008/02/11/structural-typing-vs-duck-typing/

오리처럼 보이고 오리처럼 울면 그것은 오리인데,
이 오리가 자꾸 요리조리 동적으로 변하니 그것에 대한 위험을 감소시키자...
뭐 이런건가요?

네 맞습니다. Duck Typing 은 사실 Type system 이 아니죠. 그냥 외부 인터페이스만 맞으면 맞다! 라는 느낌이고, Structural Typing 은 Static Type System 의 일종인 차이가 있습니다.

Coin Marketplace

STEEM 0.28
TRX 0.12
JST 0.033
BTC 70135.32
ETH 3789.12
USDT 1.00
SBD 3.77