일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
Tags
- 리스트
- 야학
- DataAnalysis
- 함수
- R
- 이토록 쉬운 통계&R
- 생활코딩
- 임경덕
- 숫자야구소스
- big_data
- sql
- list
- code
- 하둡
- hadoop
- 숫자야구
- python
- 데이터분석
- 루비페이퍼
- 파이썬
- if문
- DATABASE
- 데이터사이언스
- BigData
- 코딩야학
- 빅데이터
- 숫자야구코드
- 데이터과학
- stat
- for문
Archives
- Today
- Total
yekang
4장. 변수(~4.3) 본문
- 변수
변수 : 기억장소(Main Memory)의 하나의 장소(cell)를 추상화한 것.
변수의 다양한 속성들이 존재하는데
이름 : 변수의 이름(=식별자)
주소 : 변수의 값이 저장될 메모리 주소(l-value)
값 : 배정문에 의해 부여됨(r-value)
- x=y;의 의미 : y의 값을 x의 주소에 저장한다는 의미. 여기에서 x와 y 모두 변수 이름임에도 불구하고 배정문 왼쪽의 x는 주소를 의미하고 오른쪽 y는 값을 의미한다. 이러한 이유로 변수의 주소를 l-value(배정문의 왼쪽에 나타나므로)라 부르고, 변수의 값을 r-value(배정문의 오른쪽에 나타나므로)라 부른다.
타입(형) : 변수가 가질 수 있는 값의 범위와 이 값에 대한 연산들의 집합
영역 : 변수의 사용이 허락되는 범위
수명 : 변수가 메모리 주소에 할당되어 있는 기간
바인딩 : 변수에 변수와 관련된 속성을 연관시키는 것.
<바인딩 시간에 따른 바인딩 분류>
정적 바인딩:
- 프로그램이 실행되기 전( 주로 컴파일할 때) 바인딩이 발생
- 프로그램 실행 과정에서 변하지 않은 상태로 유지되는 바인딩
- 수치 계산을 목적으로 개발되는 언어
- 실행시간의 오버헤드를 줄이고자 함
- 컴파일 언어 (동적 바인딩 하는 애들도 있음)
-명시적 선언을 요구함
- 효율성을 중요시 함
- ex ) int x;
동적 바인딩:
- 프로그램 실행시간 중에 바인딩이 발생
- 프로그램 실행 과정에서 변경되는 바인딩
- 인터프리터 언어
- 명시적 선언을 요구하지 않음(해도 되지만 필수 아니다.// int 붙여도 되고 안붙여도 되고)
- 융통성과 편리성
- ex ) ptr=new int;(C++)
- ex) Peal
price=10000;
price-"very expensive";
<세분화된 바인딩 시간>
언어 정의(설계)시간 - 프로그래밍 언어를 정의할 때 이루어지는 바인딩
C 언어의 int 타입이 정수 값을 가진다는 의미를 바인딩
'+'기호에 덧셈 연산자라는 의미를 바인딩
언어 구현 시간 - 언어에 대한 번역기를 구현할 때 이루어지는 바인딩
C언어의 int 타입에 가능한 값의 범위를 바인딩
정수에 컴퓨터 내에서의 표기법을 바인딩
번역(컴파일)시간 - 원시 프로그램을 번역할 때 이루어지는 바인딩
다음 C 선언문에서 변수 x에 타입 int를 바인딩 // int x;
링크 시간 - 프로그램을 라이브러리와 링크할 때 이루어지는 바인딩
라이브러리 부프로그램 호출에 부프로그램 코드를 바인딩
적재 시간 - 프로그램의 실행을 위해 메모리로 적재할 때 이루어지는 바인딩
전역 변수에 메모리 주소를 바인딩
실행 시간 - 프로그램을 실행할 때 이루어지는 바인딩
다음 c 배정문에서 변수 x에 값 20을 바인딩
x=20;
선언 : 변수에 이름과 데이터 타입 등의 속성을 무여하는 문장.
int max(int a, int b); -> 부분적인 속성을 바인딩( 선언: 함수의 이름, 매개변수, 반환값의 타입만 기술하고 상세코드는 기술 안함)
int max(){} ->모든 잠재적인 속성을 바인딩(정의 : 코드 포함 모두 기술)
- 명시적 선언
- 선언문을 사용하여 변수 이름을 나열하고 이들에 속성을 부여하는 방법
- 변수 x의 데이터 타입을 예약어 int를 사용하여 명시적으로 지정
- C ,JAVA
ex) int x;
- 묵시적 선언
- 실행 시간 중에 일어나거나 프로그램 실행 과정에서 변경되는 바인딩
- Fortran은 선언문 없이 변수 이름을 그냥 사용하면 그 이름이 선언된 것으로 간주
- 변수이름이 'i' 'j' 'k' 'l' 'm' 'n'으로 시작되면 정수 타입으로, 그렇지 않으면 실수 타입으로 선언
- Pascal Peal Fortran
블록 : 일련의 문장 집합으로 자체적인 선언을 가질 수 있는 프로그램 단편.
- 임의의 블록 내의 선언 : 지역적
- 블록 밖의 선언 : 비지역적
영역 : 이름의 사용이 허락되고 있는 범위.
- 정적 영역
- 이름에 해당하는 변수를 찾을 때 자신을 포함하고 있는 블록에서 선언되었는지 살펴보고 아니면 그 바깥쪽 블록에서 선언되었는지를 살펴본다.
- 컴파일 언어 대부분이 사용함
- 임의의 블록에 속한 선언문에 x에 대한 선언문 찾기
- 없으면, 임의의 블록을 포함하는 바깥쪽 블록의 선언문에서 x에 대한 선언문 찾기
- x에 대한 선언문을 찾을 때까지 계속됨
- 가장 큰 블록의 선언문에서도 x를 발견하지 못하면 선언되지 않은 변수 오류 발생
- 동적 영역
- 이름에 해당하는 변수를 찾을 때 외향적인 구조에 기반하지 않고, 부프로그램들의 호출 순서에 기반
- 먼저 자신을 포함하고 있는 블록에서 선언되었는지를 보고
- 아니면 자신을 포함한 블록(부프로그램)을 호출한 문장을 포함하고 있는 블록에서 선언된 것인지를 조사한다.
- 해당 변수를 찾을 때까지 반복
ex)LISP
'프로그래밍 언어론' 카테고리의 다른 글
4장. 변수(~4.5) (0) | 2017.10.18 |
---|---|
1장 (0) | 2017.10.18 |