728x90
01. 배열
✅ 배열
- 동질형 데이터의 모음으로 구성된 타입
- 원소(element): 배열의 각 데이터
- 배열의 크기: 배열이 가지는 원소의 개수
- 각 원소는 첨자로 구분
- 첨자(subscript): 첫 원소와의 상대적 위치
🔸데이터 집합
- 원소의 타입에 해당하는 데이터 집합이 배열의 크기만큼 모인 집합
- 원소의 타입과 배열의 크기에 따라 다양한 타입 존재
- 원소의 타입: 단순타입 및 복합타입 모두 가능
- 배열의 크기: 양의 정수 범위*차원
▪️ 차원(dimension)
- 배열에 사용되는 첨자의 개수
- 1차원 배열 → [크기]
- 2차원 배열 → [행][열]
- 3차원 배열 → [면][행][열]
✅ 배열의 구현
고려해야 할 점 1. 저장공간 확보
- 정적 변수: Fortran
- 스택 동적 변수: 배열의 크기는 정적 바인딩 또는 동적 바인딩
- 힙 동적 변수: 배열의 크기도 동적 바인딩
//스택 동적 변수의 배열 크기 정적 바인딩 in C++
char arr[5];
//스택 동적 변수의 배열 크기 동적 바인딩 in C
int n = 5;
char arr[n];
//힙 동적 변수의 배열 크기 동적 바인딩 in Java
char[] arr = new char[5];
고려해야 할 점 2. 첨자를 통한 원소의 주소 계산
▪️ 크기 N인 1차원 배열 A
- 주소(A[i]) = 주소(A[0]) + i * 원소크기
▪️ 크기 M*N인 2차원 배열 B
- 행우선 저장: 대부분의 언어가 사용
- 주소(B[i][j]) = 주소(B[0][0]) + i*n*원소크기 + j*원소크기
- 열우선 저장: Fortran
- 주소(B[i][j]) = 주소(B[0][0]) + j*m*원소크기 + i*원소크기
🔸연산 집합
- 배열 전체를 다루는 연산들의 집합
- 개별 원소 연산은 원소 타입의 연산 집합에 의존
- 배열 전체에 대한 연산은 PL에 따라 다름
- C, C++, Java: 초기화 연산만 기본적으로 제공
- Ada, Perl, Python: 대입 연산 등이 포함
02. 문자열형
✅ 문자열형
- 문자열(문자들의 나열) 데이터를 다루는 타입
- 예) "123", "a", "good night", "KNOU", ...
🔸 데이터 집합
- 모든 문자열이 모인 집합
//C, C++ 문자형의 1차원 배열
char str[] = "abc";
//Java String 클래스타입
String str = "abc";
🔸연산 집합
- PL마다 많은 차이가 존재
- C, C++: 기본적인 문자열 연산 없음
- Java
- 대입연산: str2 = str;
- 연결 연산: "good"+"night" → "good night"
03. 연관배열과 해싱
✅ 연관배열(associative array)
- 동질형 데이터의 순서 없는 모음으로 구성된 타입 → 원소 간의 위치 관계는 의미 없음
- 각 원소는 키(key)로 구별
- 키: 각 원소의 절대 위치. 중복 불가(↔원소는 중복 가능)
=> 연관배열과 해싱은 동일한 개념!
🔸데이터 집합
- 키의 데이터 집합과 원소 타입의 데이터 집합 쌍이 모인 집합
- 키의 타입(정수, 문자열 등)과 원소의 타입에 따라 다양한 타입 존재
//Perl - 해시(hash)타입
%walk = ('Tue' => 2000, 'Mon' => 2000, 'Wed' => 2500, 'Sun' => 1000);
//C++ - map 타입
map<String, int> walk {{"Tue", 2000}, {"Mon", 2000}, {"Wed",2500}, {"Sun", 1000}};
🔸연산 집합
- 원소 참조, 원소 추가, 원소 삭제 등
//Perl 원소 참조
$walk{'Sun'};
//Perl 원소 추가, 원소 삭제
$walk{'Thu'} = 3000;
delete $walk{'Mon'};
//C++ 원소 참조
walk['Sun'];
//C++ 원소 추가, 원소 삭제
walk.insert({"Thu", 3000});
walk.erase("Mon");
04. 구조체와 공용체
✅ 구조체(structure type)
= 레코드형(record type)
- 데이터의 모음으로 구성된 타입
- 원소: 동질형/이질형 모두 가능
- 각기 다른 타입의 데이터라도 서로 연관이 있다면 모아놓은 것
- 각 원소는 이름으로 구별
- 이름: 각 원소의 타입으로 선언된 변수명
🔸데이터 집합
- 각 원소의 타입에 해당하는 데이터 집합들이 모인 집합
- 원소의 개수와 각 원소의 타입에 따라 다양한 타입 존재
- 각 원소의 타입: 단순타입, 복합타입 모두 가능
🔸연산 집합
- 초기화, 대입 연산
✅ 공용체(union type)
- 저장공간을 공유하는 데이터의 모음으로 구성된 타입
- 원소들의 구성 형태는 구조체와 유사함 → 각 원소는 이름으로 구별
- 하나의 공간을 같이 쓰기 때문에 공간 절약 가능하지만 한 원소의 값이 변경되면 다른 원소들이 영향을 받음
🔸데이터 집합
- 각 원소의 타입에 해당하는 데이터 집합의 합집합
- 각 원소의 타입에 따라 다양한 타입 존재
- 각 원소의 타입: 단순타입, 복합타입 모두 가능
//C, C++ → union
union uni
{
int i;
char a;
double f;
};
🔸연산 집합
- 개별 원소 타입의 연산 집합
05. 포인터형과 참조형
✅ 포인터형(pointer type)
- 특정 데이터가 저장되는 주소 자체를 데이터로 다루는 타입
- 특정 데이터 타입은 사용자가 지정(단순/복합타입)
🔸데이터 집합
- 가용한 범위의 주소를 포함
- 32비트 시스템 → 2^32 이내
- 64비트 시스템 → 2^64 이내
🔸연산 집합
- 대입 연산
- 덧셈, 뺄셈
✅ 참조형(reference type)
- 사용자가 지정하는 타입의 데이터가 저장된 주소 자체를 자신의 주소로 사용하는 타입
🔸데이터 집합
- 지정한 타입의 데이터 집합
🔸연산 집합
- 지정한 타입의 연산 집합
728x90
'KNOU > 프로그래밍언어론' 카테고리의 다른 글
[프로그래밍언어론] 12. 문장 (0) | 2022.11.24 |
---|---|
[프로그래밍언어론] 11. 수식 (0) | 2022.11.23 |
[프로그래밍언어론] 9. 타입 (0) | 2022.11.01 |
[프로그래밍언어론] 8. 변수의 영역 (0) | 2022.10.10 |
[프로그래밍 언어론] 7. 변수와 바인딩 (0) | 2022.09.28 |