data 타입
Data type
컴퓨터 과학 및 컴퓨터 프로그래밍에서 데이터 유형(또는 단순히 유형)은 가능한 값의 집합이며 허용되는 연산 집합입니다.데이터 유형은 프로그래머가 데이터를 어떻게 사용할지 컴파일러 또는 인터프리터에 알려줍니다.대부분의 프로그래밍 언어는 다양한 크기의 정수, 부동 소수점 숫자(실수에 가까운 수치), 문자 및 부언의 기본 데이터 유형을 지원합니다.데이터 유형은 변수나 함수와 같은 식이 취할 수 있는 가능한 값을 제한합니다.이 데이터 유형은 데이터에 대해 수행할 수 있는 작업, 데이터의 의미 및 해당 유형의 값을 [1][2]저장할 수 있는 방법을 정의합니다.
개념.
데이터 유형은 유형 시스템 내에서 사용되며, 이를 정의, 구현 및 사용하는 다양한 방법을 제공합니다.다양한 유형의 시스템에 따라 다양한 수준의 안전이 보장됩니다.
언어마다 용어가 다를 수 있지만 거의 모든 프로그래밍 언어에는 데이터 유형의 개념이 포함되어 있습니다.
일반적인 데이터 유형은 다음과 같습니다.
예를 들어 Java 프로그래밍 언어에서 type int는 -2,147,483,648 ~2,147,483,647 범위의 32비트 정수 집합과 덧셈, 뺄셈, 곱셈 등의 정수로 수행할 수 있는 연산을 나타냅니다.한편, 색상은 빨강, 초록, 파랑의 양을 나타내는 3바이트와 색상의 이름을 나타내는 문자열로 나타낼 수 있습니다.
또한 대부분의 프로그래밍 언어에서는 프로그래머가 다른 유형의 여러 요소를 조합하여 새로운 데이터 유형의 유효한 연산을 정의함으로써 추가 데이터 유형을 정의할 수 있습니다.예를 들어, 프로그래머는 "복소수"라는 이름의 새로운 데이터 유형을 만들 수 있으며, 여기에는 실제 및 가상의 부품이 포함됩니다.데이터 유형은 또한 컴퓨터 메모리에 저장된 값 또는 객체의 표현, 해석 및 구조를 설명하는 형식 시스템의 데이터 해석에 가해지는 제약을 나타냅니다.유형 시스템은 데이터 유형 정보를 사용하여 데이터에 액세스하거나 데이터를 조작하는 컴퓨터 프로그램의 정확성을 확인합니다.
통계의 대부분의 데이터 유형은 다음 표와 같이 컴퓨터 프로그래밍과 유사한 유형을 가집니다.
통계 정보 | 프로그래밍 |
---|---|
실수치(표준 척도) | 부동 소수점 |
실수치(표준 척도) | |
카운트 데이터(보통 음수가 아님) | 정수 |
이진 데이터 | 부울 |
범주형 데이터 | 열거형 |
랜덤 벡터 | 목록 또는 배열 |
랜덤 매트릭스 | 이차원 배열 |
랜덤 트리 | 트리 |
정의.
Parnas, Shore 및 Weiss 1976은 문헌에서 암묵적으로 사용된 "유형"의 다섯 가지 정의를 식별했다.
- 통사적
- 유형은 변수가 선언될 때 변수와 관련된 순수 구문 레이블입니다.서브구조형 시스템과 같은 고급형 시스템에 유용하지만, 이러한 정의는 유형의 직관적인 의미를 제공하지 않습니다.
- 표현
- 유형은 보다 원시적인 유형(종종 기계 유형)의 구성 측면에서 정의됩니다.
- 표현과 행동
- 유형은 표현 및 이러한 표현을 조작하는 연산자 집합으로 정의됩니다.
- 값 공간
- 유형은 변수가 가질 수 있는 가능한 값의 집합입니다.그러한 정의는 (분리된) 조합이나 유형의 데카르트 산물에 대해 말할 수 있게 한다.
- 공간 및 동작에 대한 가치
- 유형은 변수가 소유할 수 있는 값 집합과 이러한 값에 적용할 수 있는 함수 집합입니다.
표현에 관한 정의는 종종 ALGOL 및 Pascal과 같은 명령형 언어로 이루어졌고, 가치 공간 및 동작에 관한 정의는 Simula 및 CLU와 같은 상위 레벨 언어에서 사용되었습니다. 동작을 포함한 유형은 객체 지향 모델과 더 밀접하게 일치하지만 구조화된 프로그래밍 모델 10은 더 밀접하게 일치합니다.d는 코드를 포함하지 않고 플레인오래된 데이터 구조라고 불립니다.
데이터 유형의 클래스
원시 데이터 유형
원시 데이터 유형은 일반적으로 언어 구현에 기본 제공되거나 기본인 유형입니다.
머신 데이터형
디지털 전자 기기에 기반한 컴퓨터의 모든 데이터는 가장 낮은 수준에서 비트(0과 1)로 표시됩니다.데이터의 주소 지정 가능한 최소 단위는 보통 바이트라고 불리는 비트 그룹입니다(일반적으로 8비트인 옥텟).기계 코드 명령에 의해 처리되는 단위를 워드라고 합니다(2011년 기준[update], 일반적으로 32비트 또는 64비트).대부분의 명령에서는 32비트 워드가 0 ~ 32-의 부호 없는 정수 값 또는 -의부호 있는 정수 값(\ - 을 나타낼 수 있도록 이 단어를 이진수로 해석합니다.이는 2개의 상호 으로 인해 기계 언어입니다.nd 머신은 대부분의 경우 이러한 서명되지 않은 데이터 유형과 서명되지 않은 데이터 유형을 구분할 필요가 없습니다.
부동소수점 산술에 사용되는 부동소수점 숫자는 단어 내 비트의 다른 해석을 사용합니다.자세한 내용은 부동 소수점 산술을 참조하십시오.
머신 데이터 타입은 시스템 또는 저레벨 프로그래밍 언어로 공개 또는 사용할 수 있어야 합니다.이를 통해 하드웨어를 세밀하게 제어할 수 있습니다.예를 들어 C 프로그래밍 언어는 다음과 같은 다양한 폭의 정수형을 제공합니다.short
그리고.long
타겟 플랫폼에 대응하는 네이티브타입이 존재하지 않는 경우 컴파일러는 존재하는 타입을 사용하여 그것들을 코드로 분류합니다.예를 들어 32비트 정수가 16비트 플랫폼에서 요구되면 컴파일러는 암묵적으로 2개의 16비트 정수로 이루어진 배열로 처리합니다.
상위 수준의 프로그래밍에서는 기계 데이터 유형이 종종 구현 세부사항으로 숨겨지거나 추상화되므로 코드가 노출될 경우 이동성이 떨어집니다.예를 들어, 범용적인numeric
특정 비트 폭의 정수 대신 유형이 제공될 수 있습니다.
부울형
Boolean 유형은 true 및 false 값을 나타냅니다.가능한 값은 2개뿐이지만 효율성을 위해 단일 이진수로 구현되는 경우는 거의 없습니다.많은 프로그래밍 언어에는 명시적인 부울 유형이 없으며 대신 (예를 들어) 0을 false로, 다른 값을 true로 해석합니다.부울 데이터는 언어가 기계어로 해석되는 방법의 논리 구조를 나타냅니다.이 경우 Boolean 0은 False 로직입니다.True는 항상 0이 아니며, 특히 Boolean 1로 알려져 있습니다.
열거
열거형에는 비교 및 할당이 가능하지만 컴퓨터 메모리에 구체적인 표현이 반드시 필요한 것은 아닙니다.컴파일러와 인터프리터는 임의로 값을 나타낼 수 있습니다.예를 들어 카드 한 벌에 있는 4개의 정장은 CLUB, DIAMD, HEART, SPADE라는 이름의 열거형 수트에 속하는 4개의 열거형일 수 있습니다.변수 V가 데이터 유형으로 적합하다고 선언된 경우 이 네 가지 값 중 하나를 해당 변수에 할당할 수 있습니다.일부 구현에서는 프로그래머가 열거값에 정수값을 할당하거나 정수값과 동등한 유형으로 취급할 수 있습니다.
수치형
예를 들어 다음과 같습니다.
- 정수 데이터 유형 또는 "비분할 숫자"입니다.음의 값을 포함할 수 있는 능력에 따라 하위 유형으로 분류할 수 있습니다(예:
unsigned
(C++)로 설정합니다.또한 소수의 사전 정의된 하위 유형(예:short
그리고.long
C/C++) 또는 1.12(예: Pascal/Ada)와 같은 서브 범위를 사용자가 자유롭게 정의할 수 있도록 합니다. - 부동소수점 데이터 유형은 일반적으로 값을 고정밀 분수 값(수학적으로 합리적 수)으로 나타내지만 때로는 실수(수학적인 실수)로 잘못 불리기도 합니다.일반적으로 최대값과 정밀도 모두에 대해 미리 정의된 한계가 있습니다.일반적으로 내부적으로 a × 2b(여기서 a와 b는 정수) 형식으로 저장되지만 익숙한 10진수 형식으로 표시됩니다.
- 고정점 데이터 유형은 통화 값을 표현하는 데 편리합니다.이들은 종종 정수로 내부적으로 구현되기 때문에 미리 정의된 한계가 발생합니다.
- Bignum 또는 임의 정밀도 숫자 유형에는 미리 정의된 한계가 없습니다.이러한 유형은 원시 유형이 아니며 효율성을 위해 거의 사용되지 않습니다.
복합형
복합 유형은 둘 이상의 원시 유형에서 파생됩니다.이 작업은 여러 가지 방법으로 수행할 수 있습니다.이러한 결합 방식을 데이터 구조라고 합니다.원시형을 복합형으로 구성하면 일반적으로 새로운 유형이 생성됩니다. 예를 들어 정수 배열은 정수와 다른 유형입니다.
- 배열(벡터, 목록 또는 시퀀스라고도 함)은 다수의 요소를 저장하고 개별 요소에 대한 랜덤 액세스를 제공합니다.어레이의 요소는 일반적으로 (모든 컨텍스트에서) 같은 타입이어야 합니다.어레이는 고정 길이 또는 확장 가능한 경우가 있습니다.배열에 대한 인덱스는 일반적으로 특정 범위의 정수여야 합니다(그렇지 않은 경우 연관 배열에 대해 언급함으로써 이 완화를 강조할 수 있습니다). 해당 범위의 모든 인덱스가 요소에 대응하지 않는 경우 스파스 배열일 수 있습니다.
- 레코드(태플 또는 구조라고도 함) 레코드는 가장 단순한 데이터 구조 중 하나입니다.레코드는 다른 값(일반적으로 고정 수 및 시퀀스)을 포함하는 값이며 일반적으로 이름으로 인덱싱됩니다.레코드의 요소는 보통 필드 또는 멤버라고 불립니다.
- 유니언. 유니언 형식 정의는 "플로트 또는 긴 정수"와 같이 인스턴스에 저장될 수 있는 여러 가지 기본 형식 중 어느 것을 지정합니다.플로트 및 정수를 포함하도록 정의할 수 있는 레코드와 대조되는 반면, 유니언에서는 한 번에 하나의 유형만 허용됩니다.
- 집합은 특정 순서나 반복 값 없이 특정 값을 저장할 수 있는 추상 데이터 구조입니다.값 자체는 집합에서 검색되지 않고 멤버십 값을 테스트하여 부울 "in" 또는 "not in"을 얻습니다.
- 오브젝트에는 레코드 등의 데이터 필드가 다수 포함되어 있으며 메서드라고 불리는 접근 또는 변경을 위한 서브루틴도 다수 포함되어 있습니다.
문자열 및 텍스트 유형
문자열은 단어 또는 일반 텍스트를 저장하는 데 사용되는 일련의 문자로, 대부분의 경우 텍스트 마크업 언어는 서식 있는 텍스트를 나타냅니다.문자는 일부 알파벳, 숫자, 공백, 구두점 등의 문자일 수 있습니다.문자는 ASCII 등의 문자 집합에서 가져옵니다.문자 및 문자열 유형은 문자 인코딩에 따라 서로 다른 하위 유형을 가질 수 있습니다.원래 7비트 와이드 ASCII는 제한적이며 8, 16 및 32비트 세트로 대체되었습니다.이 세트는 다양한 비 라틴어 알파벳(히브리어 및 중국어 등) 및 기타 기호를 인코딩할 수 있습니다.문자열은 가변 길이 또는 고정 길이일 수 있으며 일부 프로그래밍 언어에는 두 가지 유형이 있습니다.또한 최대 크기에 따라 하위 유형으로 분류될 수도 있습니다.
대부분의 문자 세트는 숫자를 포함하므로 다음과 같은 숫자 문자열을 사용할 수 있습니다."1234"
이러한 숫자 문자열은 일반적으로 다음과 같은 숫자 값과는 다른 것으로 간주됩니다.1234
단, 일부 언어는 자동으로 변환됩니다.
기타 타입
다른 많은 유형이 가능하지만, 위의 변형과 화합물인 경향이 있습니다.특히 레코드의 필드가 다른 레코드에 대한 포인터가 될 수 있다면 상당히 복잡한 유형을 구성할 수 있다.데이터 구조에서 포인터를 임의로 사용하면 프로그램 코드의 임의 점프만큼 많은 혼란이 발생할 수 있습니다.
예를 들어, 링크된 목록은 배열과 동일한 데이터를 저장할 수 있지만 랜덤이 아닌 순차적 액세스를 제공하며 동적 메모리에 레코드로 구성됩니다.이러한 링크 리스트를 사용하여 큐를 나타낼 수 있습니다.자주 사용되는 또 다른 유형은 이진 트리로, 매우 빠른 검색이 가능합니다.스택은 목록 또는 배열을 사용하여 구현할 수 있으며 Last-In-First-Out 상황에 대처할 때 사용할 수 있습니다.
추상 데이터 유형
데이터의 구체적인 표현을 지정하지 않은 모든 데이터 유형은 추상 데이터 유형입니다.대신 데이터 유형의 연산을 기반으로 한 정식 사양을 사용하여 설명합니다.사양을 구현하려면 지정된 규칙을 충족해야 합니다.추상 데이터 유형은 정식 의미론 및 프로그램 검증, 그리고 덜 엄밀하게는 설계에서 사용됩니다.
검증 범위를 넘어 사양이 즉시 구현될 수 있습니다.인스턴스용 OBJ 프로그래밍 언어 패밀리는 이 옵션을 기반으로 사양 방정식을 사용하고 이를 실행하기 위해 다시 씁니다.대수적 사양은[3] 1980년 무렵 CS에서 중요한 연구 주제였으며 그 당시 추상 데이터 유형과 거의 동의어였다.그것은 유니버설 [4]대수학의 수학적 기초가 있다.규격 언어는 방정식뿐만 아니라 다른 공식도 허용함으로써 표현력을 높일 수 있습니다.
대표적인 예는 이진 트리, 목록, 가방 및 집합 데이터 [5]유형의 붐 계층입니다.이러한 모든 데이터 유형은 빈 컨테이너를 구성하는 null, 단일 요소에서 컨테이너를 구성하는 단일 및 동일한 유형의 두 컨테이너를 결합하는 추가의 세 가지 작업으로 선언할 수 있습니다.그런 다음 이러한 작업에 대해 다음 규칙을 순차적으로 추가하여 4가지 데이터 유형의 전체 사양을 지정할 수 있습니다.
- null은 트리의 왼쪽과 오른쪽 중립입니다. | append(null,A) = A, append(A,null) = A입니다. |
- lists add that append는 연관성이 있습니다. | append(첨부(A,B,C) = append(A,첨부(B,C)). |
- 가방은 교환성을 추가한다: | append(B,A) = append(A,B). |
- 마지막으로 세트도 아이돌 파워입니다. | 추가(A,A) = A. |
데이터에 대한 액세스는 세 가지 작업에 걸쳐 패턴 매칭을 통해 지정할 수 있습니다. 예를 들어, 이러한 컨테이너에 대한 멤버 함수는 다음과 같습니다.
- member(X,single(Y)) = eq(X,Y) |
- member(X,null) = false |
- member(X,append(A,B)) = 또는 (member(X,A), member(X,B)) |
데이터 유형에 대한 관련 규칙에 따라 기능이 불변하도록 주의해야 합니다.
기타 타입
유형은 위에서 설명한 기본 유형에 기반하거나 파생될 수 있습니다.C와 같은 일부 언어에서 함수는 반환값 유형에서 파생된 유형을 가집니다.
포인터 및 참조
파생된 주요 비복합 유형은 포인터입니다. 포인터는 해당 주소를 사용하여 컴퓨터 메모리에 저장된 다른 값을 직접 참조(또는 "포인트")하는 데이터 유형입니다.그것은 원시적인 종류의 참고 자료이다.(일상 용어로는 책 속의 페이지 번호는 다른 페이지 번호를 참조하는 데이터 조각으로 간주할 수 있습니다.포인터는 종종 정수와 유사한 형식으로 저장되지만, 값이 유효한 메모리 주소가 아닌 포인터를 참조 해제하거나 "검색"하려고 하면 프로그램이 충돌합니다.이러한 잠재적 문제를 개선하기 위해 포인터는 기본 표현이 동일하더라도 포인터가 가리키는 데이터 유형에 대한 별도의 유형으로 간주됩니다.
기능 타입
Javascript와 같은 함수 프로그래밍 언어는 함수를 고유한 데이터 유형으로 취급하며 이러한 유형의 값을 변수에 저장하여 [6]함수에 전달할 수 있습니다.대부분의 현대형 시스템은 Javascript의 단순한 "함수 객체"를 넘어 인수 및 반환 유형으로 구분되는 함수 유형 패밀리를 가지고 있습니다.Int -> Bool
정수를 취하여 부울을 반환하는 함수를 나타냅니다.
일부 언어에서는 함수를 데이터 유형으로 취급하지 않습니다.예를 들어, 1차 논리에서는 함수 또는 술어 이름에 수량자를 적용할 수 없지만, 2차 논리에서는 수량자를 적용할 수 없습니다.C에서 함수는 퍼스트 클래스 데이터 타입이 아니지만 함수 포인터는 프로그램에 의해 조작될 수 있다.Java와 C++는 원래 함수 값이 없었지만 C++11과 Java 8에 함수 값이 추가되었습니다.
메타형
일부 프로그래밍 언어는 유형 정보를 데이터로 나타내므로 유형 검사 및 반사가 가능합니다.이와는 대조적으로, 고차 유형 시스템은 다른 유형에서 유형을 구성하고 값으로 함수에 전달할 수 있지만,[citation needed] 일반적으로 이러한 유형에 기초한 계산 결정을 피합니다.
편의성 유형
편의를 위해 고급 언어 및 데이터베이스는 시간, 날짜 및 통화 값(통화)[7][8]과 같은 "실제" 데이터 유형을 제공할 수 있습니다.이것들은 언어에 짜넣거나 라이브러리의 [9]복합 타입으로 실장할 수 있습니다.
유형 시스템
유형 시스템은 유형을 계산된 값과 연관짓습니다.이러한 값의 흐름을 조사하는 것으로, 타입 시스템은 타입 에러가 발생하지 않는 것을 증명하려고 합니다.문제의 유형 시스템은 무엇이 유형 오류를 구성하는지 결정하지만, 유형 시스템은 일반적으로 특정 종류의 값을 예상하는 작업이 의미가 없는 값과 함께 사용되지 않도록 보장하려고 합니다.
컴파일러는 정적 유형의 값을 사용하여 필요한 스토리지를 최적화하고 해당 값에 대한 연산을 위한 알고리즘을 선택할 수 있습니다.많은 C 컴파일러에서float
예를 들어 데이터 타입은 단정도 부동소수점 번호의 IEEE 사양에 따라 32비트로 표시됩니다.따라서 이들 값(부동소수점 가산, 곱셈 등)에 대해 부동소수점 고유의 마이크로프로세서를 사용합니다.
유형 제약의 깊이와 그 평가 방식은 언어 입력에 영향을 미칩니다.프로그래밍 언어는 타입 다형성의 경우 각 타입의 다양한 콘크리트 알고리즘과 연산을 관련지을 수 있다.프로그래밍 언어의 구체적인 유형 시스템은 컴퓨터 아키텍처, 컴파일러 구현 및 언어 설계의 실제 문제에서 비롯되었지만, 유형 이론은 유형 시스템의 연구입니다.
유형 시스템은 다양한 정적 또는 동적, 강한 유형 또는 약한 유형일 수 있습니다.
「 」를 참조해 주세요.
- C 데이터형
- 데이터 사전
- 기능 프로그래밍
- 친절한
- 유형(모델 이론)
- 유형의 수학적 모델에 대한 유형 이론
- 프로그래밍 언어 타이핑의 다양한 선택을 위한 타이핑 시스템
- 유형 변환
- ISO/IEC 11404, 범용 데이터형
레퍼런스
- ^ 무료 온라인 컴퓨터 사전에 입력하다
- ^ Shaffer, C. A. (2011). Data Structures & Algorithm Analysis in C++ (3rd ed.). Mineola, NY: Dover. 1.2. ISBN 978-0-486-48582-9.
- ^ Ehrig, H. (1985). Fundamentals of Algebraic Specification 1 - Equations and Initial Semantics. Springer-Verlag. ISBN 0-387-13718-1.
- ^ Wechler, Wolfgang (1992). Universal Algebra for Computer Scientists. Springer-Verlag. ISBN 0-387-54280-9.
- ^ Bunkenburg, Alexander (1994). "The Boom Hierarchy". Functional Programming, Glasgow 1993: 1–8. CiteSeerX 10.1.1.49.3252. doi:10.1007/978-1-4471-3236-3_1.
- ^ Flanagan, David (1997). "6.2 Functions as Data Types". JavaScript : the definitive guide (2nd ed.). Cambridge: O'Reilly & Associates. ISBN 9781565922341.
- ^ West, Randolph (27 May 2020). "How SQL Server stores data types: money". Born SQL. Retrieved 28 January 2022.
Some time ago I described MONEY as a “convenience” data type which is effectively the same as DECIMAL(19,4), [...]
- ^ "Introduction to data types and field properties". support.microsoft.com. Retrieved 28 January 2022.
- ^ Wickham, Hadley. "16 Dates and times". R for data science: import, tidy, transform, visualize, and model data. Sebastopol, CA. ISBN 1491910399. Retrieved 28 January 2022.
추가 정보
- Parnas, David L.; Shore, John E.; Weiss, David (1976). "Abstract types defined as classes of variables". Proceedings of the 1976 Conference on Data : Abstraction, Definition and Structure: 149–154. doi:10.1145/800237.807133. S2CID 14448258.
- Cardelli, Luca; Wegner, Peter (December 1985). "On Understanding Types, Data Abstraction, and Polymorphism" (PDF). ACM Computing Surveys. 17 (4): 471–523. CiteSeerX 10.1.1.117.695. doi:10.1145/6041.6042. ISSN 0360-0300. S2CID 2921816.
- Cleaveland, J. Craig (1986). An Introduction to Data Types. Addison-Wesley. ISBN 978-0201119404.