Type System 3가지
- Nominal Type System
- Structural Type System
- 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 이라고 볼 수 있다.
Duck Typing 의 Type unsafe 를 보완하는 것이 STS 라고 하네요.
http://beust.com/weblog/2008/02/11/structural-typing-vs-duck-typing/
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
오리처럼 보이고 오리처럼 울면 그것은 오리인데,
이 오리가 자꾸 요리조리 동적으로 변하니 그것에 대한 위험을 감소시키자...
뭐 이런건가요?
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
네 맞습니다. Duck Typing 은 사실 Type system 이 아니죠. 그냥 외부 인터페이스만 맞으면 맞다! 라는 느낌이고, Structural Typing 은 Static Type System 의 일종인 차이가 있습니다.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit