Β ν¨μ(Function)λ λλΆλΆμ νλ‘κ·Έλλ° μΈμ΄μμ μ§μνλ κ°λ μΌλ‘ νλ‘κ·Έλ¨μ μ€ν κ³Όμ μ€μμ λ 립μ μΌλ‘ μ²λ¦¬λ μ μλ λΆλΆμ λΆλ¦¬νμ¬ κ΅¬μ‘°νν κ°μ²΄λ₯Ό μλ―Ένλ€. μ¦ μΈλΆμ μμ‘΄νλ λΆλΆ μμ΄ ν λΌμ΄ λΆλ¦¬ ν μ μλ μ€ν λ¨μλ₯Ό μΌμ’ μ μΊ‘μμ²λΌ ν¬μ₯ν΄ λμ κ²μ΄λ€.
Β μ€μννΈλ ν¨μν νλ‘κ·Έλλ°μ ν¨λ¬λ€μμ μ±ννκ³ μλ μΈμ΄μ΄λ―λ‘ ν¨μν νλ‘κ·Έλλ°μ νΉμ±μ μ΄ν΄νλ κ²μ λ§€μ° μ€μνλ€.
Β λ€λ₯Έ μΈμ΄λ€κ³Ό λ§μ°¬κ°μ§λ‘ ν¨μλ μΌλ°ν¨μμ μ¬μ©μ μ μ ν¨μλ‘ λλ μ μλ€. μΌλ°ν¨μλ νλ‘κ·Έλλ° μΈμ΄λ νλ μμν¬ μμ€μμ μ 곡νλ ν¨μλ‘ κΈ°λ³Έμ μΈ λ°μ΄ν°μ μ²λ¦¬λ μ°μ° λ±μ μννκΈ° μν λͺ©μ μΌλ‘ μ¬μ©λλ€. λνμ μΌλ‘ μΆλ ₯ν¨μμΈ print()κ° μλ€.
Β κ·Έλ¬λ μ€μ λ‘ κ°λ°μ νλ€λ³΄λ©΄ μ¬μ©μκ° μνλ κΈ°λ₯μ΄ μμ κ²μ΄λ€. μλ₯Ό λ€μ΄ 1λΆν° 10κΉμ§λ§ λνλ ν¨μ λ±, μ΄λ¬ν κ²λ€μ μ¬μ©μκ° μ§μ λ§λ€μ΄ μ£Όμ΄μΌ νλλ° μ΄λ° ν¨μλ₯Ό μ¬μ©μ μ μ ν¨μλΌ νλ€.
Β νλ‘κ·Έλλ°μμ ν¨μλ νμ μμλ μλμ§λ§ ν¨μκ° μ€μν μ΄μ λ λ€μκ³Ό κ°λ€.
- λμΌν μ½λκ° μ¬λ¬ κ³³μμ μ¬μγ γ λ λ μ΄λ₯Ό ν¨μννλ©΄ μ¬μμ±ν νμ μμ΄ ν¨μ νΈμΆλ§μΌλ‘ μ²λ¦¬ν μ μλ€.
- μ 체 νλ‘μΈμ€λ₯Ό νλμ μμ€ μ½λμμ μ°μμ μΌλ‘ μμ±νλ κ²λ³΄λ€ κΈ°λ₯ λ¨μλ‘ ν¨μννλ©΄ κ°λ μ±μ΄ μ’μμ§κ³ , μ½λμ λ‘μ§μ μ΄ν΄νκΈ° μ½λ€.
- λΉμ¦λμ€ λ‘μ§μ λ³κ²½ν΄μΌ ν λ ν¨μ λ΄λΆλ§ μμ νλ©΄ λλ―λ‘ μ μ§λ³΄μκ° μ©μ΄νλ€.
Β ν¨μλ₯Ό μ μνλ ν€μλλ funcμ΄κ³ ν¨μμ μ΄λ¦μ μ¬μ©ν μ μλ λ¬Έμλ€μ μμ΄λ μ«μ, νμ, λ°μ΄λ리 μ΄λ―Έμ§ λ±μΌλ‘ λ€μνμ§λ§ 첫 κΈμλ λ°λμ μμ΄ λλ μΈλλ°(_)λ‘ μμν΄μΌ νλ€.
Β λ€μμ ν¨μλ₯Ό μ€μ λ‘ μ μνλ λͺ¨μ΅μ΄λ€.
// 1. 맀κ°λ³μμ λ°νκ°μ΄ λͺ¨λ μλ ν¨μ
func printHello(){
print("μλ
νμΈμ!")
}
// 2. 맀κ°λ³μκ° μμ§λ§ λ°νκ°μ μλ ν¨μ
func sayHello() -> String {
let returnValue = "μλ
"
return returnValue
}
// 3. 맀κ°λ³μλ μμΌλ λ°νκ°μ΄ μλ ν¨μ
func printHelloWithName(name: String){
print("\(name)λ, μλ
νμΈμ")
}
//ν¨μ νΈμΆμ μΈμ λ μ΄λΈ(name: )μ΄ μμ κ²½μ° μ»΄νμΌ μ€λ₯κ° λ°μν¨
print(printHelloWithName(name: "SJ")) // SJλ, μλ
νμΈμ μΆλ ₯
// 4. 맀κ°λ³μμ λ°νκ°μ΄ λͺ¨λ μλ ν¨μ
func add(firstNum: Int, secondNum: Int) -> Int {
var result = firstNum + secondNum
return result
}
print(add(firstNum: 4, secondNum: 5)) //κ²°κ³Ό: 9
Β ν¨μμ ννλ λ€λ₯Έ μΈμ΄λ€κ³Ό λ§μ΄ μ μ¬νμ§λ§ νΈμΆν λ ν° μ°¨μ΄λ₯Ό λκΌλ€. printHello() ν¨μμ΄λ¦μ ()λ₯Ό λΆμ¬ ν¨μλ₯Ό νΈμΆνλ κ²μ λ€λ₯Έ μΈμ΄λ€κ³Ό λΉμ·νμ§λ§ ν¨μμ 맀κ°λ³μκ° μλ κ²½μ°, μ μ½λ 3λ²μμ printHelloWithName(name: "νκΈΈλ") μ΄λ κ² name: μ΄λΌλ μΈμλ μ΄λΈμ΄ μμ΄μΌλ§ μ»΄νμΌ μ€λ₯ μμ΄ ν¨μκ° μ μ νΈμΆλλ€.
Β μΈμλ μ΄λΈμ ν¨μμ νΈμΆ μ μΈμκ°μ ꡬλΆνκΈ° μν΄ μ¬μ©λλ λ μ΄λΈμ΄λ€. μ€μννΈμμ μΈμκ°μ΄ μλ ν¨μλ₯Ό νΈμΆν λμλ μΈμκ° μμ κΈ°λ³Έμ μΌλ‘ μΈμ λ μ΄λΈμ λΆμ¬μ νΈμΆν΄ μ£Όμ΄μΌ νλ€βοΈ
Β μΈμ λ μ΄λΈ μ¬μ©μ λͺ νν¨κ³Ό νΈλ¦¬ν¨λ³΄λ€λ μ½λκ° λμ΄λλ λΆνΈν¨μ΄ λ무λλ ν¬λ€. κ·Έλ¬λ μ΄λ° λ¬Έλ²μ΄ μ‘΄μ¬νλ μ΄μ λ μ€μννΈκ° λμ€κΈ° μ΄μ μ μμλ μ€λΈμ ν°λΈ-CμΈμ΄ λλ¬Έμ΄λ€. μ€λΈμ ν°λΈ-Cκ° μ¬μ©νκ³ μλ λ¬Έλ² μ€νμΌκ³Ό νΈνμ±μ κ°μ§κΈ° μν΄ μ¬μ©ν κ²μ΄ κ°μ₯ ν° μ΄μ λΌκ³ ν μ μλ€.
Β ν¨μλ λ°λμ νλμ κ°λ§μ λ°νν΄μΌ νλ€. μ¬λ¬κ°μ κ°μ λ°νν΄μΌ νλ€λ©΄, μ΄ κ°λ€μ μ§λ¨ μλ£νμ λ΄μ λ°νν΄μΌ νλ€. λμ λ리λ λ°°μ΄, νν, ꡬ쑰체, ν΄λμ€ λ± μ¬λ¬κ°μ λ³μλ₯Ό λ΄μ μ μλ κ°μ²΄μ΄λ€. μ¬κΈ°μ νμ©λκ° λμΌλ©΄μ λ€λ₯Έ μλ£νκ³Ό μ°¨μ΄κ° μλ ννμ λ€λ£¬λ€.
func getUserInfo() -> (Int, Character, String) {
//λ°μ΄ν° νμ
μ΄ StringμΌλ‘ μΆλ‘ λλ κ²μ λ°©μ§νκΈ° μν΄ νμ
μ΄λ
Έν
μ΄μ
μ μΈ
let gender: Character = "M"
let height = 180
let name = "κΌΌκΌΌν μ¬μμ¨"
return (height, gender, name)
}
var uInfo = getUserInfo()
uInfo.0// "180"
uInfo.1// "M"
uInfo.2// "κΌΌκΌΌν μ¬μμ¨"
var (a, b, c) = getUserInfo()
a = 190
b = "W"
c = "sssss"
print(a, b, c) // 190 W sssss
Β ν¨μκ° μ¬λ¬κ°μ κ°μ λ°νν λ μ΄λ₯Ό κ°λ¨νκ² λ¬ΆκΈ° μν΄ μ¬μ©λλ κ²μ΄ ννμ΄μ§λ§, νΉμ νν νμ μ΄ μ¬λ¬ κ³³μμ μ¬μ©λ κ²½μ°μλ νμ μ리μ΄μ€λ₯Ό ν΅ν΄ μλ‘μ΄ μΆμ½ν νμ μ μ μνλ κ²μ΄ μ’λ€.
typealias infoResult = (h: Int, g: Character, n: String)
func getUserInfo() -> (Int, Character, String) {
//λ°μ΄ν° νμ
μ΄ StringμΌλ‘ μΆλ‘ λλ κ²μ λ°©μ§νκΈ° μν΄ νμ
μ΄λ
Έν
μ΄μ
μ μΈ
let gender: Character = "M"
let height = 180
let name = "κΌΌκΌΌν μ¬μμ¨"
return (height, gender, name)
}
var uInfo = getUserInfo()
info.h // 180
info.g // "M"
info.n // "κΌΌκΌΌν μ¬μμ¨"
Β typealiasλ₯Ό μ μνκ³ λλ©΄ μ»΄νμΌλ¬λ μλ‘μ΄ μ΄λ¦μ νμ ννκ³Ό λμΌνκ² κ°μ£Όνλ€. λ¨ νμ μ리μ΄μ€λ μ΄λκΉμ§λ νμ μ λν μλ‘μ΄ ννμ μ μνλ μν μ νκΈ° λλ¬Έμ νμ μ΄ μλ ꡬ체μ μΈ κ°μ μμμ²λΌ μ¬μ©ν μ λ μλ€.
Β μ΄μ²λΌ ν¨μμ ννμ νμ©νλ©΄ μ½λλ₯Ό μ½κ² μ²λ¦¬ν μ μμ΄ νμ©λκ° λλ€.
Β μ€μννΈλ κΈ°λ³Έμ μΈ λ§€κ°λ³μμ νΈμΆμ΄ λ€λ₯Έ μΈμ΄μ λ€λ₯΄κ³ , μ΄μΈμλ νΉλ³ν κΈ°λ₯λ€μ μ μ§ μκ² κΈ°μ§κ³ μλ€.
Β μ€μννΈμμ ν¨μλ₯Ό μ μν λ 맀κ°λ³μλ₯Ό μ©λμ λ°λΌ λ κ°μ§λ‘ λΆλ¦¬ν μ μλ€. μΈλΆ 맀κ°λ³μλ ν¨μλ₯Ό νΈμΆν λ μΈμκ°μ λν λ μ΄λΈ μν μ νλ©°, λμμ ν¨μμ μλ³μ μΌλΆλ₯Ό μ¬μ©λκΈ°λ νλ€. λ°λ©΄ λ΄λΆ 맀κ°λ³μλ μ λ ₯λ μΈμκ°μ ν¨μ λ΄λΆμμ μ°Έμ‘°νκΈ° μν΄ μ¬μ©νλ λ³μμ΄λ€.
//μΈλΆ 맀κ°λ³μλ₯Ό μ§μ νλ λ°©λ²
func ν¨μ μ΄λ¦(<μΈλΆ 맀κ°λ³μλͺ
><λ΄λΆ 맀κ°λ³μλͺ
>:<νμ
>,<μΈλΆ 맀κ°λ³μλͺ
> <λ΄λΆ 맀κ°λ³μλͺ
>:<νμ
>...) {
//ν¨μμ λ΄μ©
}
//κΈ°λ³Έ ν¨μ
func hello(name: String, msg: String){
print("\(name)λ, \(msg)")
}
print(name: "νκΈΈλ", msg:"μλ
")
//μΈλΆ 맀κ°λ³μ 1κ°λ§ μΆκ°
func printHello(name: String, welcomeMessage msg: String){ //μΈλΆ 맀κ°λ³μ: to, welcomeMessage
print("\(name)λ, \(msg)")
}
print(name: "νκΈΈλ", welcomeMessage:"μλ
")
//μΈλΆ 맀κ°λ³μ μ λΆ μΆκ°
func printHello(to name: String, welcomeMessage msg: String){ //μΈλΆ 맀κ°λ³μ: to, welcomeMessage
print("\(name)λ, \(msg)")
}
printHello(to: "νκΈΈλ", welcomeMessage: "μλ
")
//맀κ°λ³μ μλ΅ μΈλλ°(_) -> μ€μννΈμμ μΈλλ°μ λ»μ 'λ¬Έλ²μ μ μ©νλ μ¬μ©νμ§ μκ³ μλ΅νκ² λ€'λΌλ μλ―Έ
func printHello(_ name: String, _ msg: String){ //μΈλΆ 맀κ°λ³μ: to, welcomeMemssage
print("\(name)λ, \(msg)")
}
printHello("νκΈΈλ", "μλ
")
func printHello(to name: String, _ msg: String){ //μΈλΆ 맀κ°λ³μ: to, welcomeMemssage
print("\(name)λ, \(msg)")
}
printHello(to: "νκΈΈλ", "μλ
")
func printHello(_ name: String, welcomeMessage msg: String){ //μΈλΆ 맀κ°λ³μ: to, welcomeMemssage
print("\(name)λ, \(msg)")
}
printHello("νκΈΈλ", welcomeMessage: "μλ
")
Β μ μ½λμμ nameκ³Ό msgλΌλ λ κ°μ 맀κ°λ³μλ₯Ό μ¬μ ν μ¬μ©νμ§λ§ μΈλΆ 맀κ°λ³μμΈ to, welcomeMessageκ° μΆκ°λλ©΄μ nameκ³Ό msgλ λ΄λΆ 맀κ°λ³μκ° λμλ€. μΈλΆ 맀κ°λ³μκ° μ μλμ§ μμμ λλ name, msgλ₯Ό 맀κ°λ³μλ‘ μ¬μ©νμ§λ§ μΈλΆ 맀κ°λ³μκ° μΆκ°λ μνμ΄λ―λ‘ μ΄λ₯Ό μ¬μ©νμ¬ νΈμΆν΄μΌ νλ€.
Β μ μ½λμμ (_)λ₯Ό ν΅ν΄ 맨 μμ 맀κ°λ³μλ₯Ό μλ΅ν ꡬ쑰λ μ½μ½μ ν°μΉ νλ μμν¬μμ κ΅μ₯ν λ§μ΄ μ¬μ©λλ λ°©μμ΄λ€.
Β μ€μννΈμ νΉμ§μ΄λΌ ν μ μλ μΈλΆ 맀κ°λ³μλͺ κ³Ό λ΄λΆ 맀κ°λ³μλͺ μ λ΄λΆμ μΈλΆμμ λ°λΌλ³΄λ μλ―Έκ° λ¬λΌ μΈλΆμ λ΄λΆλ‘ ꡬλΆνμ¬ μ¬μ©ν νμκ° μμ λ νΉμ λ΄λΆ 맀κ°λ³μλͺ μ μΈλΆλ‘ 곡κ°νκΈ°λ₯Ό μμΉ μμ λ μ¬μ©λλ€. κ·Έλ°λ° μ΄λ° μ΄μ 보λ€λ κ°μ₯ ν° μ΄μ λ μ€λΈμ ν°λΈ-Cμμ νΈνμ±βοΈ λλ¬Έμ΄λ€.
μΌλ°μ μΌλ‘ ν¨μλ 미리 μ μλ νμκ³Ό κ°μμ λ§λ μΈμκ°λ§γ΄ μ²λ¦¬νμ§λ§, λμ λ°λΌμλ κ°λ³μ μΈ κ°μμ μΈμκ°μ μ λ ₯λ°μμΌ ν λλ μλ€. μ€μννΈ μμ μΈμκ°μ μ λ ₯ κ°μλ₯Ό μ μνμ§ μλλ‘ νλ ν¨μ μ μ νμμ μ 곡νλλ°, μ΄λ₯Ό μν΄μ ν¨μλ₯Ό μ μν λ 맀κ°λ³μλͺ λ€μμ '...' μ°μ°μλ₯Ό μΆκ°νλ©΄ λλ€.
//κ°λ³ μΈμλ₯Ό 맀κ°λ³μλ‘ λ°λ ν¨μ μμ
func avg(score: Int...) -> Double {
var total = 0 // μ μ ν©κ³
for r in score { // λ°°μ΄λ‘ μ
λ ₯λ κ°λ€μ μν νμνλ©΄μ μ μλ₯Ό ν©μ°
total += r
}
return (Double(total) / Double(score.count)) // λ°νκ°μ΄ Doubleνμ΄λ―λ‘ μ΄μ κ³Ό κ³Όλͺ©μ μ Doubleλ‘ νλ³ν, νκ· κ°μ ꡬν΄μ λ°ν
}
print(avg(score: 10, 20, 30, 40)) // 25.0
Β ν¨μμ 맀κ°λ³μμλ μ μ©ν κΈ°λ₯μ΄ μλλ°, λ°λ‘ κΈ°λ³Έκ°μ μ§μ ν μ μλ κ²μ΄λ€. μ€μννΈλ ν¨μλ₯Ό νΈμΆν λ λ°λμ μ§μ μ λ ₯λ°μμΌ νλ κ°μ΄ μλλΌλ©΄ μΈμκ°μ μλ΅ν μ μλλ‘, ν¨μ μ μ μ 맀κ°λ³μμ κΈ°λ³Έκ°μ μ§μ ν μ μλ λ¬Έλ²μ μ 곡νλ€.
func echo(message: String, newline: BOol = true) {
if newline == true {
print(message, true)
} else {
print(message, false)
}
}
echo(message: "μλ
") // μλ
true
echo(message: "μλ
", newline: true) // μλ
true
echo(message: "μλ
", newline: false) // μλ
false
Β μ§κΈκΉμ§ ν¨μμμ 맀κ°λ³μλΌλ λ¨μ΄λ₯Ό μ¬λ¬ λ² μ¬μ©νλ€. λ³μλ μλ λ§μλλ‘ κ°μ μμ ν μ μμ΄μΌ νμ§λ§, 맀κ°λ³μμ μ λ ₯λ μΈμκ°μ ν¨μ λ΄μμ μμ νλ €κ³ νλ©΄ μ€λ₯κ° λ°μνλ€. μ΄κ²μ μ€μννΈμμ ν¨μμ μΈμκ°μ΄ λ³μκ° μλλΌ μμλ‘ μ μλμκΈ° λλ¬ΈμΌλ‘, μ νν ννμ 맀κ°μμλΌκ³ ν΄μΌ λ§λ€.
func incrementBy(base: Int) -> Int { //μ€λ₯!! -> baseλ λ³μκ° μλ μμμ
base+=1
return base
}
//μ€λ₯ ν΄κ²°
func incrementBy(base: Int) -> Int {
var base = base
base+=1
return base
}
Β μ μ½λ 첫 λ²μ§Έ ν¨μμμ 맀κ°λ³μλ₯Ό λ°κΎΈλ €κ³ νμ¬ μ€λ₯κ° λ°μνλ κ²μ λ³Ό μ μλ€. κ·Έλ¬λ μλ¬λ₯Ό ν΄κ²°νκΈ° μν΄ λ§€κ°λ³μμ λμΌν μ΄λ¦μΌλ‘ λ³μλ₯Ό μ μνκ³ λ§€κ°λ³μμ κ°μ λμ ν΄ μ£Όμλ€. μ΄λ κ² λμΌν μ΄λ¦μ λ³μλ₯Ό μμ±ν΄μ κ°μ λμ νλ©΄ μ΄νλ‘ baseλΌλ μ΄λ¦μ νΈμΆμ λͺ¨λ 맀κ°λ³μ baseκ° μλ λ³μ baseλ₯Ό κ°λ₯΄ν€κ² λλ€.
var cnt = 30
func autoIncrement(value: Int) -> Int {
var value = value
value += 1
return value
}
print(autoIncrement(value: cnt)) // ν¨μ λ΄λΆμ value λ³μ κ° : 31
print(cnt) //μΈλΆμμ μ μλ cnt λ³μκ° : 30
Β μ μ½λμμ autoIncrement(value:)λ μ λ ₯λ μΈμκ°μ 1λ§νΌ μ¦κ°μν¨ λ€μ λ°ννλ€. μ΄ λ μΈμκ° μ체λ₯Ό μμ ν μ μλλ‘ λ§€κ°λ³μ valueλ λ΄λΆμ μΌλ‘ λ³μλ‘ μΉνλκ³ 30μ΄ ν λΉλ cnt λ³μλ₯Ό μΈμκ°μΌλ‘ μ λ ₯νμ¬ ν¨μλ₯Ό μ€ννλ©΄ λ΄λΆμμ λ³κ²½λ value λ³μμ κ°μ 31μ΄ λλ€. κ·Έλ¬λ μΈμκ°μΌλ‘ μ¬μ©λ cnt λ³μ μ체μ κ°μ μλ¬΄λ° λ³νκ° μμ΄μ μ¬μ ν 30μ΄λ€. μ΄λ μΈλΆμμ μ λ ₯ν μΈμκ°μ΄ μ§μ ν¨μ λ΄λΆλ‘ μ λ¬λλ κ²μ΄ μλλΌ κ·Έ κ°μ΄ 볡μ¬λ λ€μ μ λ¬λκΈ° λλ¬Έμ΄λ€. λ€μ λ§ν΄, μΈμκ°μΌλ‘ μ λ¬λ cntμ 맀κ°λ³μ valueλ μλ‘ λ€λ₯Έ λ³μβοΈμ΄λ€.
Β νμ§λ§ ν¨μμμλ λ΄λΆμμ μμ λ μΈμκ°μ΄ μΈλΆκΉμ§ μν₯μ λ―ΈμΉ μ μλ λ°©λ²μ΄ μ‘΄μ¬νλ€. μ΄λ₯Ό μν΄ inout ν€μλλ₯Ό μ¬μ©νλ€. μ΄ ν€μλλ μ€μννΈμμ ν¨μ λ΄λΆμμ μμ λ μΈμκ°μ ν¨μ μΈλΆκΉμ§ μ λ¬ ν μ μλ€.
//inout ν€μλ μ¬μ© -> inoutν€μλκ° λΆμ 맀κ°λ³μλ μΈμκ°μ΄ μ λ¬λ λ
//μλ‘μ΄ λ΄λΆ μμλ₯Ό λ§λ€μ΄ 볡μ¬νλ λμ μΈμκ° μ체λ₯Ό ν¨μ λ΄λΆλ‘ μ λ¬
//μ¬μ€ inout ν€μλμ μ νν μλ―Έλ κ° μ체λ₯Ό μ λ¬νλ κ²μ΄ μλλΌ
//κ°μ΄ μ μ₯λ λ©λͺ¨λ¦¬ μ£Όμλ₯Ό μ λ¬ν¨
func foo(paramCount: inout Int) -> Int{
paramCount += 1
return paramCount
}
var count = 30
print(foo(paramCount: &count)) //31 &μ£Όμ μ°μ°μ
print(count) // 31
Β inout ν€μλκ° λΆμ 맀κ°λ³μλ μΈμκ°μΌλ‘ μ¬μ©λ λ³μμ λμΌν κ°μ²΄μ΄λ€. λ¨μν κ°λ§ λκ°μ 볡μ¬λ λ³μμλ λ€λ₯΄λ€.
Β inout ν€μλμ μ νν μλ―Έλ κ° μ체λ₯Ό μ λ¬νλ κ²μ΄ μλλΌ κ°μ΄ μ μ₯λ λ©λͺ¨λ¦¬ μ£Όμλ₯Ό μ λ¬νλ€λ μλ―Έμ΄λ€. μΈμκ°μ ν λΉλ λ°μ΄ν°κ° μ μ₯λμ΄ μλ λ©λͺ¨λ¦¬ μ£Όμλ₯Ό ν¨μμ μ λ¬νλ κ²μ΄λ€. cμΈμ΄μ ν¬μΈν° κ°λ μ΄λΌκ³ λ³Ό μ μλ€. μ¬κΈ°μ μ€μν κ°μ inout ν€μλκ° μ¬μ©λ ν¨μλ νΈμΆ μ μΈμκ°μ μ λ¬ν λ κ°μ΄ μλ μ£Όμλ₯Ό μ λ¬ν΄μΌ νλ€βοΈ
Β λ°λΌμ Β μ°μ°μλ₯Ό λΆμ¬ print(foo(paramCount: &count)) μ½λκ° μμ±λ κ²μ΄λ€.
Β μ΄μ²λΌ μ£Όμλ₯Ό μ λ¬νλ κ²μ νλ‘κ·Έλλ° μ©μ΄λ‘ 'μ°Έμ‘°(Reference)μ μν μ λ¬'μ΄λΌκ³ νκ³ , κΈ°μ‘΄μ²λΌ κ°λ§ 볡μ¬νμ¬ μ λ¬νλ κ²μ 'κ°μ μν μ λ¬' μ΄λΌ νλ€.
Β νλ‘κ·Έλλ°μμ λ³μλ μμλ μμ‘΄ν μ μλ μμμ λΆμ¬ λ°λλ° μ΄λ₯Ό λ³μμ μμ‘΄λ²μ, μ€μ½ν(Scope)λΌκ³ νλ€.
Β νλ‘κ·Έλλ° μΈμ΄μμ λ³΄ν΅ λ³μλ₯Ό μ μ λ³μ(Global)μ μ§μ λ³μ(Local)λ‘ λλλ€. μ μ λ³μλ νλ‘κ·Έλ¨ λ΄ λͺ¨λ μμΉμμ μ°Έμ‘°ν μ μκ³ νΉλ³ν κ²½μ°κ° μλλΌλ©΄ νλ‘κ·Έλ¨μ΄ μ’ λ£λκΈ° μ κΉμ§ μμ λμ§ μλλ€. λ°λ©΄ μ§μλ³μλ νΉμ λ²μ λ΄μμλ§ μ°Έμ‘°νκ±°λ μ¬μ©ν μ μλ λ³μλ₯Ό μλ―Ένλ€. 쑰건문 ν¨μ ꡬ문 λ± νΉμ λΈλ‘({}) λ΄μμ μ μΈλ λ³μλ λͺ¨λ μ§μ λ³μμ΄λ©° μ μΈλ λΈλ‘ λ²μ μμμλ§ μ΄ λ³μλ₯Ό μ°Έμ‘°ν μ μλ€. μ§μ λ³μλ μ μΈλ λΈλ‘μ΄ μ€νλλ©΄μ μκ²Όλ€κ° μ€ν λΈλ‘μ΄ λλλ©΄ μ κ±°λλλ° μ΄λ₯Ό λ³μμ μλͺ μ£ΌκΈ°(Life Cycle)μ΄λΌκ³ νλ€.