Y. Daniel Liang 길준민 · 정재화.

Slides:



Advertisements
Similar presentations
파이썬 (Python). 1 일 : 파이썬 프로그래밍 기초 2 일 : 객체, 문자열 3 일 : 문자인코딩, 정규표현식, 옛한글 4 일 : 파일 입출력 5 일 : 함수와 모듈 6 일 : 원시 말뭉치 다루기 실습 7 일 : 주석 말뭉치 다루기 실습 8 일 : 웹 데이터로.
Advertisements

Python Ch.06 RaspberryPi Sejin Oh. Raspberry Pi Python  IDLE(Integrated Development Environment)  라즈베리 파이 배포본들은 일반적으로 파이썬과 파이썬 3 의 IDLE 파 이썬 개발 도구를.
4장 배열과 함수 한빛미디어(주).
재료수치해석 HW # 박재혁.
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
컴퓨터프로그래밍 1주차실습자료 Visual Studio 2005 사용법 익히기.
Report #5 - due: 4/13 다음 10*5의 희소 행렬 A, B를 고려하라.
최윤정 Java 프로그래밍 클래스 상속 최윤정
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
Chapter 7. 조건문.
Report #2 - Solution 문제 #1: 다음과 같이 프로그램을 작성하라.
컴퓨터 프로그래밍 기초 [Final] 기말고사
7장 배열 ②.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
10장 함수.
07 그룹 함수 그룹 함수의 개념 그룹 함수의 종류 데이터 그룹 생성 HAVING 절.
Visual Basic 함수.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
8장 함수 함수의 필요성 라이브러리 함수와 사용자 정의 함수 함수의 정의, 원형, 호출 배열을 함수 인자로 전달 재귀호출.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
Error Detection and Correction
23장. 구조체와 사용자 정의 자료형 2.
Tail-recursive Function, High-order Function
11장. 1차원 배열.
C#.
13. 연산자 오버로딩.
C 프로그래밍 C언어 (CSE2035) (Chap11. Derived types-enumerated, structure, and union) (1-1) Sungwook Kim Sogang University Seoul, Korea Tel:
Method & library.
JA A V W. 03.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
프로그래밍 개요
어서와 C언어는 처음이지 제14장.
27장. 모듈화 프로그래밍.
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
Term Projects 다음에 주어진 2개중에서 한 개를 선택하여 문제를 해결하시오. 기한: 중간 보고서: 5/30 (5)
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
자바 5.0 프로그래밍.
김선균 컴퓨터 프로그래밍 기초 - 7th : 함수 - 김선균
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
5장 선택제어문 if 선택문 switch-case 선택문 다양한 프로그램 작성 조건 연산자.
Chapter 08. 함수.
컴퓨터 프로그래밍 기초 [01] Visual Studio 설치 및 사용방법
Fucntion 요약.
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
객체기반 SW설계 팀활동지 4.
함수(Function) ◈ 함수의 개념 및 사용 이유 ◈ 함수 정의, 호출 및 선언 ◈ 지역변수와 전역변수 ◈ return 문
제 6 장 함수(functions).
디버깅 관련 옵션 실습해보기 발표 : 2008년 5월 19일 2분반 정 훈 승
제 15 강 문자와 코드 shcho.pe.kr.
4장. 데이터 표현 방식의 이해. 4장. 데이터 표현 방식의 이해 4-1 컴퓨터의 데이터 표현 진법에 대한 이해 n 진수 표현 방식 : n개의 문자를 이용해서 데이터를 표현 그림 4-1.
클래스 : 기능 CHAPTER 7 Section 1 생성자(Constructor)
Homework #12 (1/2) 프로그램을 작성하고, 프로그램과 실행 결과를 프린트하여 제출한다.
05. General Linear List – Homework
Flow Diagram IV While.
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
Chapter 10 데이터 검색1.
함수, 모듈.
실습과제 (변수와 자료형, ) 1. 다음 작업 (가), (나), (다)를 수행하는 프로그램 작성
동적메모리와 연결 리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
프로그래밍 개론 Ⅰ-실습 2장 데이터와 식①.
1장 C 언어의 개요 C 언어의 역사와 기원 C 언어의 특징 프로그램 과정 C 프로그램 구조 C 프로그램 예제.
어서와 C언어는 처음이지 제21장.
수업 내용 수업 목표 강의 내용 강의 계획서 교과서 및 참고도서 평가 방법 수강생의 학습 방법 제안 강의자료 사이트
OOP Practices OOP presentation 6 작성자 Kimjinsik 소속 Mobile computing Lab
7 생성자 함수.
6 객체.
Presentation transcript:

