ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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 tired

     

     

    3. 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 tired

    sayMood ํ•จ์ˆ˜ ๋‚ด์—์„œ ํŒŒ๋ผ๋ฏธํ„ฐ 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์„ ์ƒ๋žตํ•ด์•ผํ•œ๋‹ค.

     

    ๋Œ“๊ธ€

Designed by Tistory.