Swift 3 : Functions
๊ตฐ์‚ฐ๋Œ€ํ•™๊ต ์ปดํ“จํ„ฐ์ •๋ณดํ†ต์‹ ๊ณตํ•™๋ถ€ ์ปดํ“จํ„ฐ์ •๋ณด๊ณตํ•™์ „๊ณต
๋‚จ ๊ด‘ ์šฐ
kwnam@kunsan.ac.kr
Swiftย 3ย Tourย andย Languageย Guideย byย Apple
Function์˜ ์„ ์–ธ
โ€ข Function์˜ ํ˜•ํƒœ ์˜ˆ
func ํ•จ์ˆ˜๋ช…(ย ย ํŒŒ๋ผ๋ฏธํ„ฐ๋ช…:ย ํƒ€์ž…,โ€ฆ)ย โ€>ย ๋ฐ˜ํ™˜ ํƒ€์ž…
{
body
}
charย *greet(ย char*ย person) {
charย ย *greeting=(char*)calloc(30,1);
strcat(ย greeting,ย โ€œHello,ย โ€œ);
strcat(ย gStr,ย personย );
strcat(ย gStr,ย โ€œ!โ€ย );
returnย greeting;
}
printf(ย โ€œ%sโ€,ย  greet(ย "Anna")ย )
//ย Printsย "Hello,ย Anna!"
printf(โ€œ%sโ€,ย greet(ย "Brian")ย )
//ย Printsย "Hello,ย Brian!"
C
funcย greet(person:ย String)ย โ€>ย Stringย {
letย greetingย =ย "Hello,ย "ย +ย personย +ย "!"
returnย greeting
}
print(ย greet(person:ย "Anna")ย )
//ย Printsย "Hello,ย Anna!"
print(greet(person:ย "Brian"))
//ย Printsย "Hello,ย Brian!"
Swift
#includeย <stdio.h>
#includeย <string.h>
#includeย <stdlib.h>
Function์˜ ์„ ์–ธ
โ€ข Functionsย withoutย Parameter
โ€ข Functionsย withย Multipleย Parameter
funcย ย sayHelloWorld()ย โ€>ย Stringย {
returnย "hello,ย world"
}
print(sayHelloWorld())
//ย Printsย "hello,ย world"
funcย greet(person:ย String,ย alreadyGreeted:ย Bool)ย โ€>ย Stringย {
ifย alreadyGreetedย {
returnย greetAgain(person:ย person)
}ย elseย {
returnย greet(person:ย person)
}
}
print(greet(person:ย "Tim",ย alreadyGreeted:ย true))
//ย Printsย "Helloย again,ย Tim!"
Function์˜ ์„ ์–ธ
โ€ข Functionsย withoutย Returnย Value
โ€ข return๊ฐ’ ์žˆ๋Š” ํ•จ์ˆ˜์˜ return๊ฐ’์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ OK
funcย greet(person:ย String)ย {
print("Hello,ย (person)!")
}
greet(person:ย "Dave")
//ย Printsย "Hello,ย Dave!"
funcย printAndCount(string:ย String)ย โ€>ย Intย {
print(string)
returnย string.characters.count
}
funcย printWithoutCounting(string:ย String)ย {
letย _ย =ย printAndCount(string:ย string)
}
printAndCount(string:ย "hello,ย world")
printWithoutCounting(string:ย "hello,ย world")
Function์˜ ์„ ์–ธ
โ€ข Functionsย withoutย Multiple Returnย Value
โ€ข return๊ฐ’์ด tuple์ธ ํ•จ์ˆ˜
funcย minMax(array:ย [Int])ย โ€>ย (min:ย Int,ย max:ย Int)ย {
varย currentMinย =ย array[0]
varย currentMaxย =ย array[0]
forย valueย inย array[1..<array.count]ย {
ifย valueย <ย currentMinย {
currentMinย =ย value
}ย elseย ifย valueย >ย currentMaxย {
currentMaxย =ย value
}
}
returnย (currentMin,ย currentMax)
}
letย boundsย =ย minMax(array:ย [8,ย โ€6,ย 2,ย 109,ย 3,ย 71])
print("minย isย (bounds.min)ย andย maxย isย (bounds.max)")
//ย Printsย "minย isย โ€6ย andย maxย isย 109"
arrayย ๊ฐ€ ํ™•์‹คํžˆ
nil์ด ์•„๋‹ˆ๋ผ๊ณ 
๊ฐ€์ •ํ•œ ํ”„๋กœ๊ทธ๋žจ!
๋งŒ์•ฝ?ย Nilย ์ด ์˜ฌ์ˆ˜ ์žˆ๋‹ค๋ฉด?
Optional
Function์˜ ์„ ์–ธ
โ€ข Functionsย withย Optional Returnย Value
โ€ข return๊ฐ’์ด Optionalย ์ธ ํ•จ์ˆ˜
funcย minMax(array:ย [Int])ย โ€>ย (min:ย Int,ย max:ย Int)?ย 
{
ifย array.isEmpty {ย returnย nilย }
varย currentMinย =ย array[0]
varย currentMaxย =ย array[0]
forย valueย inย array[1..<array.count]ย {
ifย valueย <ย currentMinย {
currentMinย =ย value
}ย elseย ifย valueย >ย currentMaxย {
currentMaxย =ย value
}
}
returnย (currentMin,ย currentMax)
}
print(ย minMax(ย array:[5,3,6]ย ).minย );x
print(ย minMax(ย array:[5,3,6]ย )!.minย );
ifย letย bย =ย minMax(array:ย [8,ย โ€6,ย 2])
{
print("(b.min)ย (b.max)")
}ย //ย nilย ์ด๋ฉด ์ˆ˜ํ–‰๋˜์ง€ ์•Š์Œ
xo
o
๊ฐ€๋Šฅ์€ ํ•˜๋‚˜ ๋˜๋„๋ก ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋จ
ifย letย bย =ย minMax(array:ย [])
{
print("(b.min)ย (b.max)")
}ย //ย nilย ์ด๋ฉด ์ˆ˜ํ–‰๋˜์ง€ ์•Š์Œ
Function์˜ Argument Label
โ€ข Function์˜ Argumentย Label
โ€ข parameterย Name์ด ํ•˜๋‚˜์ธ ๊ฒฝ์šฐ Arg Name์„ ๊ฒธํ•จ
โ€ข Argumentย Label์„ ๋ณ„๋„๋กœ ์“ธ ์ˆ˜ ์žˆ์Œ
funcย greet(ย person:ย Stringย )ย {
print("Hello,ย (person)!")
}
greet(ย person:ย "Dave")ย "
person์€ Argumentย Label์ด๋ฉด์„œ
parameterย name
funcย greet(ย person:ย String,ย fromย hometown:ย String)ย โ€>ย Stringย {
returnย "Helloย (person)!ย ย Gladย youย couldย visitย fromย (hometown)."
}
print(ย greet(ย person:ย "Bill",ย from:ย "Cupertino")ย )ย ย //OK
//ย Printsย "Helloย Bill!ย ย Gladย youย couldย visitย fromย Cupertino.
print(ย greet(ย person:ย "Bill",ย hometownย :ย "Cupertino")ย )ย //ย ERROR!!
Function์˜ Argument Label
โ€ข Argumentย Labelย ์ƒ๋žต
โ€ข _์„ ์ด์šฉํ•œ Labelย ์ƒ๋žต
โ€ข ์˜ˆ :ย print
โ€ข print(ย โ€œHelloโ€ย );ย //ย Noย Label
funcย someFunction(ย ย _ย  first:ย Int,ย secondย :ย Int)ย {
//ย Inย theย functionย body,ย firstย andย second
//ย referย toย theย argumentย valuesย forย theย firstย andย secondย parameters.
}
someFunction(ย ย ย ย ย 1,ย secondย :ย 2)
Function์˜ Default Value
funcย someFunction(ย noDefault:ย Int,ย withDefault:ย Intย =ย 12)ย {
//ย Ifย youย omitย theย secondย argumentย whenย callingย thisย function,ย then
//ย theย valueย ofย withDefaultย isย 12ย insideย theย functionย body.
}
โ€ข Function์„ Parameter๋กœ Defaultย ์‚ฌ์šฉ๊ฐ€๋Šฅ
โ€ข defaultย ๊ฐ’์ด ์žˆ์œผ๋ฉด ํŒŒ๋ผ๋ฏธํ„ฐ ์ƒ๋žต ๊ฐ€๋Šฅ
someFunction(ย noDefault:ย 3,ย withDefault:ย 6)ย //ย withDefaultย isย 6
someFunction(ย noDefault:ย 4)ย //ย parameterWithDefaultย isย 12ย 
Variadic Parameter
โ€ข ๋ถˆํŠน์ • ๊ฐฏ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ
โ€ข โ€ฆย ์œผ๋กœ ์‚ฌ์šฉ
funcย arithmeticMean(ย _ย numbers:ย Double...ย )ย โ€>ย Doubleย {
varย total:ย Doubleย =ย 0
forย numberย inย numbersย {
totalย +=ย number
}
returnย totalย /ย Double(numbers.count)
}
arithmeticMean(1,ย 2,ย 3,ย 4,ย 5)
//ย returnsย 3.0,ย whichย isย theย arithmeticย meanย ofย theseย fiveย numbers
arithmeticMean(3,ย 8.25,ย 18.75)
//ย returnsย 10.0,ย whichย isย theย arithmeticย meanย ofย theseย threeย numbers
In-Out Parameter
โ€ข Inout ํ‚ค์›Œ๋“œ์˜ ์‚ฌ์šฉ
โ€ข Cย :ย Callโ€byโ€Value,ย Callโ€Byโ€Reference
โ€ข C์—์„œ SWAP์˜ ๊ตฌํ˜„
โ€ข Swift์—์„œ์˜ SWAP
voidย swap(int*ย a,ย int*ย b)ย {
intย tempย =ย *a;
*aย =ย *b;
*bย =ย temp;
}
intย i =ย 300;
intย jย =ย 500;
swap(&i,ย &j);
funcย swap(_ย a:ย inout Int,ย _ย b:ย inout Int)ย {
letย tempย =ย a
aย =ย b
bย =ย temp
}
varย i =ย 300;
varย jย =ย 500;
swap(ย &i,ย &j);
Function์—์„œ Function ์‚ฌ์šฉ
โ€ข Functionย 
โ€ข Cย :ย ํ•จ์ˆ˜ ํฌ์ธํ„ฐ
typedefย intย (*calcFuncPtr)(int,ย int);
intย calc(calcFuncPtrย cfPtr,ย intย left,ย intย rightย )
{
returnย cfPtr(left,ย right);ย ย 
}
intย plusย (intย left,ย intย right)
{
returnย leftย +ย right;
}
intย minusย (intย left,ย intย right)
{
returnย leftย โ€ right;
}
intย main(intย argc,ย char**ย argv)
{
calcFuncPtrย cfPtrย =ย NULL;
intย lย =ย 0,ย rย =ย 0;
scanfย ("%dย %cย %d",ย &l,ย &op,ย &r);
switchย (op)ย ย ย 
{
caseย '+'ย :
cfPtrย =ย plus;
break;
caseย 'โ€':
cfPtrย =ย minus;
break;
}
printf("ย %dย ",ย calc(ย l,ย r,ย cfPtrย )ย );
}
Function์˜ Function ํ• ๋‹น
โ€ข ํ•จ์ˆ˜ ์„ ์–ธ์—์„œ Function์˜ Assignment
varย mathFunction:ย (Int,ย Int)ย โ€>ย Intย =ย addTwoInts
funcย addTwoInts(_ย a:ย Int,ย _ย b:ย Int)ย โ€>ย Intย {
returnย aย +ย b
}
funcย multiplyTwoInts(_ย a:ย Int,ย _ย b:ย Int)ย โ€>ย Intย {
returnย aย *ย b
}
print("Result:ย (ย mathFunction(2,ย 3))")
//ย Printsย "Result:ย 5
mathFunction =ย multiplyTwoInts
print("Result:ย (mathFunction(2,ย 3))")
//ย Printsย "Result:ย 
Function์˜ Function ํŒŒ๋ผ๋ฏธํ„ฐ
โ€ข ํ•จ์ˆ˜ ์„ ์–ธ์—์„œ Function์„ Parameter๋กœ ์‚ฌ์šฉ
funcย printMathResult(_ย mathFunction:ย (Int,ย Int)ย โ€>ย Int,ย _ย a:ย Int,ย _ย b:ย Int)ย {
print("Result:ย (mathFunction(a,ย b))")
}
printMathResult(ย addTwoInts,ย 3,ย 5)
//ย Printsย "Result:ย 8"
printMathResult(multiplyTwoInts,ย 3,ย 5)
funcย addTwoInts(_ย a:ย Int,ย _ย b:ย Int)ย โ€>ย Intย {
returnย aย +ย b
}
funcย multiplyTwoInts(_ย a:ย Int,ย _ย b:ย Int)ย โ€>ย Intย {
returnย aย *ย b
}
Function์˜ Function ๋ฐ˜ํ™˜
โ€ข Function์„ Returnํ•˜๋Š” Function
funcย stepForward(_ย input:ย Int)ย โ€>ย Intย {
returnย inputย +ย 1
}
funcย stepBackward(_ย input:ย Int)ย โ€>ย Intย {
returnย inputย โ€ 1
}
funcย chooseStepFunction (backward:ย Bool)ย โ€>ย (Int)ย โ€>ย Intย {
returnย backwardย ?ย stepBackwardย :ย stepForward
}
varย currentValueย =ย 3
letย moveNearerToZeroย =ย chooseStepFunction(backward:ย currentValueย >ย 0)
whileย currentValueย !=ย 0ย {
print("(currentValue)...ย ")
currentValueย =ย moveNearerToZero(currentValue)
}
print("zero!")
+3ย ์ด๋ฉด :ย 3,ย 2,ย 1,ย zero!
โ€3ย ์ด๋ฉด :ย โ€3,ย โ€2,ย โ€1,ย zero!
Function์•ˆ์˜ Function
โ€ข Nestedย Function
funcย chooseStepFunction(backward:ย Bool)ย โ€>ย (Int)ย โ€>ย Intย {
funcย stepForward(input:ย Int)ย โ€>ย Intย {ย returnย inputย +ย 1ย }
funcย stepBackward(input:ย Int)ย โ€>ย Intย {ย returnย inputย โ€ 1ย }
returnย backwardย ?ย stepBackwardย :ย stepForward
}
varย currentValueย =ย โ€4
letย moveNearerToZeroย =ย chooseStepFunction(backward:ย currentValueย >ย 0)
whileย currentValueย !=ย 0ย {
print("(currentValue)...ย ")
currentValueย =ย moveNearerToZero(currentValue)
}
print("zero!")
+3ย ์ด๋ฉด :ย 3,ย 2,ย 1,ย zero!
โ€3ย ์ด๋ฉด :ย โ€3,ย โ€2,ย โ€1,ย zero!
o ๋‹ค์Œ์˜ ์„ฑ์  ์ฒ˜๋ฆฌ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค(1์ฐจ์›๋ฐฐ์—ด, ์ •๋ ฌ, ํƒ์ƒ‰ ๋ฒ„์ „)
- ๋‹ค์Œ์˜ ํ™”๋ฉด์— ์˜ํ•ด ๋™์ž‘ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌํ˜„ํ•˜์‹œ์˜ค. (0 ์ข…๋ฃŒ๊ฐ€ ์ž…๋ ฅ๋ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต)
* 1๋ฐ˜ ์„ฑ์ ์ฒ˜๋ฆฌ ํ”„๋กœ๊ทธ๋žจ(1๋ฐ˜ ์ •์› 10๋ช…, ๊ฐ 100์  ๋งŒ์ )
1. ๊ตญ์–ด์„ฑ์  ์ž…๋ ฅ
2. ์˜์–ด์„ฑ์  ์ž…๋ ฅ
3. ์ˆ˜ํ•™์„ฑ์  ์ž…๋ ฅ
4. ๊ฐ ๊ณผ๋ชฉ์˜ ํ‰๊ท ์„ ์ถœ๋ ฅํ•˜์‹œ์˜ค(์ถœ๋ ฅ ์˜ˆ: ๊ตญ์–ด 34์ , ์˜์–ด 75์ , ์ˆ˜ํ•™ 56์ )
5. ๊ฐ ๊ณผ๋ชฉ์˜ ์ตœ๊ณ ์ ์„ ์ถœ๋ ฅํ•˜์‹œ์˜ค(์ถœ๋ ฅ ์˜ˆ : ๊ตญ์–ด 79์ , ์˜์–ด 89์ , ์ˆ˜ํ•™ 82์ )
6. ๊ฐ ๊ณผ๋ชฉ์˜ ์ตœ์ €์ ์„ ์ถœ๋ ฅํ•˜์‹œ์˜ค(์ถœ๋ ฅ ์˜ˆ : ๊ตญ์–ด 39์ , ์˜์–ด 39์ , ์ˆ˜ํ•™ 32์ )
7. ๊ฐ ๊ณผ๋ชฉ์˜ ์ตœ๊ณ ์ ์ˆ˜์˜ ํ•™์ƒ๋ฒˆํ˜ธ๋ฅผ ์ถœ๋ ฅํ•˜์‹œ์˜ค(์ถœ๋ ฅ ์˜ˆ : ๊ตญ์–ด 1๋ฒˆ, ์˜์–ด 5์ , ์ˆ˜ํ•™ 9์ )
8. ๊ฐ ๊ณผ๋ชฉ์˜ ์ ์ˆ˜๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•˜์—ฌ ์ถœ๋ ฅํ•˜์‹œ์˜ค
0. ์ข…๋ฃŒ
์ž…๋ ฅ :____
Report

