Skip to content

Latest commit

ย 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
ย 
ย 

README.md

ํ•จ์ˆ˜(Function)

ํ•จ์ˆ˜๋ฅผ ์™œ ์‚ฌ์šฉํ• ๊นŒ?

  1. ๋ฐ˜๋ณต๋˜๋Š” ๋™์ž‘์„ ๋‹จ์ˆœํ™”ํ•ด์„œ ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค
  2. ์ฝ”๋“œ๋ฅผ ๋…ผ๋ฆฌ์  ๋‹จ์œ„๋กœ ๊ตฌ๋ถ„์ด ๊ฐ€๋Šฅํ•˜๋‹ค
  3. ์ฝ”๋“œ ๊ธธ์ด๊ฐ€ ๊ธด ๊ฒƒ์„ ๋‹จ์ˆœํ™”ํ•ด์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค
  4. ๋ฏธ๋ฆฌ ํ•จ์ˆ˜๋ฅผ ์ž˜ ๋งŒ๋“ค์–ด ๋†“์œผ๋ฉด, ๊ฐœ๋ฐœ์ž๋Š” ์‚ฌ์šฉ๋งŒ ํ•˜๋ฉด๋œ๋‹ค
// name: ํŒŒ๋ผ๋ฏธํ„ฐ
func saySomething(name: String) {
	print("hello \(name)")
}

saySomething(name: "์‹ ์Šน์žฌ")

// ์•„์›ƒ ํ’‹์ด ์žˆ๋Š” ๊ฒฝ์šฐ~
func sayHello(name: "์‹ ์Šน์žฌ") -> String {
	return "hello \(name)"
}

  • Argument Label
func printName1(firstName name: String) {
	print("๋‚˜์˜ ์ด๋ฆ„์€ \(name)์ž…๋‹ˆ๋‹ค.")
}

printName1(first: "๋‰ดํ„ด")

๋ ˆ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ• ๋•Œ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ๋ฌด์—‡์„ ์š”๊ตฌํ•˜๋Š”์ง€ ์•Œ๋ ค์ค„ ์ˆ˜ ์žˆ๋‹ค.


  • ์™€์ผ๋“œ ์นด๋“œ ํŒจํ„ด
func addPrintFunction(_ firstNum: Int, _ secondNum: Int) {
	print(firstNum + secondNum)
}

addPrintFunction(1, 2)

ํ•จ์ˆ˜์—์„œ์˜ ์™€์ผ๋“œ ์นด๋“œ ํŒจํ„ด์€ ํ•จ์ˆ˜๋ช…๋งŒ๋ณด๊ณ ๋„ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ญ˜๋„ฃ์–ด์•ผ ํ• ์ง€ ์•Œ๋•Œ ์“ฐ๋ฉด ์œ ์šฉํ•˜๋‹ค.


  • ๊ฐ€๋ณ€ ํŒŒ๋ผ๋ฏธํ„ฐ
func arithmeticAverage(_ numbers: Double...) -> Double {
	var total = 0.0
	for number in numbers {
		total += number
	}
	return total / Double(numbers.count)
}

๊ฐ€๋ณ€ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•˜๋‚˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ 2๊ฐœ ์ด์ƒ์˜ argument๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฐฐ์—ด ํ˜•ํƒœ๋กœ ์ „๋‹ฌ๋˜๋ฉฐ ๊ธฐ๋ณธ๊ฐ’์€ ๊ฐ€์งˆ ์ˆ˜ ์—†๋‹ค.


  • ์ค‘์ฒฉ ํ•จ์ˆ˜ ์‚ฌ์šฉํ•˜๊ธฐ
func chooseStepFunction(backward: Bool, value: Int) -> Int {
	func stepForward(input: Int) -> Int {
		return input + 1
	}
	func stepBackward(input: Int) -> Int {
		return input - 1
	}
	if backward {
		return stepBackward(input: value)
	} else {
		return stepForward(input: value)
	}
}

์ค‘์ฒฉ ํ•จ์ˆ˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ œํ•œ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ ํ•˜๊ณ ์‹ถ์„๋•Œ ์“ด๋‹ค


  • ํ•จ์ˆ˜ ๊ฐ€๋ฆฌํ‚ค๊ธฐ
