Elementary Data Types - WIP
Data
- 처리 대상
- 숫자, 문자, 복합 데이터, 메타 데이터(ex: 포인터)
Data Object
OOP에서의 객체(Object)와는 다른 개념이다!
- 데이터 값을 포함하는 container 또는 memory location
- 일반적으로 변수(Variable)라 부름
- 6가지 기본 속성을 가짐
- type, name, value(R-value), address(L-value), lifetime, scope
- 다른 Data Object를 가리키는 pointer value를 특별히 Component라 부르기도 한다
(value, 즉 R-value 속성의 일종)
Constants
- 상수(Constant)도 변수의 일종
- 하지만 반드시 초기화(value binding)되어야 함
- 또한, 한번 초기화 된 다음에는 값이 변경될 수 없음
- 상수의 종류:
- literal: 생긴 것 자체가 이름이자 값
- named constant: 값 외에 별도의 이름이 존재하는 상수
- manifest constant: 컴파일 타임에 정적으로 값이 바인딩되는 named constant
Data Value
- 특정한 값을 나타내는 비트 패턴
- int a = 3;
-> 메모리에 저장되는 비트패턴은00000000000000000000000000000011
Type
- 데이터를 분류해둔 것
- 타입(Type) : 값(Value)의 집합 + 연산(Operation)의 집합
- The value that data objects of that type may have (값 집합)
- The operations that define the possible manipulations of data objects of that type (연산의 집합)
- -> ADT
Data Type Specification
- 이상적으로는, 모든 데이터 타입에 대해 명확한 명세(specification)가 주어져야 한다
- 허용 가능한 값의 범위 + 적용 가능한 연산의 목록
- 사용자 정의 타입(User-defined Type)도 마찬가지!!
- 타입의 연산 정의를 어렵게 만드는 요인들:
- 특정 입력에 대해서는 정의되지 않을 수 있음(UB, Undefined Behavior)
- ex: array out-of bounds
- 기본적으로, 암시적으로 주어지는 인수(Implicit Arguments)가 있을 수 있음
- 부작용(Side Effect)
- 자기 수정(Self-Modification)
- 특정 입력에 대해서는 정의되지 않을 수 있음(UB, Undefined Behavior)
Subtype
어떤 타입의 값 집합
의 일부를 취하는 새로운 타입- A is subtype of B if every value of A is a value of B
- 반대로, B는 A의 supertype 이라 부른다!
- Subtype 개념이 클래스로 확장된 경우를 상속(Inheritance)이라 부른다!!
Declaration
- 선언문이란?
- 언어 처리기(컴파일러 또는 인터프리터)에 데이터 객체의 이름과 타입 정보를 전달하는 문장(Statement)
- 선언문은 수행된다고 하지 않고,
Elaboration
된다고 부름!! - 선언문의 위치와 종류에 따라, 데이터 객체의 영역(Scope)과 지속시간(Lifetime)이 결정됨!
- 선언문의 종류
- 대부분의 언어에서는 명시적 선언문을 사용
- 일부 고전 언어에서는 암시적 선언문을 사용
- FORTRAN에서 { I, J, K, L, M, N } 으로 시작하는 변수는 암시적으로 정수형
- Perl의 경우: $(스칼라), @(배열), %(연관 배열, dictionary)
- 변수 대신, 함수를 선언할 수도 있다!
- ex: C언어의 function prototype
- float sub(int x, float y);
- ex: C언어의 function prototype
- 선언문의 역할:
- 저장 형태 결정(Choice of Storage Representations)
- 메모리 관리(Storage Management)
- 타입검사(Type Checking)
- 다형 연산 지원(Polymorphic Operations)
타입, 타입 검사, 타입 추론, 타입 변환(explicit, implicit), 할당, Lvalue, Rvalue, scala assignment(value copy), pointer assignment(pointer copy)
+ lifetime, scope, scope hole(shadowing), allocation 분류(static, dynamic{automatic allocation, manual allocation}, 타입 안전성(타입, 타입 검사 사이에 쓰기), granularity of typing{strongly typed, weakly typed, typeless}, type checking time{static type checking, dynamic type checking} - strongly typed라고 반드시 static type checking을 하는 것은 아님, Equality{data equality, type equivalence}, name equivalence, parameterized type(type을 parameter로 허용)
- 6-2 강의자료, 필기 참고해서 정리하기