Computer Science/프로그래밍언어론

Chapter5-1 Elementary Date Types

윤재에요 2023. 4. 20. 12:43

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로 저장됨

Computing with Decimal Data

 

Enumerations

  • Enumeration이란?
    • 이산 값들의 순차 목록
  • Enumeration을 사용하는 이유
    • 가독성을 높이기 위해
    • 타입 검사를 하기 위해
  • 예(C언어)
    • enum StudentClass {Fresh, Soph, Junior, Senior};
      enum StudentCalss level;
      lever=Junior;
      level= 10;  --> error

 

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