정적 타이핑과 동적 타이핑 (static typing vs dynamic typing)
쉽게 풀면
정적 타이핑 언어(예: Java, C, Rust)는 코드를 실행하기 전에 컴파일러가 모든 변수와 함수의 타입이 서로 앞뒤가 맞는지 미리 검사해서, 타입이 맞지 않는 오류를 프로그램을 실행해보지 않고도 미리 잡아낼 수 있다. 반면 동적 타이핑 언어(예: Python, JavaScript)는 이런 검사를 프로그램이 실제로 그 코드를 실행하는 순간에 한다. 정적 타이핑은 더 이른 시점에 오류를 발견하고 실행 속도를 최적화하기 유리한 반면, 동적 타이핑은 타입 선언을 생략할 수 있어 코드를 더 빠르고 유연하게 작성할 수 있다는 서로 다른 장점을 가진다.
왜 중요한가
정적/동적 타이핑의 선택은 프로그램의 안전성, 개발 생산성, 실행 성능 사이의 근본적인 트레이드오프와 직결되어 있어 프로그래밍 언어 설계, 소프트웨어공학, 대규모 시스템의 유지보수성 연구에서 꾸준히 다뤄지는 주제입니다. 최근에는 동적 타이핑 언어에 점진적 타입 시스템(gradual typing)을 도입해 두 접근의 장점을 함께 취하려는 연구도 활발합니다.
논문에서는 이렇게 쓰입니다
프로그래밍 언어 설계에서 타입 검사 시점에 대한 트레이드오프와 그 선택 근거를 설명할 때 사용된다.
소프트웨어공학 연구에서 원래 동적 타이핑 언어였던 코드베이스에 정적 타입 검사 요소를 추가했을 때 실무적으로 어떤 이점이 있는지를 실증적으로 분석했다는 뜻입니다.
시스템 소프트웨어 연구에서 언어의 타입 검사 시점 차이가 실제 소프트웨어 신뢰성에 미치는 영향을 비교 실험한 사례입니다.
조금 더 깊게 보면
정적 타이핑을 지원하는 언어들은 흔히 타입 추론(type inference) 기법을 함께 제공해, 개발자가 모든 타입을 일일이 명시하지 않아도 컴파일러가 문맥으로부터 타입을 유추하게 합니다. 최근에는 TypeScript, Python의 타입 힌트처럼 원래 동적 타이핑이던 언어에 선택적 정적 검사를 얹는 점진적 타이핑이 널리 쓰이며, 이는 기존 코드와의 호환성을 유지하면서도 정적 검사의 이점을 일부 얻으려는 절충안으로 볼 수 있습니다.
주의할 점
정적 타이핑과 동적 타이핑의 구분은 '타입이 있는가 없는가'와는 다른 개념이다. 동적 타이핑 언어도 실행 시점에는 값마다 명확한 타입을 가지며, 다만 그 검사 시점이 실행 중이라는 점이 다르다.