57
5. Swift 기초 - 기초 함수 창원대학교 정보통신공학과 박동규 2015. 12

5 swift 기초함수

Embed Size (px)

Citation preview

Page 1: 5 swift 기초함수

5. Swift 기초 - 기초 함수

창원대학교 정보통신공학과 박동규

2015. 12

Page 2: 5 swift 기초함수

함수 Function

• 프로그램의 기본적인 구성요소

• 어떤 작업을 수행하는 문장의 그룹

• 하나의 프로그램은 여러 개의 함수들이 모여서 이루어진다

• 프로그램에서 레고 블럭과 같은 요소

• 가독성의 증대, 유지관리가 쉽다.

Page 3: 5 swift 기초함수

함수

Add10(x)

Page 4: 5 swift 기초함수

함수

Add10(x)

num=10

Page 5: 5 swift 기초함수

함수

Add10(x)num=10

Page 6: 5 swift 기초함수

함수

Add10(x)

Page 7: 5 swift 기초함수

함수

Add10(x) num=20

Page 8: 5 swift 기초함수

함수

Add10(x)

num=20

Page 9: 5 swift 기초함수

Swift의 함수

Page 10: 5 swift 기초함수

Swift의 함수

Page 11: 5 swift 기초함수

Swift의 함수

Page 12: 5 swift 기초함수

Swift의 함수함수명

Page 13: 5 swift 기초함수

Swift의 함수

Page 14: 5 swift 기초함수

Swift의 함수

Page 15: 5 swift 기초함수

Swift의 함수

매개변수(인자,파라메터)

Page 16: 5 swift 기초함수

Swift의 함수

Page 17: 5 swift 기초함수

Swift의 함수

Page 18: 5 swift 기초함수

Swift의 함수

반환값

Page 19: 5 swift 기초함수

Swift의 함수

Page 20: 5 swift 기초함수

Swift의 함수

Page 21: 5 swift 기초함수

Swift의 함수

함수 몸체

Page 22: 5 swift 기초함수

Swift의 함수

Page 23: 5 swift 기초함수

Swift의 함수

Page 24: 5 swift 기초함수

Swift의 함수

함수 호출- 매개변수가 2개 이상이면 함수의 두번째 매개변수부터는 반드시 레이블을 붙여서 호출해야 한다

Page 25: 5 swift 기초함수

다중 반환값

• C/C++/Objective-C/Java 등의 언어에서는 함수가 하나의 리턴값만을 가질 수 밖에 없어 불편함.

• 튜플(tuple)을 사용하면 여러 개의 값을 한꺼번에 반환할 수 있다.

• 함수의 예를 통해 알아보자

Page 26: 5 swift 기초함수

튜플을 이용한 반환

홍길동의 나이와 이름, 키를 반환하는 함수

Page 27: 5 swift 기초함수

swap 함수

Page 28: 5 swift 기초함수

swap 함수

Page 29: 5 swift 기초함수

swap 함수

tuple을 이용하여 반환값을 받아온다

Page 30: 5 swift 기초함수

튜플 재조합

Page 31: 5 swift 기초함수

함수 중복정의와 매개변수

Page 32: 5 swift 기초함수

함수 중복정의

Page 33: 5 swift 기초함수

C로 만든 Swap 함수#include<stdio.h>

voidswap(){inttemp;temp=*num1;*num1=*num2;*num2=temp;}

intmain(intargc,constchar*argv[]){intn1=100,n2=200;printf("Before:n1=%d\n",n1);printf("Before:n2=%d\n",n2);swap();printf("After:n1=%d\n",n1);printf("After:n2=%d\n",n2);return0;}

Page 34: 5 swift 기초함수

C로 만든 Swap 함수#include<stdio.h>

voidswap(){inttemp;temp=*num1;*num1=*num2;*num2=temp;}

intmain(intargc,constchar*argv[]){intn1=100,n2=200;printf("Before:n1=%d\n",n1);printf("Before:n2=%d\n",n2);swap();printf("After:n1=%d\n",n1);printf("After:n2=%d\n",n2);return0;} 포인터 연산자를 이용하여 외부 변수값에 접근함

Page 35: 5 swift 기초함수

C로 만든 Swap 함수#include<stdio.h>

voidswap(){inttemp;temp=*num1;*num1=*num2;*num2=temp;}

intmain(intargc,constchar*argv[]){intn1=100,n2=200;printf("Before:n1=%d\n",n1);printf("Before:n2=%d\n",n2);swap();printf("After:n1=%d\n",n1);printf("After:n2=%d\n",n2);return0;} 포인터 연산자를 이용하여 외부 변수값에 접근함

&n1,&n2

Page 36: 5 swift 기초함수

C로 만든 Swap 함수#include<stdio.h>

voidswap(){inttemp;temp=*num1;*num1=*num2;*num2=temp;}

