1. 기본 타입 차이

숫자 타입

// Dart
int integerNumber = 42;        // 정수
double floatingPoint = 3.14;   // 부동 소수점
num dynamicNumber = 123;       // 동적 숫자 타입

// JavaScript
let number = 42;              // 모든 숫자가 64비트 부동 소수점
let integer = Math.floor(42); // 정수 처리는 명시적 변환 필요

주요 차이점:

  1. Dart는 정수와 부동 소수점을 명확히 구분
  2. JavaScript는 모든 숫자를 부동 소수점으로 처리
  3. 정밀도 차이:

실제 영향:

// Dart에서 안전한 정수 계산
int largeNumber = 9007199254740992;  // 2^53
int result = largeNumber + 1;        // 정확한 결과

// JavaScript에서 정밀도 손실
let largeNumber = 9007199254740992;  // 2^53
let result = largeNumber + 1;        // largeNumber와 동일 (정밀도 손실)

2. 널 안전성

Dart의 널 안전성

String nonNullable = "Hello";     // null 불가
String? nullable = null;          // null 가능
int? nullableNumber;              // 자동으로 null로 초기화

void processString(String? text) {
  if (text != null) {
    print(text.length);  // 널 체크 후 안전한 접근
  }
}

JavaScript의 널 처리

let text = null;                  // 모든 변수가 nullable
console.log(text?.length);        // 옵셔널 체이닝 필요

// 타입스크립트를 사용하는 경우
let nonNullable: string = "Hello";
let nullable: string | null = null;

주요 차이점:

  1. Dart는 컴파일 타임에 널 안전성 보장
  2. JavaScript는 런타임에 널 체크 필요
  3. Dart의 널 안전성은 언어 레벨에서 지원

3. 제네릭 처리