프로그래밍[Univ]/프로그래밍 언어론

[프로그래밍 언어론] Data Type Part 1

Cloud Travel 2011. 10. 15. 12:08
1. 타입의 환경 (Evolution of Data Types)
 - 1956년 : FORTRAN - INTEGER, REAL, arrays 등 간단한 것만 사용을 했었다.
 - 1983년 : Ada - 사용자가 데이터타입을 만들어서 사용하면서, 복잡한 데이터 유형이 나타나기 시작했다.

2. 타입 설계 (Type Design)
 - 타입을 명세하는 기법. 즉, 타입을 바인딩하는 기법을 말한다.
 - 타입에 의해 바인딩 된 것은 타입으로 할 수 있는 연산자를 같이 바인딩 된다.
 - Primitive Data Type 방식과 Not-Primitive Data Type 방식이 있다. 

3. Primitive Data Type
 - 다른 데이터에 의해서 정해지지 않고, 자기 자신자체로 데이터가 된다.
 - 우리가 쓰고 있는 int, float등이 이에 해당한다.

 ⓐ Integer (정수)
  - 하드웨어에 정확한 값이 저장된다.
  - 8개의 다른 인티저 타입이 존재한다. 
   > (signed | unsigned) (long | short) (long | short) int // 2 * 2* 2 의 경우로 8가지

 ⓑ Floating point (실수)
  -  Integer와 다르게 근사값이 저장이 된다.
   ex) PI = 3.14159...   > Float point의 저장 공간에 따라서 뒤의 유효자리 숫자가 잘려진다.
  -  

 
 ⓒ  Character (문자)
  - Computer에선 문자는 숫자로 변경된다
   > 전세계적으로 컴퓨터에서의 처리를 통일하기 위해서 ASCII 코드를 정하게 된다.
      (ASCII 코드는 1byte로 128개의 문자만 저장가능 / 저장공간의 부족)
   > ASCII의 저장공간 부족으로 Unicode(16byte)가 새로 통일안으로 나왔다.

 ⓓ Boolean (True/False)
  - 1Bit로 True/False를 저장하는 것을 하지만, 메모리가 Byte단위로 바인딩 되므로 1Byte를 가지고 있다.

 ⓔ Decimal (10진수) 
  - 정밀한 계산이 필요할 경우 제공 ( ex) 돈계산을 할경우 )
  - 각각의 숫자 하나하나에 1byte를 제공해준다.
   ex) 2 5 6 의 10진수형 저장은 00000010 00000101 00000110 로 각각의 숫자에 1Byte씩 총 3Byte가  필요하다.
  - 장점 : 매우 정확한 계산이 가능하다.
  - 단점 : 메모리가 많이들어 높은 자리 숫자를 표현하지 못한다.
   > 적은 범위에서 정확한 계산이 요할때 사용

4. String Type
 - Primitive Type과 Not-Primitive Type이 모두 나타나는 Type이다.
 - String Type를 Primitive하게 제공시에는 스트링을 다루는데 필요한 연산자들이 존재하며,
   이미 언어상에 작성되있어야 한다.
 - (In Pascal) 
  Not Primitive / 기본적인 assignment와 comparison만 제공, 그 이외에는 사용자가 모두 코드로 작성해야함.
 - (in Ada, FORTRAN 77/90, Basic)
  Primitive / assignment, comparison, catenation, substring reference 등의 기능을 제공해준다.
               / 특히 FORTRAN은 pattern matching 기능도 제공해준다. 
 - (In C/C++)
  Not Primitive, But Library형태로 스트링 함수를 제공 
 - (In SNOBOL 4)
  Primitive / String에 해당하는 연산자를 완벽하게 모두 제공해준다.
 - (In Perl)
  Regular expression을 이용하여 사용이 가능하다.
   > [A-Za-z][A-za\d]+/   : Regular expression에 적합하면 변수로써 사용 가능
    ex) 위와 같이 Regular expression을 정했다면 N1 = apple가능, N2 = 2apple 불가능이 된다.
 - (In Java)
  거의 Primitive하다. String을 클래스로서 제공이 된다.

4.1 String Type유지시 꼭 필요한 요소
 - 길이 : length
 ⓐ Static : 한번 정한 길이가 변하지 않음.
 ⓑ Dynamic : 필요한 만큼만 사용
 ⓒ Limited Dynamic Length : 제한된 범위내에서 길이 변환이 자유롭게 됨.

     


     



 - Primitive로 줄때 길이는 어떤 룰에 따라서 줄 것인가?
 ⓐ Static Length  컴파일 시간에 길이가 정해저 유지해야 될 값이 적다. 하지만 메모리 효율이 낮다.
 ⓑ Dynamic Length 실행시간에 따라서 지속적으로 길이가 변한다. 현재 길이값만을 유지하지만 회수와 할당을                               반복하여 실행시간이 길어진다.
 ⓒ Limited Dynamic Length 실행시간에 따라 바뀐 현재 길이와 최대수용 길이를 같이 유지해야한다.