πŸ¦… Swift

Functions

KiwiπŸ’» 2022. 6. 1. 20:20

ν•¨μˆ˜λŠ” νŠΉμ • κΈ°λŠ₯을 μ‹€ν–‰ν•˜κΈ° μœ„ν•œ μ½”λ“œμ˜ λ¬ΆμŒμ΄λ‹€. λ™μž‘μ— 따라 ν•¨μˆ˜μ— νŠΉμ • 이름을 μ„€μ • ν•  수 있으며 μž‘μ—…μ„ μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄ ν˜ΈμΆœν•  수 μžˆλ‹€.

ν•¨μˆ˜ μ •μ˜μ™€ 호좜 (Defining and Calling Functions)

ν•¨μˆ˜λ₯Ό μ •μ˜ν• λ•Œ μ„ νƒμ μœΌλ‘œ νŒŒλΌλ―Έν„°μ˜ 이름을 μ •ν•΄μ£Όμ–΄μ•Όν•œλ‹€. λ˜ν•œ 리턴 값도 μ •μ˜ν•  수 μžˆλ‹€. λͺ¨λ“  ν•¨μˆ˜λŠ” ν•¨μˆ˜μ˜ κΈ°λŠ₯을 λ‚˜νƒ€λ‚΄λŠ” 고유의 이름을 가지고 μžˆλ‹€. ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” ν˜ΈμΆœμ„ ν•΄μ•Όν•˜λ©° μ•„κ·œλ¨ΌνŠΈμ— 값을 λ„£μ–΄ μ£Όμ–΄μ•Ό ν•œλ‹€. μ•„κ·œλ¨ΌνŠΈλŠ” νŒŒλΌλ―Έν„°μ˜ μˆœμ„œμ™€ 항상 κ°™μ•„μ•Ό ν•œλ‹€.

ν•¨μˆ˜ νŒŒλΌλ―Έν„°μ™€ λ°˜ν™˜κ°’ (Function Parameters and Return Values)

SwiftλŠ” 맀우 μœ μ—°ν•œ νŒŒλΌλ―Έν„°μ™€ λ°˜ν™˜κ°’μ„ 가지고 μžˆλ‹€.

νŒŒλΌλ―Έν„°κ°€ μ—†λŠ” ν•¨μˆ˜ (Functions Without Parameters)

ν•¨μˆ˜λŠ” 항상 νŒŒλΌλ―Έν„°λ₯Ό μ •μ˜ν•˜μ§€ μ•Šμ•„λ„ λœλ‹€. 예제 μ½”λ“œλ₯Ό 보면 μž…λ ₯ μ½”λ“œκ°€ μ—†κΈ° λ•Œλ¬Έμ— 항상 같은 String을 λ°˜ν™˜ν•œλ‹€.

func sayHelloWorld() -> String {
    return "hello, world"
}
print(sayHelloWorld())
// Prints "hello, world"

μ—¬λŸ¬κ°œ νŒŒλΌλ―Έν„°κ°€ μžˆλŠ” ν•¨μˆ˜ (Functions With Multiple Parameters)

ν•¨μˆ˜λŠ” ν•¨μˆ˜μ˜ μ†Œκ΄„ν˜Έ 내에 콀마둜 κ΅¬λΆ„ν•˜μ—¬ μ—¬λŸ¬κ°œμ˜ μž…λ ₯ νŒŒλΌλ―Έν„°λ₯Ό κ°€μ§ˆ 수 μžˆλ‹€.

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!"

λ°˜ν™˜κ°’ μ—†λŠ” ν•¨μˆ˜ (Functions Without Return Values)

func greet(person: String) {
    print("Hello, \(person)!")
}
greet(person: "Dave")
// Prints "Hello, Dave!"

NOTE❗️
μ—„λ°€νžˆ λ§ν•˜λ©΄ greet(person:) ν•¨μˆ˜λŠ” λ°˜ν™˜κ°’μ„ μ •μ˜ν•˜μ§€ μ•Šμ•˜μ§€λ§Œ μ—¬μ „νžˆ λ°˜ν™˜κ°’μ΄ μžˆλ‹€. λ°˜ν™˜ νƒ€μž…μ΄ μ •μ˜λ˜μ§€ μ•Šμ€ ν•¨μˆ˜λŠ” Void νƒ€μž…μ˜ νŠΉλ³„ν•œ κ°’(λΉˆνŠœν”Œ())을 λ°˜ν™˜ν•œλ‹€.

μ—¬λŸ¬κ°œμ˜ λ°˜ν™˜κ°’μ΄ μžˆλŠ” ν•¨μˆ˜ (Functions with Multiple Return Values)

