나무 숲
프로그래밍언어론 key6 Encapsulation 본문
프로그래밍이란?
알고리즘과 데이터를 이용, 입력 데이터를 적합한 절차를 통해 처리하는 것
Encapsulation?
데이터와 연산을 하나의 묶음, capsule로 묶을 수 있는 장치
하나의 Unit으로 만드는 것
지원 예) ada의 package, c++의 class
User-defined Data Types?
(필수)
1 Structured data : 복합 데이터 생성
2 Subprograms : 새로운 연산 정의
(고급)
3 Type Declarations : 특정 부류의 데이터와 관련 연산을 묶어 새로운 데이터 타입 정의
4 Inheritance : 기존 데이터 타입의 기능을 포함, 확장된 데이터 타입을 생성
Structured Data?
다른 데이터 객체를 원소나 요소로 하여 구성된 데이터 객체. (배열/구조체/스택/리스트/집합)
다시말해 여러 데이터가 모여서 된 데이터
Data Structure - Type specification
요소 개수, 요소 타입, 요소 선택 방법, 최대 요소 개수, 구성 방법
Data Structure - Operation
데이터 구조에 관한 연산
원소 선택, 전체 구조에 대한 연산, 원소의 삽입/삭제, 데이터 구조의 생성/소멸
Data Structure - Implementation
저장공간 형태 : 연속/연결
연산 구현
저장공간 관리
Storage Management의 문제점
Garbage : 참조경로를 잃어버린 객체 (=dangling object) ->공간 낭비로 메모리 누수 발생
Dangling reference : 해제된 공간을 가리키는 참조 경로 -> 다른 용도의 공간을 훼손할 수 있어 위험
Structured type의 타입 검사를 복잡하게 하는 요인
선택한 원소가 실제로 존재하는가 검사해야 하고, 선택된 원소의 타입도 다시 고려해야 함 (선택한 원소가 다시 structured type일수도)
Arrays(Vector)란?
같은 타입의 유한한 개체가 일렬나열된 것이며, 원소 개수/원소 타입/첨자 의 속성을 갖는다
다차원 배열에는 row-major, column-major이 있고, Slice란 연산 결과가 다시 배열이 되는 것
Array - Operation
Component Operation
원소 선택, 원소 갱신, 원소 삽입/삭제
Whole Array Operation
크기, 배열 대입, 내적, 외적 .... -> 문제점 : 중간 결과를 저장할 공간이 필요하다
Array - Implementation (1 dimension)
참조 공식 : 첫번째 원소 주소 + (I번째 원소 주소 - Lower bound)*원소 크기
Array - Two Dimension
row(행. 가로) column(열. 세로) 배열의 배열로 2차원 배열을 지원한다
참조 공식 : base address + (I번째 주소의 행 - Lower bound1)*한 행의 크기 + (I번째 주소의 열 - Lower bound2)*원소 크기
Array - Associative
연관배열. 이름을 첨자로 사용한다
연산 : 첨가, 변경, 삭제, 참조
Records?
다른 타입의 정해진 수의 원소들을 하나로 모은 것 (c- 구조체)
원소 개수, 원소 타입, 원소 선택자
Variant Records?
하나의 타입에 여러 다른 형태의 타입이 올 수 있지만 동시에 여러 값을 갖지는 않는다 (모든 필드의 좌측값이 같다) (c - Union)
공간 효율성을 위해 존재하는 타입이며, 타입 검사를 동적으로 하거나 하지 않는다. (타입 검사에 문제 있을 수 있다)
Variant Records - Pascal 문제점?
태그를 변경할 수 있다!
List와 배열의 차이
리스트는 순차 목록.
고정 길이가 아니고(=가변 길이) 동형 원소가 아닐 수 있다 + 암시적 선언
generalized list는리스트의 원소로 리스트를 포함한 것. 예)트리
Set?
서로 다른 값의 순서 없는 모음
기본 연산은 원소 검사, 추가, 삭제, 합집합, 교집합, 차집합 등이 있다
Abstraction?
추상화. 디테일을 숨기고 관심있는 것에 집중한다 (더 간단하게 만드는 것, 간략화)
Information Hiding?
디테일을 숨기는 것 (정보은닉) - 인터페이스와 무관한 부분을 숨기는 것, 세부구현 숨김
Encapsulation과는 다르다
Abstract Data Types (ADT)
타입이란 값의 집합+연산의 집합 => Encapsulation 이고, ADT도 타입이다 (값, 연산이 드러나지 않을 뿐)
=>세부 구현이 드러나지 않은 데이터 타입 => abstraction+information hiding
ada에서는 private을 선언하여 enforce encapsulation+info hiding, c++에서는 protected선언
Subprogram - Specification
종류: 함수(리턴), 프로시저(side-effect)
명세: 이름, 시그니처, 몸체
Activation Records
서브프로그램과 관련된 동적 데이터를 관리하는 구조체
서브프로그램이 실행될 경우에만 생성됨
스택 영역에 할당되어 재귀 가능
Stack Frame
Stack of Activation record중의 하나.
함수 호출 후 (정상적인 경우) 반드시 복귀, 복귀될 경우 최근에 호출된 함수가 먼저 복귀됨
Accessing Local data
관련된 활성레코드의 프레임 포인터 값을 구하고, 참조하고자 하는 데이터 항목의 offset을 이용
Subprogram linkage - Call 전 취해야 할 액션
Parameter Passing, storage for locals, saving the execution status of calling program unit, Transfer control to the subprogram, Mechanism for accessing nonlocals
Subprogram linkage - Return 전 취해야 할 액션
Move local values of formal parameter to actual parameter if outmode or pass-by-copy, Deallocate storatge for locals, Return mechanism for nonlocals, Return the control to calling program unit
Implementing simple subprograms
Call semantics
caller의 실행 상태를 저장->carry out parameter passing process->pass the return address->transfer control to the callee
Return semantics
pass-by-value 파라미터들이 사용되었으면 그 파라미터들의 현재값을 상응하는 실제 파라미터로 옮긴다. 함수이면, move the functional value to a place the caller can get it -> caller의 실행 상태를 restore -> transfer control back to the caller
Activation record : 포맷, 레이아웃, 실행중인 subprogram의 noncode part
activation record instance는 activation record의 구체적인 예 (activation record)가 실행될 때마다 만들어진 것. 어떠한 subprogram activation에서 만들어진 데이터 집합)
Implementing Subprograms with Stack-dynamic local variables
더 복잡하다. 왜냐면
지역변수들에게 implicit 할당과 해제를 위해 컴파일러는 코드를 생성해야 한다.
재귀
activation record의 format은 static하지만 그 크기는 dynamic할 수 있다
dynamic link는 caller의 activation record의 top instance를 가리킨다
activation record의 instance는, subprogram이 called되면 dynamic하게 만들어진다
Lifetime & Scope
lifetime지속시간 : 해당 변수의 storage binding이 지속되는 시간
static time : 처음부터 끝까지 (주로 전역변수)
dynamic time : 선언된 부분에서 시작 (주로 지역변수.. 단, 예외는 static local in C)
scope가시영역 : 프로그램에서 해당 변수를 볼 수 있는 영역. 공간의 일부분
Scope Hole
lifetime을 공간 축에 나타내면,
지역변수의 scope에 의해 가려지는 비지역 변수의 scope
Terminologies
allocation
static allocation 프로그램 적재 시 할당
automatic allocation 서브프로그램 진입 시 할당
manual(=dynamic allocation) 명시적 연산자나 함수를 통해 변수 할당
Type safety
타입 안전성
어떤 언어에서 값들이 타입의 취급범위를 넘어가지 않을 때 그 언어의 타입은 안전
정해진 타입들이 input, output되는지
타입 검사
타입 안전성을 검사하는 것
Granularity of Typing
Strongly Typed
모든 타입 오류 검출 (반드시 static type checking 하는 것은 아님)
Weakly Typed
타입 에러 있지만 어떤 경우 검출되지 않음. 타입 변환 연산자/variant record 등이 원인일 수 있음
Typeless
어떤 이름은 임의 타입의 객체를 가리킬 수 있으며 특정 이름에 대한 타입 선언도 별도로 없음
어떤 타입이 들어갈지는 컴파일 시 결정되므로 dynamic하게 타입을 체크해야 하며, 비용이 높아진다
Type Checking time
static type checking : 수행 전에 타입 검사를 완료
dynamic type checking 수행 중에 타입 검사. type descriptor을 수행 중 관리해야 하므로 메모리를 많이 차지하고 시간도 오래걸림 하지만 flexibility의 장점이 있다
Equality
data equality
atomic data 비트 패턴이 같으면 동일
structured data 대응 구성 원소가 같으면 동일
type equivalence
name equivalence 파스칼에서처럼, 이름이 같으면 동일
structural equivalence 구조가 같으면 동일. 필드명, 필드 순서 고려
Parameterized type
중에서 type parameter을 받는 경우 generic type이라고 한다
'Career' 카테고리의 다른 글
프로그래밍언어론 key8 Sequence Control (1) | 2016.06.12 |
---|---|
프로그래밍언어론 key7 Inheritance (0) | 2016.06.12 |
Control Unit Operation (0) | 2016.06.11 |
Processor Structure and Function (0) | 2016.06.11 |
Computer Arithmetic (0) | 2016.06.10 |