개념 이해:
- 정적 타입 (Static Typing): 변수의 타입이 컴파일 시간에 결정되고, 그 이후에는 변경 X
- 동적 타입 (Dynamic Typing): 변수의 타입이 실행 시간에 결정되며, 실행 중에도 타입이 변경 가능
장단점 비교
정적 타입 (Static Typing)
-
장점
- 컴파일 시 타입 검사: 코드를 작성하는 동안 발생하는 많은 타입 오류를 컴파일 시간에 미리 감지할 수 있다.
- 성능 최적화: 정적 타입 정보를 활용하여 컴파일러가 코드를 더 효율적으로 최적화할 수 있다.
- IDE 지원 강화: 정적 타입 정보는 IDE(Integrated Development Environment)에서 강력한 자동 완성 및 코드 분석을 지원한다.
-
단점
- 번거로운 타입 어노테이션: 타입을 명시적으로 선언해야 하므로 코드가 길어질 수 있고, 일부 경우에는 추가적인 작업이 필요할 수 있다.
- 개발 속도 저하: 더 많은 코드를 작성하고 수정해야 하므로 초기 개발 속도가 상대적으로 느릴 수 있다.
동적 타입 (Dynamic Typing)
-
장점
- 유연성: 실행 시간에 타입이 결정되기 때문에 동적으로 변수의 타입을 변경할 수 있어 유연성이 높다.
- 간단한 문법: 타입 선언이 없거나 간소화되어 코드가 간결할 수 있다.
- 빠른 프로토타이핑: 초기 개발 속도가 빠르며 코드 작성이 간단할 수 있다.
-
단점
- 런타임 에러: 실행 중에 타입 관련 오류가 발생할 수 있으며, 이는 실행 시간에만 감지된다.
- 코드 예측 어려움: 타입 정보가 부족하면 코드를 이해하고 예측하기 어려울 수 있다.
- 성능 감소: 동적 타입 언어는 런타임에 타입 체크를 수행하므로 성능이 상대적으로 느릴 수 있다.
기술면접 답변
프로그래밍 언어에서 변수의 타입을 다루는 방식을 기준으로 정적 타입과 동적 타입으로 나눕니다. 동적 타입의 언어는 실행 시간(runtime)에 동적으로 결정되며, 변수가 어떤 값을 가지느냐에 따라 타입이 자동으로 할당됩니다. 이러한 특징으로 타입 안정성과 성능 최적화, IDE 강화에 강점이 있지만, 타입 어노테이션과 개발 속도에 일부 제약이 있을 수 있습니다.
반면, 정적 타입의 언어는 변수를 선언할 때 명시적으로 타입을 지정하고, 이후에는 해당 타입의 값만을 변수에 할당합니다. 동적 타입언어는 유연성과 간편한 분법으로 빠른 프로토타이핑이 가능하게 해주지만, 런타임 오류와 성능 감소가 발생할 수 있다는 점에서 단점이 있습니다.
파이썬은 동적 타입(Dynamic Typing) 언어로, 실행 시간에 동적으로 타입을 결정하여 유연성을 제공합니다.

현대언어에서는 타입 추론과 JIT(Just-In-Time) 컴파일 등의 기술을 통해 두 가지 타입 시스템의 장점을 조합하는 경향이 있습니다.
IDE(Integrated Development Environment)
IDE는 소프트웨어 개발을 위한 종합적인 환경을 제공하는 애플리케이션 또는 도구 모음을 말한다. 이를 통해 개발자들이 소프트웨어를 개발하고 관랗는 데 필요한 다양한 기능들을 하나의 통합된 환경에서 사용할 수 있게 한다. 대표적인 IDE에는 IntelliJ IDEA, Eclipse, Visual Studio, PyCharm, Xcode 등이 있다.
정적 타입 정보는 IDE(Integrated Development Environment)에서 강력한 자동 완성 및 코드 분석을 지원한다.
프로포타이핑
- 시스템을 만들기 전에 초기 모델이나 샘플을 만들어보는 과정
- 목적: 아이디어나 개념을 시각적으로 구현하고, 기능을 검증하며 피드백을 얻기 위함
JIT(Just-In-Time) 컴파일
- 프로그램이 실행되는 동안 실시간으로 코드를 컴파일하는 방식
- 전통적인 컴파일러는 전체 프로그램을 한 번에 번역하지만, JIT 컴파일은 프로그램이 실행되는 동안 필요한 부분만을 선택적으로 컴파일하고 즉시 실행해 최적화된 코드를 생성할 수 있다.
- 주요 특징
- 실시간 컴파일: 프로그램이 실행되는 동안에 코드를 번역하고 즉시 실행한다.
- 메모리 사용 최적화: 필요한 부분만을 번역하기 때문에 메모리를 효율적으로 사용할 수 있다.
- 실행 속도 향상: 실행 시간에 최적화된 코드를 생성하여 전체 프로그램을 빠르게 실행할 수 있다.
- 플랫폼 독립성: JIT 컴파일은 실행하는 환경에 맞게 코드를 생성하므로 플랫폼 독립성이 높다.
- JIT 컴파일은 주로 Java 가상 머신(JVM), .NET 프레임워크 등에서 사용되며, 동적으로 변하는 환경에서 프로그램의 성능을 최적화하는 데에 효과적으로 활용된다.
"현대언어에서는 타입 추론과 JIT(Just-In-Time) 컴파일 등의 기술을 통해 두 가지 타입 시스템의 장점을 조합하는 경향이 있습니다." 에 대한 설명
- 타입 추론 (Type Inference)
- 정적 타입 언어에서 사용되는 기술.
- 타입 어노테이션의 부담 완화: 변수의 타입을 명시적으로 선언하지 않아도, 컴파일러가 코드를 분석하여 타입을 추론합니다.
- 유연성 확대: 명시적인 타입 선언을 피하면서도 정적 타입 검사를 유지하면서 코드를 간결하게 작성할 수 있습니다.
- JIT(Just-In-Time) 컴파일
- 동적 타입 언어에서 주로 사용되는 기술.
- 실행 시간 최적화: 코드가 실행되는 시점에서 실제 데이터를 기반으로 최적화된 기계어 코드를 생성합니다.
- 동적으로 타입 변경: 실행 중에 타입이 변경될 수 있지만, JIT 컴파일러는 최적화된 코드를 유지하면서 이를 효율적으로 처리합니다.
- 혼합 언어 (Hybrid Languages)
- 언어 자체에서 정적 및 동적 타입을 혼합하는 방식.
- 예시: TypeScript, Kotlin, Swift 등.
- 정적 타입 언어로서의 안정성과 동적 타입 언어로서의 유연성을 결합.
- 프로그래밍 언어의 선택 사항
- 언어 사용자가 선호하는 스타일을 선택할 수 있도록 함.
- 예시: Python에서는 타입 힌트를 제공하여 정적 타입 검사를 강화할 수 있음.
- 런타임 시스템과 JIT의 협력
- 런타임 시스템이 동적 타입 정보를 추적하고 JIT 컴파일러가 이를 활용.
- 실행 중에 최적화와 타입 체크를 조합하여 성능을 향상시킴.