자료형의 정적/동적타입+컴파일/인터프리터

Gunju Kim·2025년 3월 19일
0

필수시청 영상

목록 보기
3/32

자료형의 정적 타입(Static Typing)과 동적 타입(Dynamic Typing)

정적 타입(static)

  • 정의:
    변수의 타입이 컴파일 시점(실행 전)에 결정되는 방식입니다.

  • 특징:
    변수에 자료형을 명시적으로 선언하거나, 컴파일러가 자동으로 추론하는 방식.
    자료형이 일단 정해지면 변경이 불가능합니다.

  • 장점:
    컴파일 단계에서 타입 오류를 미리 잡아낼 수 있습니다.
    코드의 안정성과 신뢰성이 높아집니다.
    성능적으로 유리할 수 있습니다.

  • 단점:
    때로는 유연성이 떨어질 수 있습니다.

대표 언어:
Java, C, C++, C#, Kotlin, Go, Rust, Scala 등

예시) Java

int number = 10;  // number는 int로 고정
number = "hello"; // 컴파일 에러 발생!

동적 타입(dynamic)

  • 정의:
    변수의 타입이 실행 시점(Runtime)에 결정되는 방식입니다.

  • 특징:
    변수가 값을 저장할 때, 그 시점의 데이터 유형에 따라 타입이 결정됩니다.
    변수의 타입은 실행 중에도 얼마든지 변경될 수 있습니다.

  • 장점:
    코드가 간결하고 유연해짐.
    개발 속도가 빠름.

  • 단점:
    타입 오류를 실행 전(컴파일 단계)에 찾기 어렵습니다.
    실행 속도가 비교적 느릴 수 있습니다.

  • 대표 언어:
    Python, JavaScript, Ruby, PHP 등

예시) python

number = 10     # 정수형
number = "hello" # 문자열형 (동적 변경 가능, 문제 없음!)

컴파일 언어 vs 인터프리터 언어

컴파일 언어 (Compiled Language)

  • 정의:
    소스 코드를 미리 기계어(바이너리 코드, 목적 코드)로 번역한 후 실행합니다.
  • 특징:
    실행 전에 반드시 컴파일 과정이 필요합니다.
    컴파일 시점에서 문법이나 타입 오류를 발견할 수 있습니다.
    한번 컴파일하면 여러 번 빠르게 실행할 수 있어 실행 성능이 좋습니다.

  • 대표 언어:
    C, C++, Rust, Go, Kotlin(네이티브), Swift 등

인터프리터 언어 (Interpreted Language)

  • 정의:
    코드를 실행 시점에서 즉석으로 한 줄씩 해석하며 실행합니다.

  • 특징:
    컴파일 과정 없이 즉시 실행 가능(별도 컴파일 필요 없음).
    코드의 수정 즉시 실행할 수 있어 개발 속도가 빠릅니다.
    실행 성능은 비교적 낮을 수 있습니다.

  • 대표 언어:
    Python, JavaScript, Ruby, PHP 등

중간 형태 (하이브리드 방식)

  • Java, Kotlin(JVM), Scala 등 JVM 기반 언어들은:
    소스 코드 → 바이트코드로 컴파일(중간 단계) → JVM이 이 바이트코드를 다시 해석하며 실행
  • 즉, 컴파일(바이트코드 생성) + 인터프리터(JVM 해석 및 실행)의 하이브리드 방식입니다.

자료형의 정적/동적 타입 구분은 변수 타입의 결정 시점(컴파일 or 실행)과 관련되며,
컴파일/인터프리터 언어 구분은 소스코드를 실행 코드로 변환하는 방식과 관련됩니다.
둘은 서로 밀접한 관계가 있지만, 반드시 같은 개념은 아닙니다.

profile
처음이라서 그래 가본적 없던 길에

0개의 댓글