func doSomething() {
	print("hello world!")
}

var some = doSomething

some() // hello world!

// ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ์ฝค๋งˆ์—†์ด ์‚ฌ์šฉํ•˜๊ธฐ!
func printName1(firstName name: String) {
	print("๋‚˜์˜ ์ด๋ฆ„์€ \(name)์ž…๋‹ˆ๋‹ค.")
}

var some1: (String) -> () = printName1(first:)

  • ํ•จ์ˆ˜์˜ ์˜ค๋ฒ„๋กœ๋“œ(overload): ์˜์–ด๋กœ ๊ณผ์ ํ•˜๋‹ค๋ผ๋Š” ๋œป
func doSomething(value: Int){
	print(value)
}
func doSomething(value: Double){
	print(value)
}
func doSomething(value: String){
	print(value)
}

ํ•จ์ˆ˜์˜ ์˜ค๋ฒ„๋กœ๋”ฉ์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ๊ฐ™์€ ์„ฑ๊ฒฉ์˜ ํ•จ์ˆ˜๋ฅผ ๋‹ค๋ฃจ๊ธฐ๊ฐ€ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.


  • inout ํ‚ค์›Œ๋“œ: ํ•จ์ˆ˜์— ์ฐธ์กฐ๋ฅผ ์ „๋‹ฌํ•œ๋‹ค๋Š” ๊ฐœ๋…

๐Ÿ’ก ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด, ๋ณ€์ˆ˜๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ?

var num1 = 123 // ์ „์—ญ๋ณ€์ˆ˜
var num2 = 456 // ์ „์—ญ๋ณ€์ˆ˜

// a์™€ b๋ฅผ ๋ฐ”๊ฟ”๋ณด๋ ค๊ณ  ํ•˜๋Š” ํ•จ์ˆ˜
func swap(a: Int, b: Int) {
	a = b // a, b๋Š” ์ƒ์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์— ํ• ๋‹น๋ถˆ๊ฐ€!
	b = c
}

swap(a: num1, b: num2)

// inoutํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด a์™€ b๋ฅผ ๋ฐ”๊พธ๋Š” ํ•จ์ˆ˜
func swapNumbers(a: inout Int, b: inout Int) {
	var temp = a
	a = b
	b = temp
}

swapNumbers(a: &num1, b: &num2)

ํ•จ์ˆ˜๋‚ด์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ’ํƒ€์ž…์ด๊ณ  ์ž„์‹œ์ƒ์ˆ˜์ด๊ธฐ๋•Œ๋ฌธ์— ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€ ์›์น™์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. inout ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฐธ์กฐ(์›๋ณธ์˜ ์ฃผ์†Œ)๋ฅผ ์ง์ ‘ ํ•จ์ˆ˜์— ์ „๋‹ฌํ•˜๋ฉด ์œ„ ์ƒํ™ฉ์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Œ

(์ฃผ์˜ ํ• ์ ! ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉ์‹œ ๋ณ€์ˆ˜๋ฅผ ์ „๋‹ฌํ• ๋•Œ ๋ฐ˜๋“œ์‹œ ์— ํผ์„ผํŠธ & ๋ถ™์—ฌ์•ผ ํ•œ๋‹ค)


  • @attribute ํ‚ค์›Œ๋“œ: ์„ ์–ธ์ด๋‚˜ ํƒ€์ž…์— ์ถ”๊ฐ€์ •๋ณด ์ œ๊ณต
@discardableResult
func sayHelloString() -> String {
	print("ํ•˜์ด")
	return "์•ˆ๋…•ํ•˜์„ธ์š”"
}

_ = sayHelloString() // @discardableResult ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ ค๋ฉด
sayHelloString()

@discardableResult ๋Š” ์ด ํ•จ์ˆ˜์˜ ๋ฆฌํ„ด๊ฐ’์€ ์‚ฌ์šฉ์•ˆํ•  ์ˆ˜๋„ ์žˆ์–ด~ ๋ผ๋Š” ๋œป์ž„