intmain(intargc,constchar*argv[]){intn1=100,n2=200;printf("Before:n1=%d\n",n1);printf("Before:n2=%d\n",n2);swap();printf("After:n1=%d\n",n1);printf("After:n2=%d\n",n2);return0;} 포인터 연산자를 이용하여 외부 변수값에 접근함

&n1,&n2

Page 37: 5 swift 기초함수

C로 만든 Swap 함수#include<stdio.h>

voidswap(){inttemp;temp=*num1;*num1=*num2;*num2=temp;}

intmain(intargc,constchar*argv[]){intn1=100,n2=200;printf("Before:n1=%d\n",n1);printf("Before:n2=%d\n",n2);swap();printf("After:n1=%d\n",n1);printf("After:n2=%d\n",n2);return0;} 포인터 연산자를 이용하여 외부 변수값에 접근함

&n1,&n2

int*num1,int*num2

Page 38: 5 swift 기초함수

C로 만든 Swap 함수#include<stdio.h>

voidswap(){inttemp;temp=*num1;*num1=*num2;*num2=temp;}

intmain(intargc,constchar*argv[]){intn1=100,n2=200;printf("Before:n1=%d\n",n1);printf("Before:n2=%d\n",n2);swap();printf("After:n1=%d\n",n1);printf("After:n2=%d\n",n2);return0;} 포인터 연산자를 이용하여 외부 변수값에 접근함

&n1,&n2

int*num1,int*num2

Page 39: 5 swift 기초함수

C++로 만든 Swap 함수#include<iostream>usingnamespacestd;

voidswap(){inttemp;temp=num1;num1=num2;num2=temp;}

intmain(intargc,constchar*argv[]){intn1=100,n2=200;cout<<"Before:n1="<<n1<<endl;cout<<"Before:n2="<<n2<<endl;swap();cout<<"After:n1="<<n1<<endl;cout<<"After:n2="<<n2<<endl;

return0;}

Page 40: 5 swift 기초함수

C++로 만든 Swap 함수#include<iostream>usingnamespacestd;

voidswap(){inttemp;temp=num1;num1=num2;num2=temp;}

intmain(intargc,constchar*argv[]){intn1=100,n2=200;cout<<"Before:n1="<<n1<<endl;cout<<"Before:n2="<<n2<<endl;swap();cout<<"After:n1="<<n1<<endl;cout<<"After:n2="<<n2<<endl;

return0;}

참조 연산자 & 를 이용하여 쉽게 변수값에 접근함

Page 41: 5 swift 기초함수

C++로 만든 Swap 함수#include<iostream>usingnamespacestd;

voidswap(){inttemp;temp=num1;num1=num2;num2=temp;}

intmain(intargc,constchar*argv[]){intn1=100,n2=200;cout<<"Before:n1="<<n1<<endl;cout<<"Before:n2="<<n2<<endl;swap();cout<<"After:n1="<<n1<<endl;cout<<"After:n2="<<n2<<endl;

return0;}

참조 연산자 & 를 이용하여 쉽게 변수값에 접근함

n1,n2

Page 42: 5 swift 기초함수

C++로 만든 Swap 함수#include<iostream>usingnamespacestd;

voidswap(){inttemp;temp=num1;num1=num2;num2=temp;}

intmain(intargc,constchar*argv[]){intn1=100,n2=200;cout<<"Before:n1="<<n1<<endl;cout<<"Before:n2="<<n2<<endl;swap();cout<<"After:n1="<<n1<<endl;cout<<"After:n2="<<n2<<endl;

return0;}

참조 연산자 & 를 이용하여 쉽게 변수값에 접근함

n1,n2

Page 43: 5 swift 기초함수

C++로 만든 Swap 함수#include<iostream>usingnamespacestd;

voidswap(){inttemp;temp=num1;num1=num2;num2=temp;}

intmain(intargc,constchar*argv[]){intn1=100,n2=200;cout<<"Before:n1="<<n1<<endl;cout<<"Before:n2="<<n2<<endl;swap();cout<<"After:n1="<<n1<<endl;cout<<"After:n2="<<n2<<endl;

return0;}

참조 연산자 & 를 이용하여 쉽게 변수값에 접근함

n1,n2

int&num1,int&num2

Page 44: 5 swift 기초함수

C++로 만든 Swap 함수#include<iostream>usingnamespacestd;

voidswap(){inttemp;temp=num1;num1=num2;num2=temp;}

intmain(intargc,constchar*argv[]){intn1=100,n2=200;cout<<"Before:n1="<<n1<<endl;cout<<"Before:n2="<<n2<<endl;swap();cout<<"After:n1="<<n1<<endl;cout<<"After:n2="<<n2<<endl;

return0;}

참조 연산자 & 를 이용하여 쉽게 변수값에 접근함

n1,n2

int&num1,int&num2

Page 45: 5 swift 기초함수

Swift로 만든 Swap 함수1