Y. Daniel Liang 길준민 · 정재화

Chapter 6 함수

CONTENTS Ch6 함수 6.1 들어가기 6.2 함수 정의하기 6.3 함수 호출하기 6.4 반환값이 있는(없는) 함수 6.1 들어가기 6.2 함수 정의하기 6.3 함수 호출하기 6.4 반환값이 있는(없는) 함수 6.5 위치 인자와 키워드 인자 6.6 참조값에 의한 인자 전달 6.7 코드 모듈화하기 6.8 사례연구: 10진수->16진수 변환 6.9 변수의 스코프 6.10 기본 인자 6.11 다중값 반환하기 6.12 사례 연구: 랜덤 ASCII 문자 생성 6.13 함수 추상화와 단계적 개선 6.14 사례 연구: 재사용 가능한 그래픽 함수 1부터 10까지의 정수 합, 20부터 37까지의 정수 합, 그리고 35부터 49까지의 정수 합을 구한다고 가정해 보자. 반복되는 명령문 부분을 어떻게 해결할 수 있을까? 학습하기에 앞서 sum = 0 for i in range(1, 10): sum += i print(“1에서 10까지의 합은", sum,"입니다.") for i in range(20, 37): print(“20에서 37까지의 합은", sum,"입니다.") for i in range(35, 49): print(“35에서 49까지의 합은", sum,"입니다.")

학습목표 형식 매개변수를 가진 함수를 정의할 수 있다(6.2 절). 실매개변수(즉, 인자)를 가진 함수를 호출할 수 있다(6.3절). 값을 반환하는 함수와 값을 반환하지 않는 함수를 구별할 수 있다(6.4절). 위치 인자 혹은 키워드 인자를 사용하여 함수를 호출할 수 있다(6.5절). 참조값을 인자로 전달할 수 있다(6.6절). 읽기, 디버깅, 관리에 편리한 재사용 코드를 개발할 수 있다(6.7절). 함수를 재사용하기 위한 모듈을 만들 수 있다(6.7-6.9절). 변수의 스코프를 결정할 수 있다(6.9절). 기본 인자를 가진 함수를 정의할 수 있다(6.10절). 다중값을 반환하는 함수를 정의할 수 있다(6.11절). 소프트웨어 개발에서 함수 추상화의 개념을 적용할 수 있다 (6.12절). 단계적 개선을 사용한 함수의 설계 및 구현할 수 있다 (6.13절). 재사용 함수를 이용하여 그래픽 프로그램을 만들 수 있다 (6.14절).

해결 방법 def sum(i1, i2): result = 0 for i in range(i1, i2): result += i return result def main(): print(“1부터 10까지의 합은", sum(1, 10)) print(“20부터 37까지의 합은", sum(20, 37)) print(“35부터 49까지의 합은", sum(35, 49)) main() # main 함수를 호출한다.

함수 정의하기 함수(function)는 동작을 수행하기 위한 명령문들의 모음이다. 함수 정의 함수 호출 함수 이름 형식매개변수 def max(num1, num2): if num1 > num2: result = num1 else: result = num2 return result z = max(x, y) 함수 헤더 실매개변수 (인자) 함수 몸체 반환 값

함수 헤더 함수는 헤더와 몸체를 가지고 있다. 헤더(header)는 def 키워드로 시작하 며 그 다음에 함수의 이름과 매개변수가 나오며, 콜론(:)으로 끝난다. 함수 정의 함수 호출 함수 이름 형식매개변수 def max(num1, num2): if num1 > num2: result = num1 else: result = num2 return result z = max(x, y) 함수 헤더 실매개변수 (인자) 함수 몸체 반환 값

형식 매개변수 함수 헤더 내의 변수들을 형식 매개변수(formal parameter) 또는 간략히 매 개변수라 한다. 함수 정의 함수 호출 함수 이름 형식매개변수 def max(num1, num2): if num1 > num2: result = num1 else: result = num2 return result z = max(x, y) 함수 헤더 실매개변수 (인자) 함수 몸체 반환 값

실매개변수 함수가 호출될 때 값이 매개변수로 전달되는데, 이 값을 실매개변수 actual parameter) 또는 인자(argument)라 한다. 함수 정의 함수 호출 함수 이름 형식매개변수 def max(num1, num2): if num1 > num2: result = num1 else: result = num2 return result z = max(x, y) 함수 헤더 실매개변수 (인자) 함수 몸체 반환 값

결과값 return 키워드를 사용하는 반환 명령문은 값-반환 함수에 필수적이다 함수 정의 함수 호출 함수 이름 형식매개변수 def max(num1, num2): if num1 > num2: result = num1 else: result = num2 return result z = max(x, y) 함수 헤더 실매개변수 (인자) 함수 몸체 반환 값

함수 호출하기 max 함수 max라는 이름의 함수는 두 개의 매개변수로 num1과 num2를 가지고 있으 며, 이들 중에 큰 값을 반환한다. TestMax 실행

함수 호출 트레이스 int 5 값을 전달 int 2 값을 전달 def max(num1, num2): def main(): if num1 > num2: result = num1 else: result = num2 return result main( ) def main(): i = 5 j = 2 k = max(i, j) print(i, "와/과", j, "중 큰 수는", k, "입니다.")

함수 호출 트레이스 int 5 값을 전달 int 2 값을 전달 메인함수 호출 def main(): def max(num1, num2): if num1 > num2: result = num1 else: result = num2 return result main( ) def main(): i = 5 j = 2 k = max(i, j) print(i, "와/과", j, "중 큰 수는", k, "입니다.")

함수 호출 트레이스 i에 5 저장 int 5 값을 전달 int 2 값을 전달 main( ) def main(): i = 5 j = 2 k = max(i, j) print(i, "와/과", j, "중 큰 수는", k, "입니다.") def max(num1, num2): if num1 > num2: result = num1 else: result = num2 return result

함수 호출 트레이스 j에 2 저장 int 5 값을 전달 int 2 값을 전달 main( ) def main(): i = 5 k = max(i, j) print(i, "와/과", j, "중 큰 수는", k, "입니다.") def max(num1, num2): if num1 > num2: result = num1 else: result = num2 return result

함수 호출 트레이스 max(i, j)를 호출 int 5 값을 전달 int 2 값을 전달 main( ) def main(): k = max(i, j) print(i, "와/과", j, "중 큰 수는", k, "입니다.") def max(num1, num2): if num1 > num2: result = num1 else: result = num2 return result

함수 호출 트레이스 max(i, j)가 호출 됨 i의 값을 num1에 넘겨줌 j의 값을 num2에 넘겨줌 int 5 값을 전달 main( ) def main(): i = 5 j = 2 k = max(i, j) print(i, "와/과", j, "중 큰 수는", k, "입니다.") def max(num1, num2): if num1 > num2: result = num1 else: result = num2 return result

함수 호출 트레이스 num1=5, num2=2 따라서 (num1 > num2)는 참 int 5 값을 전달 main( ) def main(): i = 5 j = 2 k = max(i, j) print(i, "와/과", j, "중 큰 수는", k, "입니다.") def max(num1, num2): if num1 > num2: result = num1 else: result = num2 return result

함수 호출 트레이스 result에 num1의 값, 5 저장 int 5 값을 전달 int 2 값을 전달 main( ) def main(): i = 5 j = 2 k = max(i, j) print(i, "와/과", j, "중 큰 수는", k, "입니다.") def max(num1, num2): if num1 > num2: result = num1 else: result = num2 return result

함수 호출 트레이스 int 5 값을 전달 int 2 값을 전달 main( ) def main(): i = 5 j = 2 k = max(i, j) print(i, "와/과", j, "중 큰 수는", k, "입니다.") def max(num1, num2): if num1 > num2: result = num1 else: result = num2 return result result의 값 5를 반환

함수 호출 트레이스 int 5 값을 전달 int 2 값을 전달 main( ) def main(): i = 5 j = 2 k = max(i, j) print(i, "와/과", j, "중 큰 수는", k, "입니다.") def max(num1, num2): if num1 > num2: result = num1 else: result = num2 return result max(i, j)의 값 5를 반환하고 반환값을 k에 할당

함수 호출 트레이스 int 5 값을 전달 int 2 값을 전달 main( ) def main(): i = 5 j = 2 k = max(i, j) print(i, "와/과", j, "중 큰 수는", k, "입니다.") def max(num1, num2): if num1 > num2: result = num1 else: result = num2 return result print문을 실행

함수 호출 트레이스 int 5 값을 전달 int 2 값을 전달 main( ) def main(): i = 5 j = 2 k = max(i, j) print(i, "와/과", j, "중 큰 수는", k, "입니다.") def max(num1, num2): if num1 > num2: result = num1 else: result = num2 return result 호출자에게 반환

호출 스택 스택 스택 스택 max 함수를 위한 필요 공간 max 함수를 위한 필요 공간 main 함수를 위한 필요 공간 result: num2: num1: num2: num1: int 객체 2 int 객체 2 main 함수를 위한 필요 공간 main 함수를 위한 필요 공간 j: 2 i: 5 int 객체 5 j: i: int 객체 5 main 함수 호출 객체 저장을 위한 힙 max 함수 호출 객체 저장을 위한 힙 max 함수 실행과정

호출 스택 스택 스택 main 함수를 위한 필요 공간 max 함수 호출 객체 저장을 위한 힙 max 함수 실행과정 k: j: int 객체 2 main 함수를 위한 필요 공간 k: j: i: 빈 스택 int 객체 5 max 함수 호출 객체 저장을 위한 힙 max 함수 실행과정

반환값이 있는 함수 혹은 반환값이 없는 함수 반환값이 없는 유형의 함수는 값을 반환하지 않는다. 이러한 유형의 함수는 특정 행동을 수행한다. PrintGradeFunction ReturnGradeFunction 실행 실행

None 값 값을 반환하지 않는 함수를 프로그래밍 용어로 void 함수라고 한다. 파이썬은 모든 함수는 return을 사용하든지 사용하지 않든 간에 값을 반 환한다. 함수가 값을 반환하지 않으면, 특별한 값인 None을 기본적으로 반환한 다. def sum(number1, number2): total = number1 + number2 print(sum(1, 2))

위치에 따른 인자 전달 다음과 같은 구문으로 함수를 호출할 경우 출력값은 무엇일까? def nPrintln(message, n): for i in range(0, n): print(message) 다음과 같은 구문으로 함수를 호출할 경우 출력값은 무엇일까? nPrintln("파이썬에 오신것은 환영합니다", 5) nPrintln("파이썬에 오신것은 환영합니다", 15) 다음 구문은 무엇이 잘못되었는가? nPrintln(4, "파이썬에 오신것은 환영합니다")

nPrintln(n = 4, message = "컴퓨터과학과") 키워드 인자 def nPrintln(message, n): for i in range(0, n): print(message) 다음 구문은 가능할까? nPrintln(n = 4, message = "컴퓨터과학과")

값에 의한 전달 파이썬에서 모든 데이터는 객체이기 때문에, 객체에 대한 변수는 실 제로 그 객체에 대한 참조(reference)이다. 인자를 갖는 함수가 호출될 때, 각 인자의 참조값이 매개변수로 전달된다. 이를 프로그래밍 용어로 값에 의한 전달(pass-by-value)이라 한다. 간단히 말해서, 함수가 호출될 때 인자의 값이 매개변수로 전달된다 고 말할 수 있다. 이 값은 실제로는 객체의 참조값이다. 인자가 숫자나 문자열이면, 함수 내부에서 매개변수의 값이 수정되 더라도 인자에는 아무런 영향을 주지 않는다. Increment 실행

코드 모듈화 하기 함수는 코드 중복을 줄여주고 코드 재사용을 위한 목적으로 사용된 다. 또한 함수는 코드를 모듈화하고 프로그램의 품질을 향상시키기 위해 사용된다. GCDFunction TestGCDFunction PrimeNumberFunction 실행 실행

Decimal2HexConversion 사례 연구: 10진수를 16진수로 변환하기 10진수를 16진수로 변환하는 함수 작성하기 Decimal2HexConversion 실행

변수의 스코프 스코프: 변수가 참조될 수 있는 프로그램의 영역 함수 내부에서 생성된 변수를 지역변수(local variable)라 한다. 지역변수는 함수 내부에서만 접근될 수 있다. 지역변수의 스코프는 지역변수가 생성된 지점부터 그 변수를 포함하고 있는 함수의 끝까지이다. 파이썬에서 전역변수(global variable)를 사용할 수 있다. 전역변수는 모든 함수의 외부에 생성되며 모든 함수에서 접근 가능하다.

예제 1 globalVar = 1 def f1(): localVar = 2 print(globalVar) print(localVar) f1() print(localVar) # 스코프 밖이므로 오류가 발생한다.

예제 2 x = 1 def f1(): x = 2 print(x) # 2가 출력된다. f1()

예제 3 x = eval(input(숫자를 입력하세요: ")) if (x > 0): y = 4 print(y) # y가 생성되지 않으면, 오류가 발생한다.

예제 4 sum = 0 for i in range(0, 5): sum += i print(i)

예제 5 x = 1 def increase(): global x x = x + 1 print(x) # 2가 출력된다.

기본 인자 파이썬은 기본 인자 값을 가진 함수 정의를 허용한다. 함수가 인자 없 이 호출될 때 기본 값이 매개변수로 전달된다. DefaultArgumentDemo 실행

MultipleReturnValueDemo 다중값 반환하기 파이썬은 함수가 다중값을 반환하는 것을 허용한다. 코드 6.10은 두 숫자를 받아들여 이를 오름차순으로 반환하는 함수를 보여준다. MultipleReturnValueDemo 실행

사례 연구: 랜덤 ASCII 문자 생성하기 RandomCharacter TestRandomCharacter 실행

함수 추상화 함수의 몸체를 함수의 구체적인 구현 방법을 포함하고 있는 블랙박 스로 생각할 수 있다. 입력 매개변수 (옵션) 반환 값 (옵션) 함수 헤더 함수 몸체 블랙박스

함수를 사용하면 좋은 점 한 번 작성한 함수를 어느 위치에서든 재사용할 수 있다. 정보 은닉 – 사용자로부터 구현 내용을 감출 수 있다. 복잡한 부분을 감소시킬 수 있다.

단계적 개선 함수 추상화의 개념은 프로그램의 개발 과정에 적용될 수 있다. 큰 프 로그램을 작성할 때, 원래 문제를 하위 문제로 쪼개어 해결하는 “분할 후 정복(divide-and-conquer)” 전략을 사용할 수 있다. 이를 단계적 개선(stepwise refinement)이라 한다. 분할된 하위 문제를 더 작 은 하위 문제로 다시 분할하여 해결할 수 있다.

사례 연구: PrintCalender 단계선 개선 방법의 예로 PrintCalender를 사용해 보자. 실행 PrintCalendar 실행

디자인 다이어그램 printCalendar (main) readInput printMonth

디자인 다이어그램 printCalendar (main) readInput printMonth printMonthTitle printMonthBody

디자인 다이어그램 printCalendar (main) readInput printMonth printMonthTitle printMonthBody getMonthName

디자인 다이어그램 printCalendar (main) readInput printMonth printMonthTitle printMonthBody getMonthName getStartDay getNumOfDaysInMonth

디자인 다이어그램 printCalendar (main) readInput printMonth printMonthTitle printMonthBody getMonthName getStartDay getTotalNumOfDays getNumOfDaysInMonth

디자인 다이어그램 printCalendar (main) readInput printMonth printMonthTitle printMonthBody getMonthName getStartDay getTotalNumOfDays getNumOfDaysInMonth isLeapYear

A Skeleton for printCalendar 구현: 하향식 접근 방법 하향식 접근 방식은 위에서부터 아래로 구조 차트에 있는 함수 하나 씩을 차례대로 구현해 가는 방식이다. 간단하지만 불완전한 함수인 스텁(stub)을 사용하여 함수를 바로 구현하지 않고 차후로 미룰 수도 있 다. 스텁을 사용하면 호출자 관점에서 함수를 생각해볼 수 있다. main 함수 구현 시, 연도와 월을 간략히 출력하는 printMonth 함수를 스텁 으로 나타내 보자. 예를 들어 printMonth 함수는 스텁 내부의 년도와 월을 출력하도록 만들면, 프로그램은 다음과 같이 시작된다. A Skeleton for printCalendar

구현: 상향식 접근 방법 상향식 접근 방식은 아래에서 위로 구조 차트 내부의 함수 하나씩을 차례대로 구현해 나가는 방식이다. 구현된 각각의 함수마다 함수 테 스트를 위해 드라이버(driver)로 알려진 테스트 프로그램을 작성해야 한 다. 하향식과 상향식 접근 방식 둘 다 좋은 방식이다. 두 접근 방식 모두, 함수들을 하나씩 점진적으로 구현하며, 구현과 프로그래밍 오류를 분리하는 데 도움을 주며, 디버깅을 쉽게 해준다. 또한 두 접근 방식을 함께 사용할 수도 있다.

터틀: 재사용 가능한 그래픽 함수 def drawLine(x1, y1, x2, y2): def writeString(s, x, y): def drawPoint(x, y): def drawCircle(x = 0, y = 0, radius = 10): def drawRectangle(x = 0, y = 0, width = 10, height = 10): UsefulTurtleFunctions UseCustomTurtleFunctions 실행

감사합니다.