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

Slides:



Advertisements
Similar presentations
3. 메소드와 변수 SCJP 자격증 프로젝트 발표자 : 최선웅. 1. 메 소 드 개 념 2. 메 소 드 양 식 3. 메 소 드 변 수 4. 메 소 드 예 제 5. 참 고 문 헌 / 자 료 목 차.
Advertisements

SCJP. Garbage Collection  Garbage Collector( 이하 GC) 가 Heap 영역 에 할당된, 더 이상 사용되지 않는 메모리인 Garbage 를 다른 객체가 사용할 수 있도록 정리하는 것.  C++ 에서의 메모리 해제 int* v=new.
목 차 C# 언어 특징 .NET 프레임워크 C# 콘솔 프로그램 C# 윈도우 프로그램 실습 프로그래밍세미나 2.
01_ 가상 함수를 사용한 다형성의 구현 02_ 오버라이딩
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
Chap07 상속 Section 1 : 상속의 개요 Section 2 : 멤버 변수의 상속
최윤정 Java 프로그래밍 클래스 상속 최윤정
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
Ch.07-5 xml-rpc 사용하기 김상엽.
Java로 배우는 디자인패턴 입문 Chapter 5. Singleton 단 하나의 인스턴스
컴퓨터 프로그래밍 기초 [Final] 기말고사
제9장 추상 데이터 타입 및 모듈 (Abstract Data Type & Module)
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
Lesson 9. 예외처리.
Lesson 6. 형변환.
5장. 참조 타입.
C++ Programming: Sample Programs
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
정적 멤버 변수/정적 멤버 함수 - friend 함수/클래스 template
C++ Espresso 제12장 템플릿.
Java 6장. 클래스 : 속성 public class SumTest {
Lesson 7. 클래스와 메소드 - 1.
자료구조: CHAP 4 리스트 (3) 순천향대학교 컴퓨터공학과 하 상 호.
10장. 예외처리.
11장. 1차원 배열.
C#.
6장 클래스 6.1 클래스의 일반 구조 6.2 클래스 선언 6.3 객체의 생성 6.4 멤버 변수 6.5 멤버변수 접근 한정자
13. 연산자 오버로딩.
제14장 예외처리와 템플릿 예외 처리의 개요를 학습한다. 예외 처리를 적용할 수 있다. 템플릿의 개념을 이해한다.
7장 인터페이스와 추상 클래스.
Method & library.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
자료구조: CHAP 7 트리 –review 순천향대학교 컴퓨터공학과 하 상 호.
19. 함수 포인터와 void 포인터.
Lesson 2. 기본 데이터형.
프로그래밍 언어론 - 소개 순천향대학교 컴퓨터공학과 하 상 호.
6장 데이터 타입(4) 순천향대학교 컴퓨터공학부 하 상 호.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
10장 부프로그램 구현 순천향대학교 컴퓨터공학과 하 상 호.
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
2장. 변수와 타입.
Lab 8 Guide: 멀티스레딩 예제 2 * Critical Section을 이용한 멀티스레딩 동기화 (교재 15장, 쪽)
자바 5.0 프로그래밍.
Power Java 제11장 상속.
Chapter 08. 함수.
C++ Espresso 제11장 예외 처리와 형변환.
JA A V W. 06.
Fucntion 요약.
12. 상속 : 고급.
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
객체기반 SW설계 팀활동지 4.
18강. 인터페이스 – II - 인터페이스와 다중상속 - 인터페이스를 통한 로봇 장남감 만들기 프로그래밍
함수(Function) ◈ 함수의 개념 및 사용 이유 ◈ 함수 정의, 호출 및 선언 ◈ 지역변수와 전역변수 ◈ return 문
제 6 장 함수(functions).
9장 부프로그램 (3) 순천향대학교 컴퓨터공학부 하 상 호.
Chapter 13. 템플릿(Template) 1
클래스 : 기능 CHAPTER 7 Section 1 생성자(Constructor)
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
3. 모듈 (5장. 모듈).
발표자 : 이지연 Programming Systems Lab.
2.가상머신의 탐험 도구, Oolong에 대하여 ps lab 김윤경.
1장 C 언어의 개요 C 언어의 역사와 기원 C 언어의 특징 프로그램 과정 C 프로그램 구조 C 프로그램 예제.
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
OOP Practices OOP presentation 6 작성자 Kimjinsik 소속 Mobile computing Lab
상속 (Inheritance) private 전용부분 전용부분 공용부분 공용부분 public 기본 클래스
6장 데이터 타입(5) 순천향대학교 컴퓨터공학부 하 상 호.
Presentation transcript:

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

목차 부프로그램 개념 부프로그램 설계시 고려사항 매개변수 전달 방법 중복 부프로그램 포괄형 부프로그램

중복 부프로그램 중복 부프로그램(overloaded subprogram)은 같은 참조 환경에서 다른 부프로그램과 이름이 같은 부프로그램이다. 중복 부프로그램은 고유한 프로토콜을 갖는다 그 호출 의미는 실매개변수 리스트와 반환값의 타입에 의해서 결정 중복 부프로그램 호출에 대한 컴파일러 고려사항 타입 강제 변환이 허용되는 경우? 혼합형 식이 허용될 경우에, 반환 타입이 중복 부프로그램을 결정할 수 있는가? 디폴트 매개변수를 갖는 경우? void fun(float b = 0.0); void fun(); … fun();

중복 부프로그램(overloaded subprogram) 중복 부프로그램 의미는 언제 어떻게 결정되는가?

예제: 중복 부프로그램 다음 max() 호출의 의미는? max(2,3) max(2.1, 3.2) max(1, 3, 2) int max(int x, int y) { return x>y ? x : y; } 다음 max() 호출의 의미는? max(2,3) max(2.1, 3.2) max(1, 3, 2) max(2.1, 3) max #2 double max(double x, double y) { return x>y ? x : y; } max #3 int max(int x, int y, int z) { return x>y ? (x>z ? x : z) : (y > z ? y : z); }

예제: 중복 부프로그램 각 함수 호출의 의미는? int max(int x, int y) { return x>y ? x : y; } max(2, 3); max #2 max(2.1, 3.2); double max(double x, double y) { return x>y ? x : y; } max(1, 3, 2); max(2.1, 3); max #3 int max(int x, int y, int z) { return x>y ? (x>z ? x : z) : (y > z ? y : z); } 중복 부프로그램의 호출 의미는 고유 프로토콜에 의해서 결정된다.

예제: 중복 부프로그램 함수 호출의 의미는? int max(int x, int y) { return x>y ? x : y; } max #2 double max(double x, double y) { return x>y ? x : y; } max(2.1, 3); max #3 int max(int x, int y, int z) { return x>y ? (x>z ? x : z) : (y > z ? y : z); }

중복 부프로그램 매개변수의 타입 강제변환 후에, 함수 프로토콜과 일치 여부 검사 언어의 타입 강제변환에 종속 max #1 int max(int x, int y) { return x>y ? x : y; } max #2 double max(double x, double y) { return x>y ? x : y; } max(2.1, 3); max #3 int max(int x, int y, int z) { return x>y ? (x>z ? x : z) : (y > z ? y : z); }

중복 부프로그램 매개변수의 타입 강제변환 후에, 함수 프로토콜과 일치 여부 검사 언어의 타입 강제변환에 종속 max #1 int max(int x, int y) { return x>y ? x : y; } max #2 double max(double x, double y) { return x>y ? x : y; } max(2.1, 3); max #3 int max(int x, int y, int z) { return x>y ? (x>z ? x : z) : (y > z ? y : z); }

중복 부프로그램 C++ int=>double, double =>int의 강제 변환 모두 허용 max #1 int max(int x, int y) { return x>y ? x : y; } max #2 double max(double x, double y) { return x>y ? x : y; } max(2.1, 3); max #3 int max(int x, int y, int z) { return x>y ? (x>z ? x : z) : (y > z ? y : z); }

중복 부프로그램 Java 확장 변환의 경우만 강제변환 허용 int max(int x, int y) { return x>y ? x : y; } max #2 double max(double x, double y) { return x>y ? x : y; } max(2.1, 3); max #3 int max(int x, int y, int z) { return x>y ? (x>z ? x : z) : (y > z ? y : z); }

중복 부프로그램 Ada 타입 강제 변환을 허용하지 않음 int max(int x, int y) { return x>y ? x : y; } max #2 double max(double x, double y) { return x>y ? x : y; } max(2.1, 3); max #3 int max(int x, int y, int z) { return x>y ? (x>z ? x : z) : (y > z ? y : z); }

중복 부프로그램 함수 반환값 타입이 중복 함수 의미 결정에 포함되는가? 언어에 종속 C++ Java C# Ada max #1 int max(int x, int y) { return x>y ? x : y; } int x; … x = max(2, 3); max #2 double max(int x, int y) { return x>y ? x : y; } C++ Java C# Ada

포괄형 부프로그램 다형적(polymorphic) 의미는? “다양한 형태를 갖는다”를 뜻하는 그리스어의 어원 다형 부프로그램(polymorphic subprogram)은 다른 활성화시에 다른 타입의 매개변수를 취하는 부프로그램 다형 부프로그램 유형 특이 다형성(ad hoc polymorphism) 매개변수 다형성(parametric polymorphism)

특이 다형성 “특이(ad hoc)”는 “특정 목적으로 수행되는 무엇”을 뜻하는 그리스어의 어원 중복 부프로그램은 다형 부프로그램의 한 유형으로 특이 다형성(ad hoc polymorphism)을 제공한다. 같은 이름을 갖는 여러 개의 부프로그램이 중복되어 있으며, 중복된 각 부프로그램은 특정 목적을 가지며, 유사하게 동작할 필요 없다.

부타입 다형성 부타입 다형성(subtype polymorphism)은 타입 T의 변수가 T의 객체나 T로부터 파생된 임의 타입의 객체를 접근할 수 있음을 의미 객체지향 프로그래밍 언어에서 지원

매개변수 다형성 매개변수 다형성(parametric polymorphism)은 부프로그램의 형식 매개변수란에 포괄형 매개변수를갖는 부프로그램으로 제공 포괄형 매개변수(generic parameter)는 임의의 타입으로 대체 가능한 타입 매개변수이다. 매개변수 다형적 부프로그램을 포괄형 부프로그램(generic subprogram)이라 부른다. 포괄형 매개변수 max(type a, type b) {…}

매개변수 다형성 부프로그램의 다른 사례화에 대해서 다른 타입의 매개변수를 갖는 부프로그램 생성 매개변수 다형적 부프로그램은 모두 동일하게 행동 포괄형 매개변수 max(int a, int b) {…} max(type a, type b) {…} max(float a, float b) {…} max(char a, char b) {…}

C++ 포괄형 함수 C++에서 포괄형 함수는 템플리트 함수(template function)으로 표현 사례화 template 인자이며, 포괄형 매개변수(type parameter) 표현 template<class TYPE> void copy(TYPE a[], TYPE b[], int n) { for (int i=0; i < n; i++) a[i] = b[i]; } template 인자는 타입 이름으로 사용될 수 있으며, 실 매개변수의 타입으로 바인딩 사례화 컴파일러는 실 매개변수에 기반하여 실제 함수를 생성한다 double a1[10], a2[10]; copy(a1, a2, 10); char b1[10], b2[10]; copy(b1, b2, 10); Int c1[30], c2[30]; copy(c1, c2, 30);

C++ 포괄형 함수 사례화 void copy(double a[], double b[], int n) { template<class TYPE> void copy(TYPE a[], TYPE b[], int n) { for (int i=0; i < n; i++) a[i] = b[i]; } void copy(double a[], double b[], int n) { for (int i=0; i < n; i++) a[i] = b[i]; } double a1[10], a2[10]; char b1[10], b2[10]; int c1[30], c2[30]; … copy(a1, a2, 10); copy(b1, b2, 10); copy(c1, c2, 30); copy(a1, b1, 10); 사례화 void copy(char a[], char b[], int n) { for (int i=0; i < n; i++) a[i] = b[i]; } void copy(int a[], int b[], int n) { for (int i=0; i < n; i++) a[i] = b[i]; }

C++ 포괄형 함수 사례화 포괄형 매개변수를 2개 갖는 템플리트 함수 정의 template<class TYPE1, TYPE2> void copy(TYPE1 a[], TYPE 2 b[], int n) { for (int i=0; i < n; i++) a[i] = b[i]; } 포괄형 매개변수를 2개 갖는 템플리트 함수 정의 double a1[10], a2[10]; char b1[10], b2[10]; int c1[30], c2[30]; … copy(a1, b1, 10); 사례화 void copy(int a[], char b[], int n) { for (int i=0; i < n; i++) a[i] = b[i]; }

C++ 포괄형 함수 generic_sort() 함수 작성 template <class Type> void generic_sort(Type list[], int len) { int i, j; Type temp; for (i = 0; i < len - 1; top++) for (j = i + 1; j < len - 1; j++) if (list[i] > list[j]) { temp = list[i]; list[i] = list[j]; list[j] = temp; } int a[100]; float b[100]; … generic_sort(a, 100); generic_sort(b, 100);

Java 포괄형 메소드 포괄형 타입 이용(Java 5.0+) 포괄형 매개변수 public static <T> T getMiddle(T[] a) { return a[a.length / 2]; } String[] names = {"John", "Kim", "Lee"}; String middle = getMiddle<String>(names); 포괄형 메소드 호출시에, 실 매개변수의 타입을 각괄호로 메소드 이름 앞에 배치

Java 포괄형 메소드 포괄형 매개변수는 클래스에 제한 기본 타입은 허용하지 않음 클래스 범위 제한 T가 compartTo()를 포함하는 것을 어떻게 아는가? public static <T> T min(T[] a) { if (a == null || a.length ==0) return null; T smallest = a[0]; for (int i=1; i <a.length; i++) if (smallest.compareTo(a[i]) > 0) smallest = a[i]; return smallest; }

Java 포괄형 메소드 T를 Comparable를 구현하는 클래스로 제한 public static <T> T min(T[] a) { if (a == null || a.length ==0) return null; T smallest = a[0]; for (int i=1; i <a.length; i++) if (smallest.compareTo(a[i]) > 0) smallest = a[i]; return smallest; } T를 Comparable를 구현하는 클래스로 제한 public static <T extends Comparable> T min(T[] a) {…}

Java 포괄형 메소드 포괄형 타입을 이용한 generic_sort() public static <T extends Comparable> void generic_sort(T[] a) { for (int i = 0; i<a.lenghth; i++) for (int j= i+1; j <a.length; j++) if (a[i].ComparedTo(a[j]) > 0) { Comparable t = a[i]; a[i] = a[j]; a[j] = t; }

포괄형 부프로그램 C++, Java의 포괄형 부프로그램 차이점은? 포괄형 매개변수의 타입이 제한되는가? 클래스의 범위를 제한하는 것이 가능한가? 포괄형 부프로그램 사례 방식은? 단지 한 개의 부프로그램 코드만 생성되는가? 아니면 각 사례에 대해서 별도의 코드가 생성되는가?

포괄형 부프로그램 C# 2005+ Java 5.0의 포괄형 부프로그램 유사 한 가지 차이점: 컴파일러가 실매개변수로부터 포괄형 타입을 추론할 수 있다면, 부프로그램 호출시 포괄형 매개변수는 생략될 수 있다. class MyClass public static <T> DoIt<T>(T p1) {…} } … int myInt = MyClass.DoIt(17); // DoIt<int>를 호출 string myStr = MyClass.DoIt(‘apples’); // DoIt<string>을 호출