본문 바로가기
programing/Common

바인딩과 스코프

by RedWiz 2016. 8. 2.

바인딩 : 이름(변수, 배열, 라벨, 절차 등)을 그것이 포함하는 것(메모리 주소, 데이터 형 또는 실제 값)에 연결하는 작업

> 언어 설계시 : 연산자와 연산의 바인딩
> 언어 구현시 : 데이터 유형과 데이터 유형이 가질 수 있는 값의 바인딩(자료형)
> 프로그램 작성시 : 알고리즘, 데이터 구조, 모듈 이름에 대한 바인딩
> 컴파일 시 : 변수와 데이터 유형
> 링크 시 : 메모리 내의 프로그램 전체 레이아웃을 확정(개별 모듈 ex. lib)
> 로드 시 : 물리적 주소 선택 (C언어의 경우 정적변수)
> 실행 시 : 변수에 메모리 값을 바인딩


- 정적 바인딩 : 프로그램 실행 이전, 이른 바인딩(early binding)

> C언어에서 상수에 값을 바인딩
> C언어에서 함수의 정의에 함수 호출을 바인딩


- 동적 바인딩 : 프로그램 실행되는 동안, 늦은 바인딩(late binding)

> 메모리 주소와 포인터 변수를 바인딩
> C++에서 가상 멤버함수 정의에 멤버 함수의 호출을 바인딩


스코프 : 변수의 바인딩 변경이 없거나 최소한 변수의 재선언이 허락되지 않는 최대 범위
어떻게 변수와 관련된 이름을 참조할 지 결정


- 정적 스코프 : 프로그램의 물리적인 구조로 정의, 컴파일러에 의해 결정, 프로그램 텍스트를 검토하여 바인딩, 대부분의 컴파일 기반의 언어가 사용 (Cpp의 경우 네임스페이스 이용)

> 최근 내포 영역 규칙 : 중괄호로 구성된 블록을 해석, 동일 정적 스코프 내에 변수 선언이 존재 하지 않으면, 바로 상위 정적 스코프에서 찾음


- 동적 스코프 : 해석형 언어에서 사용, 자료형 결정이 항상 이루어 지지 않으므로 컴파일 시 자료형 체크 불가능, 바인딩을 위해 스택을 검토하여 스택의 직전 위치에서 시작해 아래쪽으로 검색 (함수내에 변수선언이 없으면 호출 이전 함수에서 검색)

'programing > Common' 카테고리의 다른 글

Git 정리  (0) 2016.08.08
Git 개념 가이드  (0) 2016.08.05
DLL에서 STL 사용시 문제  (0) 2015.05.14
C++ Optimization Strategies and Techniques  (0) 2015.05.08
프로그램 실행 과정  (0) 2015.05.07