μ—¬λŸ¬κ°œμ˜ 값을 λ°˜ν™˜ν•˜κΈ° μœ„ν•΄ ν•¨μˆ˜μ˜ λ°˜ν™˜ νƒ€μž…μœΌλ‘œ νŠœν”Œ νƒ€μž…μ„ μ‚¬μš©ν•  수 μžˆλ‹€.

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)
}

ν•¨μˆ˜ 인자 라벨과 νŒŒλΌλ―Έν„° 이름 (Function Argument Labels and Parameter Names)

ν•¨μˆ˜μ˜ νŒŒλΌλ―Έν„°μ— 고유의 이름을 λΆ€μ—¬ν•  수 μžˆλ‹€.

μ•„κ·œλ¨ΌνŠΈ 라벨 지정 (Specifying Argument Labels)

곡백으둜 κ΅¬λΆ„ν•˜μ—¬ νŒŒλΌλ―Έν„° 이름 μ•žμ— μ•„κ·œλ¨ΌνŠΈ 라벨을 μž‘μ„±ν•œλ‹€.

func someFunction(argumentLabel parameterName: Int) {
    // In the function body, parameterName refers to the argument value
    // for that parameter.
}

func greet(person: String, from hometown: String) -> String {
    return "Hello \(person)!  Glad you could visit from \(hometown)."
}
print(greet(person: "Bill", from: "Cupertino"))
// Prints "Hello Bill!  Glad you could visit from Cupertino."

νŒŒλΌλ―Έν„° κΈ°λ³Έκ°’ (Default Parameter Values)

νŒŒλΌλ―Έν„°μ˜ νƒ€μž… 뒀에 νŒŒλΌλ―Έν„° 값을 ν• λ‹Ήν•˜μ—¬ ν•¨μˆ˜μ˜ νŒŒλΌλ―Έν„°μ— κΈ°λ³Έκ°’ (default value) 을 μ •μ˜ν•  수 μžˆλ‹€.

func someFunction(parameterWithoutDefault: Int, parameterWithDefault: Int = 12) {
    // If you omit the second argument when calling this function, then
    // the value of parameterWithDefault is 12 inside the function body.
}
someFunction(parameterWithoutDefault: 3, parameterWithDefault: 6) // parameterWithDefault is 6
someFunction(parameterWithoutDefault: 4) // parameterWithDefault is 12

기본값을 가지고 μžˆμ§€ μ•Šμ€ νŒŒλΌλ―Έν„°κ°€ λ”μš± μ€‘μš”ν•œ 의미λ₯Ό 가지고 있기 λ•Œλ¬Έμ— νŒŒλΌλ―Έν„° λͺ©λ‘μ˜ μ•žμ— μœ„μΉ˜ν•΄μ•Ό ν•œλ‹€

In-Out νŒŒλΌλ―Έν„° (In-Out Parameters)

ν•¨μˆ˜μ˜ νŒŒλΌλ―Έν„°λŠ” 기본적으둜 μƒμˆ˜μ΄λ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— ν•΄λ‹Ή ν•¨μˆ˜μ˜ λ°”λ”” λ‚΄μ—μ„œ ν•¨μˆ˜μ˜ νŒŒλΌλ―Έν„° κ°’ 변경을 μ‹œλ„ν•˜λ©΄ 컴파일 μ—λŸ¬κ°€ λ°œμƒν•œλ‹€. μ΄λ•Œ νŒŒλΌλ―Έν„°μ˜ 값을 λ³€κ²½ν•˜κΈ° μœ„ν•΄μ„œλŠ” in-out ν‚€μ›Œλ“œκ°€ ν•„μš”ν•˜λ‹€. ν•¨μˆ˜μ˜ μˆ˜μ •κ°€λŠ₯함을 μ•Œλ¦¬κΈ° μœ„ν•΄ in-out νŒŒλΌλ―Έν„° μ•„κ·œλ¨ΌνŠΈμ— &λ₯Ό λΆ™μ—¬μ€€λ‹€.

var someInt = 3
var anotherInt = 107
swapTwoInts(&someInt, &anotherInt)
print("someInt is now \(someInt), and anotherInt is now \(anotherInt)")
// Prints "someInt is now 107, and anotherInt is now 3"

'πŸ¦… Swift' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

Enumerations  (0) 2022.06.15
Closures  (0) 2022.06.15
Control Flow  (0) 2022.06.01
Collection Types  (0) 2022.05.22
Strings and Characters  (0) 2022.05.22