Dart는 정적 타입 체크와 런타임 타입 체크를 통해 변수의 값이 변수의 타입과 항상 일치하도록 보장한다. (이를 sound typing이라고도 함)
또한, 타입 추론을 통해 명시적으로 타입을 지정해야하는 번거로움도 줄였다.
Dart의 static analyzer를 통해 정적 타입 체크로 컴파일 타입에 버그를 찾을 수 있다.
Soundness는 프로그램으로 하여금 유효하지 않은 특정 상태로 들어가지 않도록 보장하는 것이다.
Sound 타입 시스템은 표현식의 결과 값이 표현식의 정적 타입과 맞지 않는 상황이 발생할 수 없다. (String에는 String 값만 할당 가능)
Soundness는 아래의 두가지 체크의 조합이다.
부모 메서드를 오버라이드하는 경우, 메서드의 반환 타입은 부모 메서드의 반환 타입의 하위(<=) 타입이어야 한다.
부모 메서드를 오버라이드 하는 경우, 메서드 파라미터의 타입은 부모 메서드의 파라미터 타입의 상위(>=) 타입이어야 한다.
(하위 타입이어도 되는 유효한 근거가 있다면 covariant
키워드를 통해 공변성을 적용할 수 있다.)
하나의 타입을 갖는 값으로 이루어진 list에 dynamic
을 사용하면 안된다.
=> 타입을 지정할 것, ~~dynamic
은 그냥 사용하지 말 것~~