Chapter 4 변수 및 바인딩.

Slides:



Advertisements
Similar presentations
Copyright © 2006 The McGraw-Hill Companies, Inc. Programming Languages 프로그래밍 언어론 2nd edition Tucker and Noonan 1 장 소 개 A good programming language is a.
Advertisements

Copyright © 2015 Pearson Education, Inc. 6 장 : 프로그래밍 언어.
YES C 제 1 장 C 언어의 개요 1/34 제 1 장 C 언어의 개요 문봉근. YES C 제 1 장 C 언어의 개요 2/34 제 1 장 C 언어의 개요 1.1 프로그램과 C 언어의 특징 1.2 C 언어의 프로그램 구성 1.3 비주얼 C++ 통합 환경 들어가기.
Copyright © 2006 The McGraw-Hill Companies, Inc. 프로그래밍 언어론 2nd edition Tucker and Noonan 5 장 타입 “ 타입은 컴퓨터 프로그래밍의 효소이다 ; 프로그래밍은 타입을 통해 소화할만한 것이 된다.” 로빈.
Chapter 7 서브프로그램. Introduction 서브 프로그램의 명시 형식 인자전달 방법 ▫ Call by value ▫ Call by value result ▫ Call by reference ▫ Call by name 구현 방법 2.
제 4 장 변수, 영역, 수명 변수 바인딩 영역 기억장소 할당과 수명 변수와 그 환경 변수 초기화 상수와 변수.
8장 프로그래밍 언어 8.1 프로그램이란? 8.2 프로그램 언어의 역사 8.3 프로그램 설계 절차
C++ Espresso 제3장 배열과 포인터.
C++ Espresso 제1장 기초 사항.
제 1장 C 언어의 소개.
9장 부프로그램(2) 순천향대학교 컴퓨터공학부 하 상 호.
제 3장 프로그래밍 언어 설계 3.1 설계 기준의 역사적 변천 3.2 효율성 3.3 일반성, 직교성, 획일성
Chapter 3 – 프로그래밍 언어 설계 Outline 3.1 설계 기준의 역사적 변천 3.2 효율성
2014 ITA 8월 강의 C Programming -1주차- C언어 기초 정대진 ( )
제 7 장 문장 구조화 제어문 지정문 조건문 반복문 GOTO 문 비결정적문.
알고리즘(Algorithm)  알고리즘 개요 (효율, 분석, 차수) Part 1 강원대학교 컴퓨터과학전공 문양세.
윤 홍 란 제3장 클래스와 객체의 사용-1 윤 홍 란
제 6 장 데이터 타입 6.1 데이터 타입 및 타입 정보 6.2 타입의 용도 6.3 타입 구성자 6.4 사례 연구
Chapter 02 자바 기본구조 자바 프로그래밍의 기초적인 문법을 소개
제7장 제어구조 I – 식과 문장.
Power Java 제4장 자바 프로그래밍 기초.
바인딩, 메모리 관리 SANGJI University Kwangman Ko
쉽게 풀어쓴 C언어 Express 제3장 C프로그램 구성요소 C Express.
쉽게 풀어쓴 C언어 Express 제9장 함수와 변수 C Express.
프로그래밍언어론 2nd edition Tucker and Noonan
Part 08 함수 ©우균, 창병모 이 슬라이드는 부산대학교 우균이 작성하였습니다. 오류나 수정할 사항 있으면 연락 주세요.
객체지향 언어와 클래스, 객체 ㅎㅎ 개요 클래스의 선언, 객체의 생성 및 속성 참조 방식 멤버 변수 메소드 한빛미디어(주)
Chapter 6 – 변수, 바인딩, 식 및 제어문 Outline 6.1 변수 6.2 바인딩 6.3 선언 6.4 배정문
제 1장 프로그래밍 언어 소개 1.1 프로그래밍 언어란 무엇인가 1.2 프로그래밍 언어를 배워야 하는 이유
VHDL Package and Sub program
Chapter 9 – 부 프로그램 Outline 9.1 개요 9.2 매개변수 평가와 전달기법 9.3 형식 매개변수 명세
Ch2-2. VHDL Basic VHDL lexical element VHDL description
장. 문법 구조(Syntax) 컴퓨터공학과 권기태 프로그래밍언어론.
3장. 포인터, 배열, 구조체 포인터, 배열, 구조체 학습목표 기본적 데이터 타입
쉽게 풀어쓴 C언어 Express 제3장 C프로그램 구성요소 C Express.
Chapter 4 – 연 산 자 Outline 4.1 산술 연산자 4.2 관계 연산자 4.3 동등 연산자 4.4 논리 연산자
제 1장 시스템 소프트웨어의 개요.
임베디드 소프트웨어 설계.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
5장 이름, 바인딩, 영역(2) 순천향대학교 컴퓨터공학과 하상호.
adopted from KNK C Programming : A Modern Approach
제 10장 부 프로그램 10.1 개요 10.2 매개 변수 평가와 전달 기법 10.3 형식 매개 변수 명세
DataScience Lab. 박사과정 김희찬 (월)
제 6장 함수 Hello!! C 언어 강성호 김학배 최우영.
제 2장 어휘구조와 자료형 토 큰 리 터 럴 주 석 자 료 형 배 열 형.
Introduction to Programming Language
알고리즘(Algorithm)  알고리즘 개요 (효율, 분석, 차수) Part 년 봄학기
6장 데이터 타입(2) 순천향대학교 컴퓨터공학부 하 상 호.
함수와 변수 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
프로그래밍 원리 Chapter 04 자료 처리와 연산자 신한대학교 IT융합공학부 박 호 균.
6장 데이터 타입(3) 순천향대학교 컴퓨터공학부 하 상 호.
[INA470] Java Programming Youn-Hee Han
프로그래밍언어론 2nd edition Tucker and Noonan
제 5장 변수, 바인딩, 식 및 제어문 5.1 변수 5.6 표현식 5.2 바인딩 5.7 조건문 5.3 선언 5.8 반복문
제 3장 데이터형과 연산자 Hello!! C 언어 강성호 김학배 최우영.
Java 3장. 자바의 기본 구조 I : 변수, 자료형, 연산자 public class SumTest {
9장 부프로그램(2) 순천향대학교 컴퓨터공학부 하 상 호.
Signature, Strong Typing
Signature, Strong Typing
JVM의 구조와 메모리 모델 JVM의 내부 구조 클래스 파일 클래스 로더 메소드(method) 영역 힙(heap) 영역
Signature, Strong Typing
자료구조 세미나 발표 주제: 자료구조 기초 - 1회 차: 자료구조의 정의, 기초 지식 (함수, 포인터, 레퍼런스)
Chapter 3 – 프로그래밍 언어 설계 Outline 3.1 설계 기준의 역사적 변천 3.2 효율성
제5장 디버깅과 추적 문봉근.
C.
제 1장 프로그래밍 언어 소개 1.1 프로그래밍 언어란 무엇인가 1.2 프로그래밍 언어를 배워야 하는 이유
Scalar and composite data
C++ 언어의 특징
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 02. C언어 기반의 C++ 2.
Python 기본.
Presentation transcript:

Chapter 4 변수 및 바인딩

Introduction 변수 (variable)의 기본적 특성  속성 (attribute) 바인딩 (binding) 주소 (address) 값 (value) 유형 (type) 유효 범위 (scope) 존속 기간 (lifetime) 타입 검사, 초기화 바인딩 (binding) 변수에 각 특성의 값을 연결시키는 것

Identifier 프로그램의 구성 요소, 개체를 식별하기 위해 사용 하는 문자스트링 설계 고려사항 최대 길이 사용할 수 있는 문자 집합 대소문자 구분 여부

Variable (1) 기억장치의 한 장소 속성 데이터 값 저장 이름 주소: 기억장소 주소, l-value 영역: 변수가 사용될 수 있는 프로그램의 부분 수명: 기억 장소 할당 시간 값: r-value, 기억장소의 내용 형: 변수의 값의 범위, 가능한 연산 집합 결정

<D.W.Barron의 변수정의> Variable (2) Example var sum: integer; sum := 0; 이름: sum 유형: 정수 값: 0 주소(참조) <D.W.Barron의 변수정의> 속성 (attribute) 값 속성 결정 시간 이름 (name) sum 컴파일 시간 유형 (type) 정수형 주소 (address) ? Loading time 값 (value) 실행 시간

Variable (3) 기타 속성 정수의 내부 표현 방법 정수형 변수의 최대 값과 최소 값 정수형 변수에서 가능한 모든 연산 16 bit, 32 bit, … 음수 표현: 1의 보수, 2의 보수 정수형 변수의 최대 값과 최소 값 FORTRAN: -32,768 ~ 32,767 프로그래밍 언어 구현 시간에 결정 프로그래밍 언어 설계 시간에 결정: Java  기계독립적 정수형 변수에서 가능한 모든 연산 언어 정의 (설계) 시간에 결정

Declaration (1) 프로그램에서 사용할 데이터의 속성에 관한 정보를 컴파일러, 인터프리터에게 알려주는 문장 프로그램에서 사용할 데이터의 속성에 관한 정보를 컴파일러, 인터프리터에게 알려주는 문장 정보: 변수의 유형, 변수의 이름, 배열 크기, … 예: int a[10]; 배열의 이름: a 배열 a의 자료형: 정수 배열의 차원: 1차원 배열 요소의 수: 10 배열 첨자 범위: 0 ~ 9

Declaration (2) 역할 효율적인 기억장소 사용과 액세스를 가능하게 한다. 효율적인 주기억장치 관리 가능 자료 구조 크기 생성, 소멸 시기 정보 보다 효율적인 기억장소 할당 기법 사용 컴파일 시간에 변수의 형 검사 (static type checking)  오류 발견

Declaration (3) 묵시적 변수 선언 FORTRAN: I ~ N 사이의 문자로 시작하는 변수는 정수 BASIC: 정수 변수는 %로 끝나고 문자 변수는 $로 끝남 Perl: 변수명 앞의 $는 scalar 형, @는 배열

Binding (1) 프로그램 요소에 지정 가능한 속성값을 지정하는 것 바인딩 시간 바인딩이 발생하는 시간 종류 언어 설계 시간: 허용 연산, 혼합형 연산의 피연산자 형 결정, … 언어 구현 시간: 정수의 자릿수, 실수의 유효숫자 개수, 수 의 표기법, … 언어 번역 시간: 변수의 형, 자료 구조의 크기, … 실행 시간: 변수값 배정, 매개변수 바인딩, 기억 장소 할당, …

Binding (2) Example: min := min + 5; binding 되는 속성 binding time 변수 min의 유형 (type) 변수 min이 가질 수 있는 값의 범위 변수 min의 주소 값 변수 min의 값 연산자 +의 의미의 집합 연산자 +의 연산 종류 5의 내부적 표현 언어 설계 시간 컴파일 시간 언어 설계시간 or 구현시간 프로그램 적재 시간 언어 실행 시간 언어 구현 시간

Binding (3) 종류 동적 바인딩 (dynamic binding) 실행 시간 바인딩 프로그래밍의 편리성, 프로그램 실행의 융통성 인터프리터 언어: LISP, Perl, Prolog, …

Binding (4) 종류 정적 바인딩 (static binding) 컴파일 시간 바인딩: 프로그램 실행 전 변수의 명시적 선언 컴파일 시간에 대부분의 속성 결정  실행 시간의 오버 헤드를 줄임 효율적 코드 컴파일 언어: FORTRAN, Pascal, …

Binding (5) 융통성의 예 Perl 언어 $price = 1000; $price = $price + 100; $price = “Very expensive”;

Assignment statement (1) 배정문 변수의 내용을 변경하는 기본 연산 Perl: ($a, $b) = ($x, $y); l-value 배정 연산자 왼편 변수 주소 r-value 배정 연산자 오른편 변수 값

Assignment statement (2) 특성 모든 변수는 l-value, r-value를 가진다. 상수는 r-value만 가진다. 포인터 변수: int *ip l-value: ip 자신의 주소 r-value: 다른 변수의 주소 (l-value) 배열: A[i] l-value: A의 i번째 요소의 주소 r-value: 그 주소에 저장된 값

int a = 1, b = 2; a = b; Case 1 a: 1 a: 2 b: 2 b: 2 int *a = 1, *b = 2; a = b; Case 2 a: 1 a: b: 2 b: 2 int *a = 1, *b = 2; *a = *b; Case 3 a: 1 a: 2 b: 2 b: 2

Alias 이명(Alias) 이명 생성 둘 이상의 이름으로 하나의 변수를 참조할 때 하나의 변수 (기억 장소)를 두 개 이상의 이름으로 액 세스 이명 생성 C의 포인터 변수 FORTRAN의 EQUIVALENCE, COMMON 문 부 프로그램의 매개 변수 void main() { int *ip, i = 3; ip = &i; *ip = 10; printf(“%d”, i); }

Scope (1) 변수의 영역(Scope) 변수 이름이 동일한 의미를 갖는 프로그램의 일부분 변수가 참조될 수 있는 문장의 범위 가시적 (visible): 변수가 영역에서 참조될 수 있는 것

Scope (2) 예 1 Area A float a, b, c, d; void main() { int a, b; float c, d Area B int a char b, c float d float a, b, c, d; void main() { int a, b; a = b = 12; … { char b, c; } Area A Area B

Scope (3) 예 2 main: a, b, Large Large: a, b, x, y, Large, sub1 sub1: a, b, x, y, z, Large, sub1 program main; var a, b : integer; procedure Large; var x, y : integer; procedure sub1; var z : integer; begin { sub1 } end; { Large } { main } end. main Large sub1

Scope (4) 정적 영역 규칙 (static scope rule) 변수의 영역 결정: 프로그램 블록의 포함 관계 블록 내의 모든 비지역 변수는 자신을 둘러싼 가장 가 까운 블록에서 선언된 변수를 참조 컴파일 시간에 정적 영역 결정 C, C++, Pascal, …

Scope (5) 동적 영역 규칙 (dynamic scope rule) 함수 호출 순서 실행 시간에 동적 영역 결정 실행중인 블록 안에 있는 비지역 변수를 참조할 때 자 신을 호출한 함수의 정의를 사용 APL, SNOBOL4, …

Scope (6) 예 정적 영역 규칙 동적 영역 규칙 print(x): 2 print(x): 4 program scope_rule; var x: integer; procedure sub1; begin print(x) end; procedure sub2; x := 4; sub1 x := 2; sub2 end. scope_rule sub1 sub2 2424

Scope (7) 변수의 영역과 변수의 수명 (lifetime) 수명 (= 존속 기간) 예 1 변수의 메모리 할당 시간 ~ 메모리 반환 시간 블록 구조 언어: 영역 = 수명 C, C++의 static 영역: 정적, 함수에 지역적 수명: 함수가 속한 프로그램의 전체 실행시간까지 연장됨 예 1 temp의 영역과 수명: if { } if (a[j] > a[k]) { int temp; temp = a[j]; a[j] = a[k]; a[k] = temp; } 2525

Scope (8) 예2 void sub() { static int j = 1; int k = 1; printf(“j = %d k = %d\n”, j, k); j++; k++; } void main() { sub(); j = 1 k = 1 j = 2 k = 1 j = 3 k = 1 2626

변수의 초기화 초기화 변수 선언 시 값을 배정하는 것 기억장소 바인딩 시간 = 값 바인딩 시간 Pascal, Modula-2에서는 변수 초기화를 하지 못함

참조 환경 문장의 참조 환경 (referencing environment) 그 문장에서 가시적인 모든 이름들 (데이터, 변수, 함수) 의 집합 정적 영역 언어 지역 영역에 선언된 변수 + 조상 영역에서 가시적인 모 든 변수 동적 영역 언어 지역적으로 선언된 변수 + 현재 활성인 모든 다른 부 프 로그램에 선언된 변수

sub1 sub2 sub3 program example; var a, b : integer; … procedure sub1; var x, y : integer; begin { sub1 } end; { sub1 } procedure sub2; var x : integer; procedure sub3; begin { sub3 } end; { sub3} begin { sub2 } end; { sub2 } begin { example } end. { example } example sub1 sub2 sub3 1 1: sub1의 x, y, example의 a, b 2: sub3의 x, example의 a, b 3: sub2의 x, example의 a, b 4: example의 a, b 2 3 4

void sub1() { int a, b; … } void sub2() { int b, c; sub1(); void main() { int c, d; sub2(); 1 2 3 1: sub1의 a, b, sub2의 c, main의 d 2: sub2의 b, c, main의 d 3: main의 c, d

기억장소 바인딩과 변수의 종류 (1) 정적 변수 (static variable) 프로그램 실행 전에 메모리 셀에 바인딩 프로그램 종료까지 동일한 메모리 셀에 바인딩 전역 변수 효율성 기억 장소 할당, 회수: 실행 시간 부담이 되지 않음 단점 유연성 감소 정적 변수만을 갖는 언어: recursion이 지원되지 않음 기억장소가 변수들 간에 공유될 수 없다. C, C++, Java: static

기억장소 바인딩과 변수의 종류 (2) 스택-동적 변수 (stack-dynamic variable) 선언문이 세련화될 때 기억장소 바인딩 타입은 정적으로 바인딩 세련화 (elaboration) 선언문이 지시한 기억장소 할당과 바인딩 과정 실행이 선언문에 연관되어 있는 코드에 이르렀을 때 발생 실행시간 스택에서 할당됨 재귀적 프로그램 부프로그램의 각 활성 복사본이 자신의 지역 변수를 가질 수 있도록 동적 지역 기억장소의 형태를 요구

기억장소 바인딩과 변수의 종류 (3) 기억장소 할당과 회수에 따른 실행시간 부담 C, C++ 지역 변수는 디폴트로 스택-동적

기억장소 바인딩과 변수의 종류 (4) 명시적 힢-동적 변수 (explicit heap-dynamic variable) 프로그래머가 명시하는 명시적 실행시간 명령어에 의 해 할당되고 회수되는 이름이 없는 (추상) 메모리 셀 힢에서 할당되고 힢에 반환됨 포인터, 참조 변수에 의해서만 참조됨 C: malloc(), free() function C++: new, delete operator