Swift 3 Programming for iOS: Function

  • 1.
    Swift 3 :Functions ๊ตฐ์‚ฐ๋Œ€ํ•™๊ต ์ปดํ“จํ„ฐ์ •๋ณดํ†ต์‹ ๊ณตํ•™๋ถ€ ์ปดํ“จํ„ฐ์ •๋ณด๊ณตํ•™์ „๊ณต ๋‚จ ๊ด‘ ์šฐ kwnam@kunsan.ac.kr Swiftย 3ย Tourย andย Languageย Guideย byย Apple
  • 2.
    Function์˜ ์„ ์–ธ โ€ข Function์˜ํ˜•ํƒœ ์˜ˆ func ํ•จ์ˆ˜๋ช…(ย ย ํŒŒ๋ผ๋ฏธํ„ฐ๋ช…:ย ํƒ€์ž…,โ€ฆ)ย โ€>ย ๋ฐ˜ํ™˜ ํƒ€์ž… { body } charย *greet(ย char*ย person) { charย ย *greeting=(char*)calloc(30,1); strcat(ย greeting,ย โ€œHello,ย โ€œ); strcat(ย gStr,ย personย ); strcat(ย gStr,ย โ€œ!โ€ย ); returnย greeting; } printf(ย โ€œ%sโ€,ย  greet(ย "Anna")ย ) //ย Printsย "Hello,ย Anna!" printf(โ€œ%sโ€,ย greet(ย "Brian")ย ) //ย Printsย "Hello,ย Brian!" C funcย greet(person:ย String)ย โ€>ย Stringย { letย greetingย =ย "Hello,ย "ย +ย personย +ย "!" returnย greeting } print(ย greet(person:ย "Anna")ย ) //ย Printsย "Hello,ย Anna!" print(greet(person:ย "Brian")) //ย Printsย "Hello,ย Brian!" Swift #includeย <stdio.h> #includeย <string.h> #includeย <stdlib.h>
  • 3.
    Function์˜ ์„ ์–ธ โ€ข Functionsย withoutย Parameter โ€ขFunctionsย withย Multipleย Parameter funcย ย sayHelloWorld()ย โ€>ย Stringย { returnย "hello,ย world" } print(sayHelloWorld()) //ย Printsย "hello,ย world" funcย greet(person:ย String,ย alreadyGreeted:ย Bool)ย โ€>ย Stringย { ifย alreadyGreetedย { returnย greetAgain(person:ย person) }ย elseย { returnย greet(person:ย person) } } print(greet(person:ย "Tim",ย alreadyGreeted:ย true)) //ย Printsย "Helloย again,ย Tim!"
  • 4.
    Function์˜ ์„ ์–ธ โ€ข Functionsย withoutย Returnย Value โ€ขreturn๊ฐ’ ์žˆ๋Š” ํ•จ์ˆ˜์˜ return๊ฐ’์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ OK funcย greet(person:ย String)ย { print("Hello,ย (person)!") } greet(person:ย "Dave") //ย Printsย "Hello,ย Dave!" funcย printAndCount(string:ย String)ย โ€>ย Intย { print(string) returnย string.characters.count } funcย printWithoutCounting(string:ย String)ย { letย _ย =ย printAndCount(string:ย string) } printAndCount(string:ย "hello,ย world") printWithoutCounting(string:ย "hello,ย world")
  • 5.
    Function์˜ ์„ ์–ธ โ€ข Functionsย withoutย MultipleReturnย Value โ€ข return๊ฐ’์ด tuple์ธ ํ•จ์ˆ˜ funcย minMax(array:ย [Int])ย โ€>ย (min:ย Int,ย max:ย Int)ย { varย currentMinย =ย array[0] varย currentMaxย =ย array[0] forย valueย inย array[1..<array.count]ย { ifย valueย <ย currentMinย { currentMinย =ย value }ย elseย ifย valueย >ย currentMaxย { currentMaxย =ย value } } returnย (currentMin,ย currentMax) } letย boundsย =ย minMax(array:ย [8,ย โ€6,ย 2,ย 109,ย 3,ย 71]) print("minย isย (bounds.min)ย andย maxย isย (bounds.max)") //ย Printsย "minย isย โ€6ย andย maxย isย 109" arrayย ๊ฐ€ ํ™•์‹คํžˆ nil์ด ์•„๋‹ˆ๋ผ๊ณ  ๊ฐ€์ •ํ•œ ํ”„๋กœ๊ทธ๋žจ! ๋งŒ์•ฝ?ย Nilย ์ด ์˜ฌ์ˆ˜ ์žˆ๋‹ค๋ฉด? Optional
  • 6.
    Function์˜ ์„ ์–ธ โ€ข Functionsย withย OptionalReturnย Value โ€ข return๊ฐ’์ด Optionalย ์ธ ํ•จ์ˆ˜ funcย minMax(array:ย [Int])ย โ€>ย (min:ย Int,ย max:ย Int)?ย  { ifย array.isEmpty {ย returnย nilย } varย currentMinย =ย array[0] varย currentMaxย =ย array[0] forย valueย inย array[1..<array.count]ย { ifย valueย <ย currentMinย { currentMinย =ย value }ย elseย ifย valueย >ย currentMaxย { currentMaxย =ย value } } returnย (currentMin,ย currentMax) } print(ย minMax(ย array:[5,3,6]ย ).minย );x print(ย minMax(ย array:[5,3,6]ย )!.minย ); ifย letย bย =ย minMax(array:ย [8,ย โ€6,ย 2]) { print("(b.min)ย (b.max)") }ย //ย nilย ์ด๋ฉด ์ˆ˜ํ–‰๋˜์ง€ ์•Š์Œ xo o ๊ฐ€๋Šฅ์€ ํ•˜๋‚˜ ๋˜๋„๋ก ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋จ ifย letย bย =ย minMax(array:ย []) { print("(b.min)ย (b.max)") }ย //ย nilย ์ด๋ฉด ์ˆ˜ํ–‰๋˜์ง€ ์•Š์Œ
  • 7.
    Function์˜ Argument Label โ€ขFunction์˜ Argumentย Label โ€ข parameterย Name์ด ํ•˜๋‚˜์ธ ๊ฒฝ์šฐ Arg Name์„ ๊ฒธํ•จ โ€ข Argumentย Label์„ ๋ณ„๋„๋กœ ์“ธ ์ˆ˜ ์žˆ์Œ funcย greet(ย person:ย Stringย )ย { print("Hello,ย (person)!") } greet(ย person:ย "Dave")ย " person์€ Argumentย Label์ด๋ฉด์„œ parameterย name funcย greet(ย person:ย String,ย fromย hometown:ย String)ย โ€>ย Stringย { returnย "Helloย (person)!ย ย Gladย youย couldย visitย fromย (hometown)." } print(ย greet(ย person:ย "Bill",ย from:ย "Cupertino")ย )ย ย //OK //ย Printsย "Helloย Bill!ย ย Gladย youย couldย visitย fromย Cupertino. print(ย greet(ย person:ย "Bill",ย hometownย :ย "Cupertino")ย )ย //ย ERROR!!
  • 8.
    Function์˜ Argument Label โ€ขArgumentย Labelย ์ƒ๋žต โ€ข _์„ ์ด์šฉํ•œ Labelย ์ƒ๋žต โ€ข ์˜ˆ :ย print โ€ข print(ย โ€œHelloโ€ย );ย //ย Noย Label funcย someFunction(ย ย _ย  first:ย Int,ย secondย :ย Int)ย { //ย Inย theย functionย body,ย firstย andย second //ย referย toย theย argumentย valuesย forย theย firstย andย secondย parameters. } someFunction(ย ย ย ย ย 1,ย secondย :ย 2)
  • 9.
    Function์˜ Default Value funcย someFunction(ย noDefault:ย Int,ย withDefault:ย Intย =ย 12)ย { //ย Ifย youย omitย theย secondย argumentย whenย callingย thisย function,ย then //ย theย valueย ofย withDefaultย isย 12ย insideย theย functionย body. } โ€ขFunction์„ Parameter๋กœ Defaultย ์‚ฌ์šฉ๊ฐ€๋Šฅ โ€ข defaultย ๊ฐ’์ด ์žˆ์œผ๋ฉด ํŒŒ๋ผ๋ฏธํ„ฐ ์ƒ๋žต ๊ฐ€๋Šฅ someFunction(ย noDefault:ย 3,ย withDefault:ย 6)ย //ย withDefaultย isย 6 someFunction(ย noDefault:ย 4)ย //ย parameterWithDefaultย isย 12ย 
  • 10.
    Variadic Parameter โ€ข ๋ถˆํŠน์ •๊ฐฏ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ โ€ข โ€ฆย ์œผ๋กœ ์‚ฌ์šฉ funcย arithmeticMean(ย _ย numbers:ย Double...ย )ย โ€>ย Doubleย { varย total:ย Doubleย =ย 0 forย numberย inย numbersย { totalย +=ย number } returnย totalย /ย Double(numbers.count) } arithmeticMean(1,ย 2,ย 3,ย 4,ย 5) //ย returnsย 3.0,ย whichย isย theย arithmeticย meanย ofย theseย fiveย numbers arithmeticMean(3,ย 8.25,ย 18.75) //ย returnsย 10.0,ย whichย isย theย arithmeticย meanย ofย theseย threeย numbers
  • 11.
    In-Out Parameter โ€ข Inoutํ‚ค์›Œ๋“œ์˜ ์‚ฌ์šฉ โ€ข Cย :ย Callโ€byโ€Value,ย Callโ€Byโ€Reference โ€ข C์—์„œ SWAP์˜ ๊ตฌํ˜„ โ€ข Swift์—์„œ์˜ SWAP voidย swap(int*ย a,ย int*ย b)ย { intย tempย =ย *a; *aย =ย *b; *bย =ย temp; } intย i =ย 300; intย jย =ย 500; swap(&i,ย &j); funcย swap(_ย a:ย inout Int,ย _ย b:ย inout Int)ย { letย tempย =ย a aย =ย b bย =ย temp } varย i =ย 300; varย jย =ย 500; swap(ย &i,ย &j);
  • 12.
    Function์—์„œ Function ์‚ฌ์šฉ โ€ขFunctionย  โ€ข Cย :ย ํ•จ์ˆ˜ ํฌ์ธํ„ฐ typedefย intย (*calcFuncPtr)(int,ย int); intย calc(calcFuncPtrย cfPtr,ย intย left,ย intย rightย ) { returnย cfPtr(left,ย right);ย ย  } intย plusย (intย left,ย intย right) { returnย leftย +ย right; } intย minusย (intย left,ย intย right) { returnย leftย โ€ right; } intย main(intย argc,ย char**ย argv) { calcFuncPtrย cfPtrย =ย NULL; intย lย =ย 0,ย rย =ย 0; scanfย ("%dย %cย %d",ย &l,ย &op,ย &r); switchย (op)ย ย ย  { caseย '+'ย : cfPtrย =ย plus; break; caseย 'โ€': cfPtrย =ย minus; break; } printf("ย %dย ",ย calc(ย l,ย r,ย cfPtrย )ย ); }
  • 13.
    Function์˜ Function ํ• ๋‹น โ€ขํ•จ์ˆ˜ ์„ ์–ธ์—์„œ Function์˜ Assignment varย mathFunction:ย (Int,ย Int)ย โ€>ย Intย =ย addTwoInts funcย addTwoInts(_ย a:ย Int,ย _ย b:ย Int)ย โ€>ย Intย { returnย aย +ย b } funcย multiplyTwoInts(_ย a:ย Int,ย _ย b:ย Int)ย โ€>ย Intย { returnย aย *ย b } print("Result:ย (ย mathFunction(2,ย 3))") //ย Printsย "Result:ย 5 mathFunction =ย multiplyTwoInts print("Result:ย (mathFunction(2,ย 3))") //ย Printsย "Result:ย 
  • 14.
    Function์˜ Function ํŒŒ๋ผ๋ฏธํ„ฐ โ€ขํ•จ์ˆ˜ ์„ ์–ธ์—์„œ Function์„ Parameter๋กœ ์‚ฌ์šฉ funcย printMathResult(_ย mathFunction:ย (Int,ย Int)ย โ€>ย Int,ย _ย a:ย Int,ย _ย b:ย Int)ย { print("Result:ย (mathFunction(a,ย b))") } printMathResult(ย addTwoInts,ย 3,ย 5) //ย Printsย "Result:ย 8" printMathResult(multiplyTwoInts,ย 3,ย 5) funcย addTwoInts(_ย a:ย Int,ย _ย b:ย Int)ย โ€>ย Intย { returnย aย +ย b } funcย multiplyTwoInts(_ย a:ย Int,ย _ย b:ย Int)ย โ€>ย Intย { returnย aย *ย b }
  • 15.
    Function์˜ Function ๋ฐ˜ํ™˜ โ€ขFunction์„ Returnํ•˜๋Š” Function funcย stepForward(_ย input:ย Int)ย โ€>ย Intย { returnย inputย +ย 1 } funcย stepBackward(_ย input:ย Int)ย โ€>ย Intย { returnย inputย โ€ 1 } funcย chooseStepFunction (backward:ย Bool)ย โ€>ย (Int)ย โ€>ย Intย { returnย backwardย ?ย stepBackwardย :ย stepForward } varย currentValueย =ย 3 letย moveNearerToZeroย =ย chooseStepFunction(backward:ย currentValueย >ย 0) whileย currentValueย !=ย 0ย { print("(currentValue)...ย ") currentValueย =ย moveNearerToZero(currentValue) } print("zero!") +3ย ์ด๋ฉด :ย 3,ย 2,ย 1,ย zero! โ€3ย ์ด๋ฉด :ย โ€3,ย โ€2,ย โ€1,ย zero!
  • 16.
    Function์•ˆ์˜ Function โ€ข Nestedย Function funcย chooseStepFunction(backward:ย Bool)ย โ€>ย (Int)ย โ€>ย Intย { funcย stepForward(input:ย Int)ย โ€>ย Intย {ย returnย inputย +ย 1ย } funcย stepBackward(input:ย Int)ย โ€>ย Intย {ย returnย inputย โ€1ย } returnย backwardย ?ย stepBackwardย :ย stepForward } varย currentValueย =ย โ€4 letย moveNearerToZeroย =ย chooseStepFunction(backward:ย currentValueย >ย 0) whileย currentValueย !=ย 0ย { print("(currentValue)...ย ") currentValueย =ย moveNearerToZero(currentValue) } print("zero!") +3ย ์ด๋ฉด :ย 3,ย 2,ย 1,ย zero! โ€3ย ์ด๋ฉด :ย โ€3,ย โ€2,ย โ€1,ย zero!
  • 17.
    o ๋‹ค์Œ์˜ ์„ฑ์ ์ฒ˜๋ฆฌ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค(1์ฐจ์›๋ฐฐ์—ด, ์ •๋ ฌ, ํƒ์ƒ‰ ๋ฒ„์ „) - ๋‹ค์Œ์˜ ํ™”๋ฉด์— ์˜ํ•ด ๋™์ž‘ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌํ˜„ํ•˜์‹œ์˜ค. (0 ์ข…๋ฃŒ๊ฐ€ ์ž…๋ ฅ๋ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต) * 1๋ฐ˜ ์„ฑ์ ์ฒ˜๋ฆฌ ํ”„๋กœ๊ทธ๋žจ(1๋ฐ˜ ์ •์› 10๋ช…, ๊ฐ 100์  ๋งŒ์ ) 1. ๊ตญ์–ด์„ฑ์  ์ž…๋ ฅ 2. ์˜์–ด์„ฑ์  ์ž…๋ ฅ 3. ์ˆ˜ํ•™์„ฑ์  ์ž…๋ ฅ 4. ๊ฐ ๊ณผ๋ชฉ์˜ ํ‰๊ท ์„ ์ถœ๋ ฅํ•˜์‹œ์˜ค(์ถœ๋ ฅ ์˜ˆ: ๊ตญ์–ด 34์ , ์˜์–ด 75์ , ์ˆ˜ํ•™ 56์ ) 5. ๊ฐ ๊ณผ๋ชฉ์˜ ์ตœ๊ณ ์ ์„ ์ถœ๋ ฅํ•˜์‹œ์˜ค(์ถœ๋ ฅ ์˜ˆ : ๊ตญ์–ด 79์ , ์˜์–ด 89์ , ์ˆ˜ํ•™ 82์ ) 6. ๊ฐ ๊ณผ๋ชฉ์˜ ์ตœ์ €์ ์„ ์ถœ๋ ฅํ•˜์‹œ์˜ค(์ถœ๋ ฅ ์˜ˆ : ๊ตญ์–ด 39์ , ์˜์–ด 39์ , ์ˆ˜ํ•™ 32์ ) 7. ๊ฐ ๊ณผ๋ชฉ์˜ ์ตœ๊ณ ์ ์ˆ˜์˜ ํ•™์ƒ๋ฒˆํ˜ธ๋ฅผ ์ถœ๋ ฅํ•˜์‹œ์˜ค(์ถœ๋ ฅ ์˜ˆ : ๊ตญ์–ด 1๋ฒˆ, ์˜์–ด 5์ , ์ˆ˜ํ•™ 9์ ) 8. ๊ฐ ๊ณผ๋ชฉ์˜ ์ ์ˆ˜๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•˜์—ฌ ์ถœ๋ ฅํ•˜์‹œ์˜ค 0. ์ข…๋ฃŒ ์ž…๋ ฅ :____ Report