Data and Type
- Data
- 처리 대상
- 숫자, 문자 ,군집 데이터, 복합 데이터, 메타 데이터(예: 포인터)
- Type(형)
- 데이터를 분류해 둔 것
- 데이터의 집합
- 타입 = 갑 집함 + 연산 집합
- Abstract Data Type: 연산의 구현방법이 명시되지 않은 데이터 타입
Data Objects and Values
- Data Object
- 데이터 값을 포함하는 container 또는 memory location
- 일반적으로 변수라고도 함
- Scalar data objects: Numeric(Integer,Real),Boolean,Characters,Enumerations
Composite objects: String, Pointer
Structured objects: Arrays, Records, Lists, Sets - 주의: OOP의 객체와는 다른 개념
- Data Value특적 값을 나타내는 비트패턴
Attributes of Data Objects
- Data Object의 속성 몇가지
- Type,Location, Value, Name
- Component
- 다른 data object를 가리키는 pointer value에 해당
- value 속성의 일종
- 변수의 속성: Type, Location, Value, Name, Scope, Lifetime
Constants
- 상수란?
- 상수는 변수의 일종
- 다만 반드시 초기화되어야 함 (value binding)
- 또 값이 초기화 된 후에는 바꿀 수 없을 뿐
- 상수의 종류
- literal: 생긴 것 자체가 이름이자 값
- named constant: 값 이외의 별도로 이름이 있음
- cf manifest constant
- 값 바인딩이 정적인 named constant
Data Types
- Data Type = Set of Values + Set of Operations
- Specification of a Data Type
- 타입 자체의 속성, 예: 배열의 경우 차원, 첨자 범위 등
- 값집합
- 연산집합
- Data Type Specification 예시
- C언어에서 char s[5];
- Specification
- Attrubutes: s의 크기는 5, s의 원소 타입은 signed char
- Value set: S= C x C x C x C x C
- 여기서 C는 signed char의 value set
- Operations:
- [] : S x I -> C
- 여기서 I = {0,1,2,3,4}
Data Type Specification
- 이상적으로는,
- 모든 데이터 타입에 대해 명확한 명세 (specification)가 주어져야함
- 사용자 정의 데이터 타입에 대해서도 마찬가지임
- 데이터 타입의 연산 정의를 어렵게 하는 요인
- 특정 입력에 대해서는 정의되지 않을 수 있음 (어레이, 아웃오브바운드)
- 기본적으로 주어지는 인수가 있을 수 있음(글로벌 변수)
- 사이드 이펙트
- 자기수정
Subtypes
- Subtype <- Subset
- 어떤 데이터 타입의 값 집합의 일부를 취하여 만든 타입
- 기존 타입으로부커 유도된 타입일 수 있음
- 반대관계는 Supertype
- 예 : C에서는 거의. 모든 것이 int 서브타입
- 서브타입과 상속
- 서브타입 개념이 클래스 사이로 확장될 경우 상속이라고 함
- C의 char타입은 int 타입의 연산을 상속한다고 볼 수 있음
선언
- 선언문
- 언어 처리기(컴파일러 또는 인터프리터)에 대이터 객체의 이름과 타입정보를 전달
- 선언문은 수행된다고 하지 않고 elaboration 된다고 함
- 선언문의 위치 및 종류에 따라 데이터 객체의 영역과 라이프타임이 결정됨
- 선언문의 종류
- 명시적 선언 : 일반적인 언어 (C)
- 암시적 선언: 고전 언어, 인터프리터 언어 (FORTRAN)
- Declarations of Operation
- 함수 선언도 가능함
- 에: C언어의 function prototype
float Sub(int X, float Y);
Sub연산의 specification을 결정:
Sun: int x float -> float
- 선언의 목적
- 저장 형태 결정
- 메모리 관리
- 다형연산 지원
- 타입검사
Type Checking
- 타입검사
- 연산자나 서브프로그램에 대해 적절한 개수의 인수와 적절한 타입을 사용하는지 검사
- 타입검사 시기에 따른 분류
- 정적 타입검사: 컴파일 시간에 검사 (C, C++, JAVA)
- 동적 타입검사: 실행 시간에 검사 (LISP, Perl, Prolog)
- Typeless Languages
- 동적 타입검사를 수행하는 언어 중 선언문도 없고 변수의 타입이 유동적인 언어를 typeless 언어라고 함 (Python)
String Typing
- 강력한 타입검사
- 타입 오류가 있는 경우 항상 이를 검출할 수 있는 타입검사
- 반드시 정적 타입검사여야 하는가? 논란의 여지가 있다
- 반드시 정적일 필요는 없지만, 많은 사람들이 혼동하고 있음
- type safe function (operation) f : S->R 에서 f를 수행한겨로가 R이외의 값은 나올 수 없는 경우
- 강형 언어 (Strongly-typed language)
- 강력한 타입검사를 수행하는 언어
- 대부분의 언어가 강형언어라고 주장하고 있지만 그렇지 않은 경우가 많음
- 예: C의 union , void , type casting 연산등은 강력한 타입검사기능을 무력화 시킬수 있음 , 타입에러를 찾지 못할 수 있음
Type Inference
- 타입 추론
- 정적 타입 검사를 수행하는 언어 중 어떤 언어는 경우에 따라 명시적 선언을 할 필요가 없음
- 대신 타입 추론이 명시적 선언을 보완하는 역할을 함
- 예: 정수끼리의 계산
타입변환
- 타입변환이 필요한 이유
- A:=B를 수행할 수 있으려면 변수 A와 B의 타입은?
- A+B를 수행할 수 있으려면 변수 A와 B의 타입은?
- 다른 타입이라면 mixed mode라고 부름
- 타입변롼의 분류(타입변환 연산자의 유무에 따라)
- 명시적: 타입 변환 연산을 명시적으로 나타내야 함(type casting)
- 암시적 : 타입 변환 규칙이 정해져 있음 (type coercion, ex.정수실수의 곱셈)
- 타입 변환의 분류(정보 손실 유무에 따라)
- 확장변환: 정보손실없음
- 축소변환: 정보가 손실될 수 있음
- Coercion 예
- A: real , B:=integer
- A:= B. 암시적 변환, 확장변환
- B:=A, 축소변환 -> 정봅 손일이 유발될 수 있으므로 허용 되지 않음, 대신 형변환을 위한 함수가 제공됨(반올림: round(), 소수부분삭제: trunc())
Assignment
Assignment Issues
- Side Effect of the Operation
- 값의 data object로의 바인딩 변경때문
- 연속 지정(Cascading Assignments)
- Pascal : integet x integer -> void
- C : integer x integer -> integer
- 지정 연산 종류
- Scalar: value copying
- Pointer: pointer copying
- Record : bit-wise copying(word by word copying), field-wise. copying(COBOL)
Scalar Data and Composite Data
- Scalar Data
- 하나의 데이터 객체는 하나의 값만 나타냄
- 예) 정수 데이터 19는 정수 19만을 나타낼 뿐
- 통상 하드웨어를 통해 직접 지원됨
- Composite Data
- 복합데이터, 군집데이터
- 하나의 데이터 객체가 여러 정보를 포함하고 있음
- 예)문자열 "abc"는 문자 a,b,c가 모여서 이루어 진 것으로 길이 3이라는 정보도 포함하고 있음
- 소프트웨어의 도움을 받아 지원됨
Numeric Data Types
- 정수(integer)
- 정수
- subranges
- 실수
- 부동소수점 수 (floating-point numbers)
- 고정소수점 수 (fixed-point real numbers)
- 기타
- 복소수
- 유리수
정수
- set of Values
- MinInt ~ MaxInt 형태
- 일반적으로 2의 보수로 구현됨
- Operations
- 산술연산: 가감승제, 나머지
- 관계연산: 두 정수를 비교
- 대입연산: 명령문인가, 연산자인가?
- 비트연산: 비트별 and, or, not, shift
- 구현
- 통산 descriptor가 없음
- dynammic type checking을 위해서는 descriptor 필요
2의 보수
- 정수 구현 방법
- Sign and Magnitude
- One's Complement
- Two's Complement: 가장 보편적인 방법
- 0의 표기는 하나뿐임
- 하드웨어 구현이 쉬움 : 빼기는 더하기로 구현됨 x+(-x)=0
Subrage Types
- Specification
- Interger 타입의 서브타입
- 예: 1..10(파스칼)
- 연산은 정수형 연산을 그대로 이용
- wht subranges?
- 더 작은 공간에 저장할 수 있음
- 더 정밀한 타입 검사가 가능
- subrange는 값이 일부 불연속적인 기본(discrete) 유형의 값의 연속 하위 집합을 구성하는 타입이다. : pascal계 언어들 대부분이, 정수형, Char형, 열거형, 다른 Subrange형에 대한 subrange를 선언할 수 잇다.
Floating-Point Real Numbers
- Set of Values
- 정수형과 비슷하게 -MaxNum ~ +MaxNum의 형태
- Operations
- 정수형의 모든 연산(나머지연산제외)을 그대로 포함
- 언어에 따라서는 나머지 연산을 포함하기로함
- 소수점 이하를 처리하기 위한 연산: round, truncate, ceiling, floor
- 기타 수학함수: sine, maximum, absolute value,...
- Implementation
- IEEE Standard754[IEEE 1985]에 32bit, 64표현 형식이 나와 있음
Floating-Pont Number 구현
- 세개 요소: Sign, Exponent(지수), Mantissa(로그의 가수)
- 지수는 변형되어 저장됨
- eg. if 8 bit(256values) + 127 added to exponent
- the exponent of 1 = 1 - 127 = -126 is tue exponent
- the exponent of 127 = 127 - 127 = 0 is tue exponent
- the exponent of 254 = 254 - 127 = 127 is tue exponent
IEEE 754
- 32-bit 및 64-bit standard를 정의
- 32-bit standard:
- S: 부호비트 1bit, 0은 양수, 1은 음수
- E: 127-초과표기 의 지수 8비트, 0~255는 -127~128범위의 2의 지수를 표현
- M: 가수 23비트, 처음 비트는 항상 1이므로 표기하지 않음, 결국 24비트의 정확도
- 64-bit standard:
- S: 1bit
- E: 11bit,excess-1023, M:52bit
- 표현 범위
- 32bit: 대략 +-10^38.53
- 64bit: 대략 +-10^308.25
Fixed-Point Real numbers
- Fixed-Point Real number란
- 길이가 고정된 자릿수로 실수를 표현
- 예:
- COBOL
X PICTURE 999v999
정수부분 세자리, 소수부분 두자리의 실수를 X로 선언 - PL/I
DCLARE X FIXED DECIMAL (10,3),
Y FIXED DECIMAL (10,2),
Z FIXED DECIMAL (10,2;
10개의 자릿수 중 소수점 이라 자릿수가 3개(X),2개(Y와 Z)
두번째 인수를 scale factor 라고 함:
value(X) = rvalue(X) x 10^(-sf)
103.421은 SF=3인 103421로 저장됨
- COBOL
Computing with Decimal Data
Enumerations
- Enumeration이란?
- 이산 값들의 순차 목록
- Enumeration을 사용하는 이유
- 가독성을 높이기 위해
- 타입 검사를 하기 위해
- 예(C언어)
- enum StudentClass {Fresh, Soph, Junior, Senior};
enum StudentCalss level;
lever=Junior;
level= 10; --> error
- enum StudentClass {Fresh, Soph, Junior, Senior};
Booleans
- Specification
- true,false 등의 논리값을 나타내기 위한 타입
- Value Set = {true, flase}
- Operations: and, or ,not
- Implementation
- Pascal,Ada의 경우 enumeration의 특수한 경우로 구현함
- 두가지 형태로 구현됨
- 특정 패턴: 0=false, 1=true
- 0과 기타: 0 = flase, 다른 것은 true
Characters
- Specification
- 문자를 나타내기 위한 타입
- Value Set: ASCII, Unicode 등의 문자집합, character set
- operations: 형 변환 연산자, collating sequence에 의한 문자 변환 연산자
- Implementation
- 프로그래밍 언어에서 통상 특정 character set을 지정함
- collating sequence: character set에 따라 결정되는 문자들의 순서
- 확장 가능한 다른 타입을 제공하는 언어도 있음
Composite Data Types
- Composite Data Type
- 여러 정보를 포함하는 데이터를 나타내기 위한 타임
- 여기서는 elementary data에 해당하는 composite data type만을 다룸
- 용어 정리
- Composite Data: 여러 데이터들 -> 한 단위의 데이터
- Derived Type: 기존 데이터타입 -> 새로운 데이터 타입
Character Strings
- 문자열
- primitive data type의 문자들로 이루어짐
- 문자열 자체를 primitive type으로 제공하기도 함
- Fixed length
- char A[10] (C언어)
- DCL B CHAR(10) (PL/I)
- var C : packed array[1..10] of char (pascal)
- Variable length
- DCL D CHAR(20) VARYING -크기에 맞게 할당,최대20. (PL/I)
- E= "ABC" (SNOBOL4, 어떤사이즈든 동적으로)
- F= "ABCDEF" (C 어떤사이즈든 개발자가 정의하는데로)
pointers
- Pointer란
- 다른 데이터 객체를 가리키기 위한 데이터 타입
- 즉 "주소(address)"를 저장하기 위한 데이터 타입
- Pointer를 사용하는 이유
- Reucursive data structure를 만들기 위해
- 순환전 자료구조의 에: List, Tree등
- 명령형 언어에서 순환적 자료구조는 일반적으로 포인터를 통해 지원함
- 주의
- 포인터는 매우 위험한 자료구조이므로 주의하여 사용하여야 함
- "Segmentation Violation"의 주된 원인
Files and Input-Outut
- 파일 데이터의 특징
- 비교적 대형이다
- 지속성
- 파일종류
- 순차파일: 순차적 접근만 허용
- 직접접근파일: 색인을 통한 무작위 접근
- 색인순차파일: 첫 위치는 색인을 통해서 그 다음부터는 순차적으로 접근
- 데이터 유형에 따라 : text file, binary file
- Pseudo-file: input stream,output stream, error stream
'Computer Science > 프로그래밍언어론' 카테고리의 다른 글
Chapter6 Encapsulation (0) | 2023.06.13 |
---|---|
Chapter5-2 Structured Data Types (0) | 2023.06.12 |
Chapter4 Modeling Language Properties (0) | 2023.04.20 |
Chapter3 Language Translation Issues (0) | 2023.04.20 |
Chapter 2 Impact of Machine Architectures (0) | 2023.04.18 |