importFoundation

funcswap(n1:Int,n2:Int)->(Int,Int){return(n2,n1)}

varn1=100varn2=200

print("Before:n1=\(n1)")print("Before:n2=\(n2)")

(n1,n2)=swap(n1,n2)

print("After:n1=\(n1)")print("After:n2=\(n2)")

Page 46: 5 swift 기초함수

Swift로 만든 Swap 함수1

importFoundation

funcswap(n1:Int,n2:Int)->(Int,Int){return(n2,n1)}

varn1=100varn2=200

print("Before:n1=\(n1)")print("Before:n2=\(n2)")

(n1,n2)=swap(n1,n2)

print("After:n1=\(n1)")print("After:n2=\(n2)")

튜플을 반환하는 방식으로 간단하게 구현가능

Page 47: 5 swift 기초함수

Swift로 만든 Swap 함수1

importFoundation

funcswap(n1:Int,n2:Int)->(Int,Int){return(n2,n1)}

varn1=100varn2=200

print("Before:n1=\(n1)")print("Before:n2=\(n2)")

(n1,n2)=swap(n1,n2)

print("After:n1=\(n1)")print("After:n2=\(n2)")

튜플을 반환하는 방식으로 간단하게 구현가능

Page 48: 5 swift 기초함수

Swift로 만든 Swap 함수2importFoundation

funcswap(inouta:Int,inoutb:Int){lettemporaryA=aa=bb=temporaryA}

varn1=100varn2=200

print("Before:n1=\(n1)")print("Before:n2=\(n2)")

swap(&n1,&n2)

print("After:n1=\(n1)")print("After:n2=\(n2)")

Page 49: 5 swift 기초함수

Swift로 만든 Swap 함수2importFoundation

funcswap(inouta:Int,inoutb:Int){lettemporaryA=aa=bb=temporaryA}

varn1=100varn2=200

print("Before:n1=\(n1)")print("Before:n2=\(n2)")

swap(&n1,&n2)

print("After:n1=\(n1)")print("After:n2=\(n2)")

Page 50: 5 swift 기초함수

Swift로 만든 Swap 함수2importFoundation

funcswap(inouta:Int,inoutb:Int){lettemporaryA=aa=bb=temporaryA}

varn1=100varn2=200

print("Before:n1=\(n1)")print("Before:n2=\(n2)")

swap(&n1,&n2)

print("After:n1=\(n1)")print("After:n2=\(n2)")

Page 51: 5 swift 기초함수

Swift로 만든 Swap 함수2importFoundation

funcswap(inouta:Int,inoutb:Int){lettemporaryA=aa=bb=temporaryA}

varn1=100varn2=200

print("Before:n1=\(n1)")print("Before:n2=\(n2)")

swap(&n1,&n2)

print("After:n1=\(n1)")print("After:n2=\(n2)")

inout과 & 연산자를 사용하여 외부값을 참조할 수 있음

Page 52: 5 swift 기초함수

inout

• 매개변수 중에서 함수내에서 변경된 매개변수가 함수 호출이 종료된 시점에서도 계속 유지되기를 원한다면 inout 키워드를 사용한다

• 매개변수의 값은 함수 안으로 전달되어 변경되고, 함수에서 나와서 원래의 값을 대체함

• 인수를 입출력 파라메터로 넘길때 변수의 이름 앞에 앰퍼샌드(&)를 붙인다

Page 53: 5 swift 기초함수

BONUS : Swift로 만든 Swap -함수사용이 필요하지 않음

importFoundation

varn1=100varn2=200

print("Before:n1=\(n1)")print("Before:n2=\(n2)")

(n1,n2)=(n2,n1)//튜플사용

print("After:n1=\(n1)")print("After:n2=\(n2)")

Page 54: 5 swift 기초함수

BONUS : Swift로 만든 Swap -함수사용이 필요하지 않음

importFoundation

varn1=100varn2=200

print("Before:n1=\(n1)")print("Before:n2=\(n2)")

(n1,n2)=(n2,n1)//튜플사용

print("After:n1=\(n1)")print("After:n2=\(n2)")

Page 55: 5 swift 기초함수

BONUS : Swift로 만든 Swap -함수사용이 필요하지 않음

importFoundation

varn1=100varn2=200

print("Before:n1=\(n1)")print("Before:n2=\(n2)")

(n1,n2)=(n2,n1)//튜플사용

print("After:n1=\(n1)")print("After:n2=\(n2)")

(Int, Int) 튜플을 (Int, Int) 튜플에 복사함

Page 56: 5 swift 기초함수

정리

• Swift의 함수는 튜플타입 반환을 허용한다

• 함수의 두번째 매개변수부터는 반드시 레이블을 붙여야 한다

• Swift 2.0 이상

• 함수이름의 중복정의를 허용한다

• inout을 통해서 함수내에서 매개변수의 수정을 허용한다