CS

[프로그래밍 언어론] 타입

Grace 2023. 12. 1. 10:31

타입의 개요

타입(type) = 데이터 집합 + 연산 집합

  • 데이터 집합: 처리 대상인 데이터의 집합. 도메인(domain)
  • 연산 집합: 해당 데이터에 적용 가능한 연산의 집합

타입 안전성(type safety)

  • 프로그램 내 모든 연산, 함수에 대해 다음 성질이 만족 → 함수 f의 타입이 f(x): A → B 라면 모든 a ∈ A에 대해 f(a) ∈ B여야 함
  • 타입 안전하면 타입 오류가 발생하지 않음
  • 강타입(strongly typed) 언어: 타입 오류를 모두 검출하는 언어(Haskell, ML, Java)
  • 약타입(weakly typed) 언어: 일부 타입 오류를 허용하는 언어(C)
  • 무타입(typeless) 언어: 타입 선언문도 없고 어떤 대상의 타입이 계속 변경될 수 있는 언어(Python)

타입의 분류

사용자 개입에 따른 타입의 분류

  • 원시타입(primitive type)
    • 프로그래밍 언어에서 기본적으로 제공하는 타입
    • 미리 정의된 타입(predefined type), 내장타입(built-in type)이라고도 부름
    • 대부분 언어들은 정수형, 실수형, 문자형, 논리형 등을 제공
    • C, C++: int, float, char, bool 등
    • Java: int, float, char, boolean 등
  • 사용자정의타입(user-defined type)
    • 사용자가 정의해서 사용하는 타입
    • 배열: 배열의 크기와 저장할 데이터의 종류를 사용자가 지정
    • 구조체: 구조체에 포함시킬 데이터들의 종류를 사용자가 지정
    • C: enum, 배열, struct, union 등
    • C++, Java: enum, 배열, class 등

데이터 요소의 형태에 따른 타입의 분류

  • 단순타입(simple type)
    • 데이터 집합의 요소가 하나의 데이터로만 구성된 타입
    • 스칼라타입(scalar type)으로도 부름
    • C: int, float, char, bool, enum emd
  • 복합타입(structured type)
    • 데이터 집합의 요소가 데이터들의 구조로 구성된 타입
    • 단순타입 혹은 또 다른 복합타입을 활용하여 데이터 요소를 구성
    • 구조타입으로도 부름
    • C: 배열, struct, union 등
    • C++, Java: 배열, class 등

단순타입

정수형

정수 데이터를 다루는 타입

데이터 집합

  • 무한히 많은 정수 중 일부만 포함
  • 정수의 범위에 따라 다양한 타입 존재
  • C, C++타입명 최소 사용 비트 최소 데이터 집합 범위
    short 16 -2^15 ~ 2^15-1
    int 16 -2^15 ~ 2^15-1
    long 32 -2^31 ~ 2^31-1
    long long 64 -2^63 ~ 2^63-1
    → unsigned: 음수 대신 양수 범위 확장타입명 최소 사용 비트 최소 데이터 집합 범위
    unsigned short 16 0 ~ 2^15-1
    unsigned int 16 0 ~ 2^15-1
    unsigned long 32 0 ~ 2^31-1
    unsigned long long 64 0 ~ 2^63-1

연산 집합

  • 사칙연산: 덧셈, 뺄셈, 곱셈, 나눗셈
  • 나머지 연산: %
  • 연산의 결과 값도 동일한 정수형임
  • 결과 값이 범위를 벗어나는 경우에는 부호가 변경되어 반대로 돌아감(예: 최댓값 32767 + 1 → 최소값 -32768)

실수형

실수 데이터를 다루는 타입

데이터 집합

  • 무한히 많은 실수 중 일부만 포함
  • 부동소수점 수로 표현: (부호) 가수 * 2^지수
    • 부호: 0 (양수), 1 (음수)
    • 가수부: 가수에서 첫 비트를 제외한 소수점 이하 부분
    • 지수부: 지수 + bias

연산 집합

  • 사칙연산: 덧셈, 뺄셈, 곱셈, 나눗셈
  • 연산의 결과 값도 동일한 실수형임결과 값이 범위를 벗어나는 경우 최댓값 초과 시 inf, 최솟값 미만 시 -inf

문자형

하나의 문자 데이터를 다루는 타입

데이터 집합

  • ASCII: 특수기호, 구두점, 숫자, 영어 대소문자 등 128개 문자
  • 유니코드: 전 세계의 다양한 글자

연산 집합

  • 관계 연산
  • 연산의 결과 값은 논리형임

논리형

참과 거짓의 논리 데이터를 다루는 타입

  • 데이터 집합: true, false
  • 연산 집합
    • 논리곱(and), 논리합(or), 부정(not) 등
    • 연산의 결과 값도 동일한 논리형임

열거형

순서 관계가 있는 이름들을 데이터로 다루는 타입

데이터 집합

  • 사용자가 지정하는 이름들
  • 각 이름은 0 이상의 정수와 대응
  • C, C++: 각 이름에 대응되는 정수도 사용자가 지정 가능

연산 집합

  • 순서 비교
  • C: 대응되는 정수값에 대한 사칙연산 가능