-
[Swift] Function - 1 (Defining/Calling Function, Parameter, Argument Label)Swift 2022. 2. 15. 02:37
(๋ชจ๋ ์ฝ๋๋ Playground์์ ์์ฑ๋์์ต๋๋ค.)
์ด๋ฒ์๋ ํจ์์ ๋ํด ์์๋ณด๊ณ ์ ํ๋ค!
ํจ์๋ ํน์ ๊ธฐ๋ฅ์ ์ํํ๋ ์ฝ๋ ๋ชจ์์ผ๋ก, ํจ์๋ฅผ ์ด์ฉํ๋ฉด ์ฝ๋์ ์ค๋ณต์ ์ค์ผ ์ ์๋ค.
์์ง ํจ์์ ๋ํด ์์ธํ ์์ง๋ ๋ชปํ์ง๋ง, ์ฐ๋ฆฌ๋ ์ด๋ฏธ ํจ์๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค.
๋ฐ๋ก print ํจ์์ธ๋ฐ, ์๋ ๋งํฌ๋ฅผ ๋ค์ด๊ฐ๋ฉด print๋ฌธ์ ๋ํด ์์ธํ ๋ณผ ์ ์๋ค.
https://developer.apple.com/documentation/swift/1541053-print
print ํจ์๋ ์ฐ๋ฆฌ๊ฐ ์ ๋ฌํ ๋ฌธ์์ด์ ์ฝ์์ ์ถ๋ ฅํ๋ ์ญํ ์ ํ๋ค.
๋ง์ฝ print ํจ์๊ฐ ์๋ค๋ฉด, ์ฐ๋ฆฌ๋ ๋งค๋ฒ ์ด ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ํด ์์ฒญ๋ ์ฝ๋์ ์๊ฐ์ ์จ์ผํ ๊ฒ์ด๋ค.
๋คํํ๋, Swift์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํด์ฃผ๋ ํจ์๊ฐ ์๋ค. ์๋ ๋งํฌ๋ฅผ ๋ค์ด๊ฐ๋ฉด ํ์ธํ ์ ์๋ค.
Apple Developer Documentation
developer.apple.com
ํ์ง๋ง ์ฐ๋ฆฌ๊ฐ ํ์ํ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ํด์๋ ์ง์ ํจ์๋ฅผ ๊ตฌํํด์ผ ํ๋ค.
1. Defining Function
Defining Function์ ํจ์๋ฅผ ์ ์ธํ๊ณ ๊ตฌํํ๋ ๊ฒ์ผ๋ก, ๋ฌธ๋ฒ์ ์๋์ ๊ฐ๋ค.
func funcName(parameter) -> ReturnType { // Code }ํจ์ ์ด๋ฆ์ lowerCamelCase๋ก ์ ์ธํ๊ณ , parameter๋ ํจ์๋ก ์ ๋ฌํ๋ ๊ฐ์ธ๋ฐ ๊ฒฝ์ฐ์ ๋ฐ๋ผ ์๋ต ๊ฐ๋ฅํ๋ค.
->์ ์ ์์๋ ๋ฐ๋์ ๊ณต๋ฐฑ์ด ์กด์ฌํด์ผํ๊ณ , -์ >๋ ๋ถ์ฌ์จ์ผํ๋ค.
ReturnType์๋ ํจ์๊ฐ ๋ฆฌํดํ ๊ฐ์ ํ์์ ์ ์ธํด์ค๋ค.
๋ง์ฝ ํจ์๊ฐ ๊ฐ์ ๋ฆฌํดํ์ง ์๋๋ค๋ฉด ->์ ReturnType์ ๋ชจ๋ ์๋ตํ ์ ์๋ค.
์๋ ์ฝ๋๋ ํ๋ผ๋ฏธํฐ๊ฐ ์๊ณ , ๊ฐ์ ๋ฆฌํดํ์ง ์๋ ํจ์์ด๋ค.
func sayMood() { print("I am happy") }ํ๋ผ๋ฏธํฐ๋ฅผ ์๋ตํ๋ค๊ณ ํด๋, ํจ์๋ ๋ฌด์กฐ๊ฑด ์์ ๊ฐ์ด ํจ์ ์ด๋ฆ ๋ค์ ()๋ฅผ ์จ์ฃผ์ด์ผ ํ๋ค.
์ด ํจ์ ๋ด์ ์ฝ๋์ ์กด์ฌํ๋ ๋ฌธ์ฅ์ ์ถ๋ ฅํ๊ธฐ ์ํด์๋ ์ฐ๋ฆฌ๋ ํจ์๋ฅผ ํธ์ถํด์ผํ๋๋ฐ, ์ด๋ฅผ Calling Function์ด๋ผ๊ณ ํ๋ค.
2. Calling Function
Calling Function์ ํจ์๋ฅผ ํธ์ถํ๋ ๊ฒ์ผ๋ก, ๋ฌธ๋ฒ์ ์๋์ ๊ฐ๋ค.
funcName(parameter)์์ ์์ฑํ๋ ํจ์๋ ์๋์ ๊ฐ์ด ํธ์ถํ ์ ์๊ณ , ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ "I am happy"์ด๋ค.
func sayMood() { print("I am happy") } sayMood() // I am happy์ด ๋ ์ฃผ์ํ ์ ์, ํจ์ ๋ค์ ๋ฐ๋์ ()๋ฅผ ์จ์ฃผ์ด์ผ ํ๋ค.
๋ง์ฝ ํจ์์ ํ๋ผ๋ฏธํฐ๊ฐ ์๋ค๋ฉด, ์๋ ์ฝ๋์ ๊ฐ์ด ํจ์ ํธ์ถ ์์ Argument Label๋ ๋ฐ๋์ ์จ์ฃผ์ด์ผํ๋ค.
func sayMood(mood: String) -> String { return "I am \(mood)" } let str = sayMood(mood: "tired") print(str) // I am tired3. Parameter
ํ๋ผ๋ฏธํฐ๋ ์์ ๋งํ๋ฏ์ด ํจ์๋ก ์ ๋ฌ๋๋ ๊ฐ์ด๋ฉด์ ํจ์ ๋ด์์ ์ฌ์ฉํ ์ ์๋ ์์ ์์์ด๋ค. ์์ ์์์ด๋ฏ๋ก ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ ํ๋ผ๋ฏธํฐ์ ๊ธฐ๋ณธ ๊ฐ (Default Value)์ ์ ์ธํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ฐ, ๊ธฐ๋ณธ ๊ฐ์ ํ๋ผ๋ฏธํฐ๋ก ๊ฐ์ด ์ ๋ฌ๋์ง ์์ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋๋ค.
ํ๋ผ๋ฏธํฐ์ scope์ ํจ์ ๋ด๋ถ์ด๊ณ , ํจ์๊ฐ ํธ์ถ๋๋ฉด ์์ฑ๋๊ณ ํจ์ ์คํ์ด ์๋ฃ๋๋ฉด ์ญ์ ๋๋ค.
๋ฐ๋ผ์ ํจ์ ๋ฐ์์๋ ํ๋ผ๋ฏธํฐ์ ์ ๊ทผํ ์ ์๋ค.
์๋ ์์๋ฅผ ํตํด ๊ฒฐ๊ณผ๋ฅผ ํ์ธํด๋ณด์.
func sayMood(name: String = "Somebody", mood: String = "happy") -> String { // mood = "sad" -> ์์ ๋ณ๊ฒฝ ๋ถ๊ฐ! return "\(name) is \(mood)" } // print(mood) -> ํจ์์ ํ๋ผ๋ฏธํฐ์ ์ ๊ทผ ๋ถ๊ฐ! let str = sayMood() // ์ธ์ ์ ๋ฌ X print(str) // Somebody is happy -> ํ๋ผ๋ฏธํฐ์ ๊ธฐ๋ณธ ๊ฐ ์ฌ์ฉ let str2 = sayMood(name: "Sanghee", mood: "tired") // ์ธ์ ์ ๋ฌ O print(str2) // Sanghee is tiredsayMood ํจ์ ๋ด์์ ํ๋ผ๋ฏธํฐ mood์ ๊ฐ์ ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํ๊ณ , ํจ์ ์ธ๋ถ์์๋ ํ๋ผ๋ฏธํฐ mood์ ์ ๊ทผํ ์ ์๋ค.
์์ str์๋ ์ธ์๋ฅผ ์ ๋ฌํ์ง ์์ ํจ์์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๋ค.
์ธ์๊ฐ ์ ๋ฌ๋์ง ์์๊ธฐ ๋๋ฌธ์ ํจ์์์ ์ง์ ํ ํ๋ผ๋ฏธํฐ์ ๊ธฐ๋ณธ ๊ฐ์ด ์ฌ์ฉ๋์๊ณ , "Somebody is happy"๊ฐ ์ถ๋ ฅ๋์๋ค.
์์ str2์๋ ์ธ์๋ฅผ ์ ๋ฌํ ํจ์์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๋ค. ๋ฐ๋ผ์ ์ ๋ฌ๋ ์ธ์๊ฐ ํฌํจ๋ "Sanghee is tired"๊ฐ ์ถ๋ ฅ๋์๋ค.
4. Argument Label
Argument Label์ ํจ์๋ฅผ ํธ์ถํ ๋ ์ธ์๋ฅผ ์ ๋ฌํ๊ธฐ ์ํด์ ์ฌ์ฉํ๊ณ , ํจ์ ๋ด๋ถ์์๋ ์ฌ์ฉ๋์ง ์๋๋ค.
๋ํ ์ด๋ฅผ ์ฌ์ฉํ๋ฉด ํจ์์ ๊ฐ๋ ์ฑ์ ๋์ผ ์ ์๋ค.
Argument Label์ ์๋์ ๊ฐ์ด ์ฌ์ฉ๋๋ค.
argumentLabel parameterName: Type์๋ 2๊ฐ์ ํจ์๋ ์๋ก ๋ค๋ฅธ ํจ์์ธ๋ฐ, ์ค์ ๋ก ์ปดํ์ผ๋ฌ๋ ์ด ๋ ํจ์๋ฅผ ๋ค๋ฅด๊ฒ ์ธ์ํ๋ค.


์ผ์ชฝ ์ฝ๋์์ name๊ณผ mood๋ Argument Label์ธ ๋์์ ํ๋ผ๋ฏธํฐ์ด๋ค. ํจ์๋ฅผ ํธ์ถํ ๋์๋ name๊ณผ mood๋ฅผ ํตํด ์ธ์๋ฅผ ์ ๋ฌํ ์ ์๋ค.
์ค๋ฅธ์ชฝ ์ฝ๋์์์ ํ๋ผ๋ฏธํฐ๋ name, mood์ด๊ณ , Argument Label์ someone, with์ด๋ค. ํจ์๋ฅผ ํธ์ถํ ๋์๋ someone๊ณผ with๋ฅผ ํตํด ์ธ์๋ฅผ ์ ๋ฌํ ์ ์๋ค.
๊ทธ๋ ๋ค๋ฉด Argument Label์ด ์๋๋ฐ๋ ๋ถ๊ตฌํ๊ณ ํ๋ผ๋ฏธํฐ๋ฅผ ํตํด ์ธ์๋ฅผ ์ ๋ฌํ ์ ์์๊น?
Argument Label์ด ์กด์ฌํ๋ ํจ์์ ํ๋ผ๋ฏธํฐ๋ฅผ ํตํด ์ธ์๋ฅผ ์ ๋ฌํ๋ ค๊ณ ํ๋ฉด ์๋์ ๊ฐ์ด ์ค๋ฅ๊ฐ ๋๋ค.

๋ฉ์์ง๋ฅผ ๋ณด๋ฉด "Incorrect argument labels in call"์ด๋ผ๊ณ ๋์ด์๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ์ด๋ ๊ฒ Argument Label์ด ์์ ๋์๋ ํ๋ผ๋ฏธํฐ๋ก ์ธ์๋ฅผ ์ ๋ฌํ๋ฉด ์๋๊ณ , ๋ฐ๋์ Argument Label๋ก ์ธ์๋ฅผ ์ ๋ฌํด์ฃผ์ด์ผํ๋ค.
Argument Label์ ์์ผ๋์นด๋ ํจํด (_)์ ์ด์ฉํ์ฌ ์๋์ ๊ฐ์ด ์๋ตํ ์๋ ์๋๋ฐ, ํจ์ ํธ์ถ ์์๋ ๋ง์ฐฌ๊ฐ์ง๋ก Argument Label์ ์๋ตํด์ผํ๋ค.

'Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] Function - 3 (Implicit Return, Function Notation, Function Types) (0) 2022.02.15 [Swift] Function - 2 (Variadic Parameter, In-Out Parameter) (0) 2022.02.15 [Swift] Optional - 2 (IUO, Nil-Coalescing, Optional Chaining) (0) 2022.02.14 [Swift] Optional - 1 (Forced Unwrapping, Optional Binding) (0) 2022.02.14 [Swift] enumerated() (0) 2022.02.08