[프로그래밍언어론] 타입
타입의 개요
타입
-
데이터 집합과 연산 집합의 결합
- 데이터 집합
- 처리 대상이 되는 데이터의 집합
- 예 : 정수형의 데이터 집합 = { …, -1, -1, 0, 1, 2, …}
- 처리 대상이 되는 데이터의 집합
- 연산 집합
- 해당 데이터에 적용 가능한 연산의 집합
- 예 : 정수형의 연산 집합 = {+. -, *, /, %, …}
- 해당 데이터에 적용 가능한 연산의 집합
- 변수의 속성 중 한가지
- 서브프로그램의 인자와 반환에도 이용
- 연산의 안전성 보장을 위해 필요
- 프로그램은 “타입 안전하다”라는 표현
- 프로그램 내 모든 연산 및 함수에 대해 다음 성질을 만족하는 경우
- 함수 f의 타입이 f(x): A → B라면 모든 a∈A에 대해 f(a)∈B이어야 함
- 타입 오류가 발생하지 않는다는 의미
- 프로그램 내 모든 연산 및 함수에 대해 다음 성질을 만족하는 경우
타입 안전성에 따른 PL의 분류
- 강타입 언어
- 모든 타입오류를 검출하는 언어
- Haskell, ML, Java(타입 캐스팅 제외하면)
- 모든 타입오류를 검출하는 언어
- 약타입 언어
- 타입 오류를 검출, 그러나 일부 타입 오류를 허용
- C → 공용체, 타입 캐스팅을 통해 타입 검사 회피
- 타입 오류를 검출, 그러나 일부 타입 오류를 허용
- 무타입 언어
- 타입 선문도 없고 어떤 대상의 타입도 계속 변경 가능
- Python 등 대부분의 스크립트 언어
- 타입 선문도 없고 어떤 대상의 타입도 계속 변경 가능
타입의 분류 기준
- 데이터 형태에 따라
- 정수형, 실수형, 문자형, 배열, 구조체 등
- 정수형, 실수형, 문자형, 배열, 구조체 등
- 타입 정의에 사용자 개입 여부에 따라
- 원시 타입
- 사용자 정의 타입
- 원시 타입
- 데이터 요소의 형태에 따라
- 단순 타입
- 복합 타입
- 단순 타입
사용자 개입 여부에 따른 분류
- 원시타입
- 프로그래밍 언어에서 기본적으로 제공하는 타입
- 미리 정의된 타입
- 내장 타입
- 대부분 언어 : 정수형, 실수형, 문자형, 논리형
- 프로그래밍 언어에서 기본적으로 제공하는 타입
- 사용자 정의 타입
- 사용자가 직접 정의해서 사용하는 타입
- 배열, 구조체 등
- 사용자가 직접 정의해서 사용하는 타입
데이터 요소의 형태에 따른 분류
- 단순 타입
- 데이터 집합의 요소가 하나의 데이터로만 구성
- 스칼라 타입
- 정수형, 실수형, 문자형, 논리형, 열거형 등
- 데이터 집합의 요소가 하나의 데이터로만 구성
- 복합 타입
- 데이터 집합의 요소가 데이터들의 구조로 구성
- 단순타입 혹은 다른 복합타입을 활용
- 구조 타입
- 배열, 구조체, 클래스 등
- 데이터 집합의 요소가 데이터들의 구조로 구성