251009 - 강타입과 약타입, 정적타입과 동적타입

LIHA·2025년 10월 9일

KNOU

목록 보기
2/3
post-thumbnail

Type-safety 라는 건 뭘까?

프로그래밍 언어의 구성요소인 타입. 데이터 집합과 연산 집합을 합친 개념. 단순히 1, 2, 3으로 끝나지 않고 이들끼리 연산도 가능해야 하는게 타입. 연산의 안전성 보장을 위해 쓰인다...

안전성 보장? 그냥 자료형을 선언하면 강타입으로 보장되고, 아니면 약타입인 게 아니었나? (아니었나 보다)
의외로 타입 안전성은 수학적 설명으로 표현할 수 있었다.

함수 f의 타입이 f(x) A -> B 라면,
모든 a∈A에 대해 f(a)∈B여야 한다
(이때 A, B는 타입)

  • 타입 안전(Type safe): 프로그램 내 모든 연산 및 함수에 대해 타입 안전성을 만족하는 프로그램

강타입 약타입은 타입 안전성 측면에서의 프로그래밍 언어 분류라고 한다.

  • 강타입 언어: 타입 오류를 모두 검출하는 언어
  • 약타입 언어: 타입 오류를 검출하지만 일부는 허용하는 언어. C언어가 약타입.
  • 무타입 언어: 타입 선언문이 없고 어떤 대상의 타입이 계속 변경될 수 있는 언어. Python 등

강타입/약타입 언어와 정적타입/동적타입 언어는 다르다

C, C++, C# 등의 언어가 프로그래밍 언어론 기준으로는 강타입으로 분류되지 않았다.
(JAVA는 타입 캐스팅 기능만 제외하면 강타입으로 간주한다고.)
내가 지금까지 강타입이라고 생각했던 언어는 사실 정적타입 언어들이었다.
그렇다면 정적타입/동적타입 언어는 뭐고 어떤 특성을 가질까? 참고 블로그 에서 좋은 자료를 가져왔다.

  • 정적타입: 컴파일 시 변수 타입 결정. 코드에 자료형 명시 필요.
    ex) C, C++, C#, JAVA
    장점: 타입에러 문제를 컴파일시 해결 가능해서 안정성 높음, 속도 빠름
    단점: 타입 제한으로 유연성 낮음
  • 동적타입: 런타임 시 자료형이 결정되는 언어. 자료형 명시 필요 X.
    ex) 자바스크립트, 파이썬, 루비
    장점: 타입제한이 없어 유연성 높음, 효율적
    단점: 속도 느림, 타입 리스크를 런타임에 감당해야 함. 오탈자로 인한 리스크도...
profile
갑자기 왜 춤춰?

0개의 댓글