타입의 개요
타입(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 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: 대응되는 정수값에 대한 사칙연산 가능
'CS' 카테고리의 다른 글
[컴퓨터과학개론] 컴퓨터 구조 (4) | 2023.12.03 |
---|---|
[프로그래밍 언어론] 복합타입 (0) | 2023.12.01 |
[프로그래밍 언어론] 변수의 영역 (0) | 2023.12.01 |
[프로그래밍 언어론] 변수와 바인딩 (0) | 2023.12.01 |
[컴퓨터과학개론] 운영체제 (0) | 2023.11.30 |