9장 부프로그램(2) 2016. 5. 30 순천향대학교 컴퓨터공학부 하 상 호.

Slides:



Advertisements
Similar presentations
Copyright © 2015 Pearson Education, Inc. 6 장 : 프로그래밍 언어.
Advertisements

03 변수와 자료형 세종대학교 최옥경 교수 참고 : 한빛미디어 뇌를 자극하는 C, INFINITY Perfect C.
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 장 변수, 영역, 수명 변수 바인딩 영역 기억장소 할당과 수명 변수와 그 환경 변수 초기화 상수와 변수.
Vision System Lab, Sang-Hun Han
데이터의 표현과 연산 (1) (Chapter 3)
슬라이드 1~21까지는 각자 복습! 슬라이드 22부터는 수업시간에 복습
Power C++ 제6장 포인터와 문자열.
C++ Espresso 제3장 배열과 포인터.
C++ Espresso 제3장 배열과 포인터.
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
C++ Espresso 제2장 제어문과 함수.
9장 부프로그램(2) 순천향대학교 컴퓨터공학부 하 상 호.
제 3장 프로그래밍 언어 설계 3.1 설계 기준의 역사적 변천 3.2 효율성 3.3 일반성, 직교성, 획일성
Chapter 3 – 프로그래밍 언어 설계 Outline 3.1 설계 기준의 역사적 변천 3.2 효율성
C 개론 정리.
알고리즘(Algorithm)  알고리즘 개요 (효율, 분석, 차수) Part 1 강원대학교 컴퓨터과학전공 문양세.
제7장 제어구조 I – 식과 문장.
제3장 추가 실습 3장 관련 C 언어 프로그래밍 실습.
C 10장. 함수의 활용 #include <stdio.h> int main(void) { int num;
쉽게 풀어쓴 C언어 Express 제18장 입출력과 라이브러리 함수 C Express.
컴퓨터의 기초 제 4강 - 표준 입출력, 함수의 기초 2006년 4월 10일.
처음으로 배우는 C 프로그래밍 제2부 기초 제5장 반복문.
6장. printf와 scanf 함수에 대한 고찰
JAVA 프로그래밍 6장 객체지향프로그래밍의 핵심.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 14. 포인터와 함수에 대한 이해.
Choi, Namseok Java 기초 (Java의 제어문과 배열) Choi, Namseok
8장 포인터.
3장. 포인터, 배열, 구조체 포인터, 배열, 구조체 학습목표 기본적 데이터 타입
2장 자바환경과 자바 프로그램 2.1 자바 개발 환경 2.2 자바 통합환경 2.3 자바 응용 프로그램과 애플릿 프로그램
쉽게 풀어쓴 C언어 Express 제3장 C프로그램 구성요소 C Express.
14장. 함수 1 01_ 함수의 기본 02_ 인자의 전달.
프로그래밍 서울대학교 통계학과 2009년 2학기 컴퓨터의 개념 및 실습 (
10장 포인터와 문자열 포인터 기본 배열과 포인터 매개변수 전달방법 포인터와 문자열.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express.
쉽게 풀어쓴 C언어 Express 제10장 배열 C Express.
프로그래밍2 및 실습 C언어 기반의 C++ 2.
C 4장. 연산자 #include <stdio.h> int main(void) { int num;
5장 이름, 바인딩, 영역(2) 순천향대학교 컴퓨터공학과 하상호.
제 10장 부 프로그램 10.1 개요 10.2 매개 변수 평가와 전달 기법 10.3 형식 매개 변수 명세
Chapter 10 함수 기본.
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
제 6장 함수 Hello!! C 언어 강성호 김학배 최우영.
자전거를 배우려면 안장에 올라가 페달을 밟아라.
컴퓨터 프로그래밍 기초 - 4th : 수식과 연산자 -
알고리즘(Algorithm)  알고리즘 개요 (효율, 분석, 차수) Part 년 봄학기
6장 데이터 타입(2) 순천향대학교 컴퓨터공학부 하 상 호.
함수와 변수 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
Chapter 11. 배열과 포인터.
Chapter 4 변수 및 바인딩.
제 3장 데이터형과 연산자 Hello!! C 언어 강성호 김학배 최우영.
Java 3장. 자바의 기본 구조 I : 변수, 자료형, 연산자 public class SumTest {
6장 반복제어문 for 문 while 문 do while 문 기타 제어문.
Part 06 세상을 변화시키는 연산자 안산1대학 디지털정보통신과 임 성 국.
C-언어와 기반구조 정보보호학과 이정수 교수.
03. 메모리 관리 C++ 프로그램에서 다룰 수 있는 메모리의 종류
Chapter 3 – 프로그래밍 언어 설계 Outline 3.1 설계 기준의 역사적 변천 3.2 효율성
C언어 프로그래밍의 이해 Ch03. 기본 자료형, 변수와 상수.
반복문의 기능 반복문 반복문 특정 영역을 특정 조건이 만족하는 동안에 반복 실행하기 위한 문장 while문
어서와 C언어는 처음이지 제16장.
C 4장. 연산자 #include <stdio.h> int main(void) { int num;
C.
제 1장 프로그래밍 언어 소개 1.1 프로그래밍 언어란 무엇인가 1.2 프로그래밍 언어를 배워야 하는 이유
배열, 포인터, 함수 Review & 과제 1, 2.
3b장 구조체와 열거형 구조체의 정의 구조체 변수의 선언 구조체 초기화 및 사용 구조체 재정의 포인터를 이용해서 구조체 사용
9장 부프로그램 순천향대학교 컴퓨터공학부 하 상 호.
Presentation transcript:

9장 부프로그램(2) 2016. 5. 30 순천향대학교 컴퓨터공학부 하 상 호

부프로그램 설계시 고려사항 지역변수는 정적 또는 동적으로 할당되는가? 부프로그램이 중첩되어 정의 가능한가? 어떤 매개변수 전달방법이 사용되는가? 매개변수 타입 검사가 이루어지는가? 부프로그램이 매개변수로 전달되고 부프로그램이 중첩된다면, 전달된 부프로그램의 참조환경은 무엇인가? 부프로그램은 중복될 수 있는가? 부프로그램이 포괄형이 될 수 있는가? 언어가 중첩 부프로그램을 허용한다면, 클로저는 지원되는가? 클로저(closure)는 중첩 부프로그램과 그 참조 환경이다.

매개변수 전달의 의미적 모델 모델 설명 입력 모드(in mode) 형식 매개변수는 실 매개변수로부터 데이터 전달받음 출력 모드(out mode) 형식 매개변수는 실 매개변수에 데이터를 전달함 입출력 모드(inout mode) 형식 매개변수는 실 매개변수로부터 데이터를 전달받고, 데이터를 실 매개변수에 전달함 예제: fun(list1, list2) // list1, list2의 배열을 더하여 그 결과를 list2로 반환 입력 모드 입출력 모드

매개변수 전달의 데이터 이동 방법

매개변수 전달의 구현 모델

값-전달 값-전달(pass-by-value)은 매개변수가 값으로 전달되는 입력 모드의 구현 형식 매개변수는 대응 실 매개변수의 값으로 초기화 형식 매개변수는 지역변수로 사용 데이터 이동 물리적 값 이동(값 복사) => 일반적 접근 패스 전달 쓰기-보호 셀(읽기만 가능한 셀) 필요 Ex. C++ int fun(int a, const int &b) { … }

값 전달 장점: 단점 스칼라 변수의 경우 연결 비용과 접근 시간이 빠르다 부프로그램의 외부 데이터 접근 제한 값 복사가 사용될 경우에, 형식 매개변수에 대한 기억공간 할당, 값 복사에 따른 비용 부담. 특히, 배열과 같은 집합체의 경우 접근 패스 전달 경우, 형식 매개변수에 대한 쓰기-보호가 요구되고, 간접 주소지정에 따른 접근 비용 부담

결과-전달 결과-전달(pass-by-result)은 출력 모드의 구현 실 매개변수는 형식 매개변수에 값을 전달하지 않으며, 형식 매개변수는 지역 변수로 사용되고, 피호출자 종료 전에 형식 매개변수의 값을 대응 실 매개변수로 전달 데이터 이동은 보통 값 복사로 구현 Ex. C# 실 매개변수가 동일하면? … // a, b의 값은 호출전에 할당될 필요없음 f.Fixer(out a, out b); void Fixer(out int x, out int y) // x, y의 값은 반드시 할당되어야 함 { … x = 17; y = 35; }

결과-전달 실 매개변수의 주소가 언제 평가되는가? 부프로그램 호출시 또는 복귀시? In C# void DoIt(out int x, int index) { x = 17; index = 42; } … sub = 21; f.DoIt(list[sub], sub) sub가 DoIt()에서 변경되면?

값-결과-전달 값-결과-전달(pass-by-value-result)은 값이 복사되는 입출력 모드의 구현 예제 값-전달과 결과-전달의 혼합 복사-전달(pass-by-copy)이라고 함 예제 int main() { … x = 10; y = 20; sub(x, y); } void sub(int a, int b) { … a = 20; b = 30; }

참조 전달 참조-전달(pass-by-reference)은 입출력 모드의 구현 접근 패스(주로 주소)를 전달 공유-전달(pass-by-sharing)이라고 함 Ex. C# int main() { … x = 10; y = 20; sub(ref x, ref y); } void sub(ref int a, ref int b) { … a = 20; b = 30; }

참조 전달 평가 전달과정 자체가 시간과 기억장소 관점에서 효율적 형식 매개변수 접근은 효율적인가? 한 방향 전달만 요구될 경우에는? 별칭 생성 가능한가?

참조 전달 별칭 생성: 실 매개변수간의 충돌 void fun(int &first, int &second) … fun(total, total) void fun(int &first, int &second) { … }

참조 전달 별칭 생성: 배열 원소간의 충돌 void fun(int &first, int &second) … fun(list[i], list[j]) // if i=j? void fun(int &first, int &second) { … }

참조 전달 별칭 생성: 형식 매개변수와 가시적 비지역변수간의 충돌 int *global; void main() { … sub(global); } void sub(int *param) { … }

이름 전달 실 매개변수는 부프로그램에 나타나는 모든 대응 형식 매개변수를 문자 그대로 대치 평가 형식 매개변수에 대한 실 매개변수의 값이나 주소에 대한 바인딩은 그 형식 매개변수가 참조될 때까지 연기 형식 매개변수는 호출자 참조 환경에서 평가 => 클로저(부프로그램/참조 환경) 필요 단일의 매개변수 전달 구현 모델에 일치하지 않음 상수 식 => 값-전달 스칼라 변수 => 참조-전달 배열 원소인 경우? 평가 구현하기 어렵고 비능률적 판독성/신뢰성 저하 지연 바인딩 / 지연 평가 => 반드시 필요한 매개변수만 평가

이름 전달 예제 void sub(int x, int y, int z) { … int p; a = 2; sub(a, a+1, 10); void sub(int x, int y, int z) { int p; p = y; // p의 값은? x = z; }

Test 다음 각 매개변수 방법에 대한 프로그램 실행 결과는 무엇인가? 값-전달 참조-전달 값-결과-전달 이름-전달 int i; int a[2]; void p(int x, int y) { x++; i++; y++;} main() { a[0] = 1; a[1]= 1; i = 0; p(a[i], a[i]); printf(“%d %d\n”, a[0], a[1]); return 0; }

매개변수 전달방법 구현 대부분의 언어에서, 매개변수 전달은 실행-시간 스택을 통해서 일어난다. sub(int a, int b, int c, int d) 값, 결과, 값-결과, 참조 sub(w, x, y, z)

주요 언어의 매개변수 전달 방법 언어 매개변수 전달 방법 C 값-전달 참조-전달은? C++ C와 유사 참조-전달을 위해서 참조 타입 제공 Java 객체 매개변수는? C# 디폴트는 값-전달 참조-전달시, 실, 형식 매개변수 앞에 ref 명세 결과-전달시, 실, 형식 매개변수 앞에 out 명세 Ada 3가지 의미적 모델 지원: in(디폴트 모드), out, in out in 매개변수 out 매개변수 in out 매개변수 Fortran 입출력 모드의 의미적 모드만 명세 77 버전 이전: 참조-호출 77 버전 이후: 스칼라 변수에 대해서는 값-결과-전달

주요 언어의 매개변수 전달 방법 // in C++ void fun(const int &p1, int p2, int &p3) {…} // in Ada procedure Adder(A: in out Integer; // 스칼라는 복사로 전달 B: in Integer; // 집합체는 참조로 전달 C: out Float) // in Fortran 95+ Subroutine Adder (A, B, C) Integer, Intent(Inout) :: A Integer, Intent(In) :: B Integer, Intent(Out) :: C // in C# void sumer (ref int oldSum, int newOne, out res) … sumer(ref sum, newValue, out res); // sum은 반드시 초기화 필요

매개변수의 타입 검사 실 매개변수의 타입과 대응 형식 매개변수의 타입과의 일치(consistency) 여부 검사 신뢰성을 위해서 매우 중요

매개변수의 타입 검사 주요 언어의 매개변수 타입 검사 Fortran 77, 원본 C: 요구되지 않음 Pascal, Fortran 90, Java, Ada: 항상 요구됨 C89: 사용자에 의한 선택 C99, C++ 항상 프로토타입 형식으로 표현해야 함 매개변수 리스트의 마지막 부분이 생략 기호이면? 비 프로토타입 형식 프로토타입 형식 int printf(const char* format_string, ...); printf("The sum is %d\n", 3.4); printf(“The string is %s\n”, 10); printf(Two integers are %d, %d\n”, 10);

매개변수의 타입 검사 실 매개변수 float 값을 double 형식 매개변수에 전달하는 함수 호출을 생각해보자. 매개변수가 값-호출로 전달될 경우? 매개변수가 참조-호출로 전달될 경우? // in C# ref의 실 매개변수는 대응 형식 매개변수의 타입과 정확히 일치해야 할 것을 요구한다(타입 강제변환이 허용되지 않음)

매개변수 전달 고려사항 2가지 중요한 고려사항 효율성 데이터 이동에서 단방향과 양방향의 선택 (기준: 데이터의 부프로그램 접근 최소화)