반응형
이전 포스팅: [PL] Data types(1)
Array Types(배열 타입)
배열은 여러개의 동일한 데이터 타입을 묶어서 처리하는 데이터 타입이다. 인덱싱(Indexing)을 통해 각각의 원소에 접근할 수 있으며 C/C++에서는 배열의 인덱스 범위 검사(Index range checking)를 수행하지 않지만 Java 등의 언어에서는 수행한다.
※ Subscript Binding and Array Categories
- Static
- 고정된 메모리 위치에 고정된 크기의 배열을 할당하는 방식(before runtime)
- 실행과 동시에 해당 메모리는 할당된 상태로 프로그램이 끝날때까지 사용
- 효율적이나 유연성(재귀 호출 등)이 떨어짐
- static이 붙은 배열 - Fixed stack-dynamic
- 크기가 고정되어 있지만 스택 할당은 런타임에 결정되는 방식
- 공간적으로 효율적
- static이 붙지 않은 일반적인 배열 - Fixed heap-dynamic
- storage binding은 dynamic하지만 할당 이후로는 고정되는 방식
- ex) malloc, new - Heap-dynamic
- subscript 범위 바인딩과 storage 할당 모두 dynamic하고 계속 변경될 수 있는 방식
- ex) Python의 list
※ Compile time Descriptors
※ Heterogeneous Array
- 서로 다른 타입의 데이터들을 묶어서 저장할 수 있는 배열
- ex) Python의 list
※ Associative Array
- 순서가 없고 원소의 key를 통해서 인덱싱하는 배열
- ex) Python의 dictionary
Record Type(레코드 타입)
서로 다른 타입의 데이터들을 묶고 각각의 이름을 통해서 관리하는 데이터 타입이다.
ex) C언어의 struct, Java와 C++의 class
Tuple Type(튜플 타입)
record type과 비슷한 역할을 하지만 데이터 각각의 이름이 없다.
리스트와도 비슷하지만 튜플은 수정될 수 없다.
List Type(리스트 타입)
배열과 비슷하지만 원소가 같은 타입일 필요가 없다.
파이썬에서는 배열 대신 리스트를 사용한다.
리스트의 원소로 리스트가 올 수도 있다.
반응형
'PL' 카테고리의 다른 글
[PL] Data types(3) (0) | 2022.04.23 |
---|---|
[PL] Data types(1) (0) | 2022.04.18 |
[PL] Names, Binding, Scope (0) | 2022.04.17 |
[PL] 어휘분석과 구문분석(Lexical and Syntax Analysis) (0) | 2022.04.17 |
[PL] Semantic의 표현 (0) | 2022.04.17 |