ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Swift] Function - 3 (Implicit Return, Function Notation, Function Types)
    Swift 2022. 2. 15. 02:40

    (๋ชจ๋“  ์ฝ”๋“œ๋Š” Playground์—์„œ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.)

     

    ํ•จ์ˆ˜ 3ํƒ„์ด๋‹ค. 

    ์ด๋ฒˆ์—๋Š” Implicit Return, Function Notation (ํ•จ์ˆ˜ ํ‘œ๊ธฐ๋ฒ•)๊ณผ Function Types (ํ•จ์ˆ˜ ํ˜•์‹)์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž.

     

    1. Implicit Return

    Implicit์ด๋ž€ "์•”์‹œ์˜" ๋ผ๋Š” ๋œป์„ ๊ฐ–๊ณ , Implicit๊ณผ ๋ฐ˜๋Œ€๋˜๋Š” ๋‹จ์–ด์ธ Explicit์€ "๋ช…๋ฐฑํ•œ" ์ด๋ผ๋Š” ๋œป์„ ๊ฐ–๋Š”๋‹ค. 

     

    Explicit Return์ด๋ž€, return ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด์„œ ๋ช…์‹œ์ ์œผ๋กœ ๊ฐ’์„ ๋ฆฌํ„ดํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

    return ํ‚ค์›Œ๋“œ๋กœ return ๊ฐ’์„ ๋ช…์‹œํ•œ๋‹ค.

     

    ๋ฐ˜๋ฉด Implicit Return๋Š” return ํ‚ค์›Œ๋“œ๋ฅผ ์ƒ๋žตํ•˜๊ณ , ๋ฆฌํ„ด ํƒ€์ž…๊ณผ ํ‘œํ˜„์‹์„ ํ†ตํ•ด์„œ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๊ฐ’์„ ๋ฆฌํ„ดํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์ถ”๋ก ํ•œ๋‹ค.

    Implicit Return์€ return ํ‚ค์›Œ๋“œ๋ฅผ ์ƒ๋žตํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋‹จ์ผ ๋ฆฌํ„ด๋ฌธ์œผ๋กœ ๊ตฌํ˜„๋œ ํ•จ์ˆ˜์—์„œ๋งŒ ์“ธ ์ˆ˜ ์žˆ๋‹ค. ๋ฌธ์žฅ์ด 2๊ฐœ ์ด์ƒ์ธ ํ•จ์ˆ˜์—์„œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

    return ํ‚ค์›Œ๋“œ๋ฅผ ์ƒ๋žตํ•˜์˜€๋‹ค.

     

    2. Function Notation (ํ•จ์ˆ˜ ํ‘œ๊ธฐ๋ฒ•)

    ํ•จ์ˆ˜ ํ‘œ๊ธฐ๋ฒ•์€ ์ฃผ๋กœ Swift ๊ณต์‹ ๋ฌธ์„œ์—์„œ ํ•จ์ˆ˜๋ฅผ ์–ธ๊ธ‰ํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๊ณ , ์ƒ์ˆ˜๋‚˜ ๋ณ€์ˆ˜์— ํ•จ์ˆ˜ ์ž์ฒด๋ฅผ ์ €์žฅํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

    ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ํ•จ์ˆ˜ ํ‘œ๊ธฐ๋ฒ•์— ๋Œ€ํ•ด ๋ฐ˜๋“œ์‹œ ์•Œ๊ณ  ์žˆ์–ด์•ผํ•œ๋‹ค. ํ•จ์ˆ˜ ํ‘œ๊ธฐ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™์€ ํ˜•ํƒœ๋ฅผ ์ง€๋‹Œ๋‹ค.

    funcName(label:)
    funcName(label:label:)
    funcName

    ํŒŒ๋ผ๋ฏธํ„ฐ ๋˜๋Š” Argument Label์ด ์žˆ๋‹ค๋ฉด Argument Label์„ ํ‘œ๊ธฐํ•ด์ฃผ๊ณ , ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์—†๊ฑฐ๋‚˜ Argument Label์„ ์ƒ๋žตํ•œ ๊ฒฝ์šฐ์—๋Š” ํ•จ์ˆ˜ ์ด๋ฆ„๋งŒ ์“ฐ๋ฉด ๋œ๋‹ค. ์ด ๋•Œ, ํ•จ์ˆ˜ ์ด๋ฆ„ ๋’ค์— ()๋ฅผ ๋ถ™์ด๋ฉด ํ•จ์ˆ˜๋ฅผ ํ‘œ๊ธฐํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ์ฃผ์˜ํ•˜๋„๋ก ํ•˜์ž.

     

    sayNewYearGreetings

    ์ด ํ•จ์ˆ˜๋Š” sayNewYearGreetings๋กœ ํ‘œ๊ธฐ๋ฅผ ํ•œ๋‹ค.

     

    sayNewYearGreetings(with:) ๋˜๋Š” sayNewYearGreetings

    ์ด ํ•จ์ˆ˜๋Š” sayNewYearGreetings(with:)๋กœ ํ‘œ๊ธฐ๋ฅผ ํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ ์ธ์ž๋„ ๊ฐ™์ด ํ‘œ๊ธฐํ•˜๊ฒŒ ๋˜๋ฉด ํ•จ์ˆ˜ ํ˜ธ์ถœ์‹์ด ๋˜์–ด๋ฒ„๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์—, ๋ฐ˜๋“œ์‹œ Argument Label๋งŒ ์จ์•ผํ•œ๋‹ค๋Š” ์ ์„ ์žŠ์ง€ ๋ง์ž.

    ๋˜ํ•œ ์ด ํ•จ์ˆ˜๋Š” sayNewYearGreetings๋กœ๋„ ํ‘œ๊ธฐํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ํ•จ์ˆ˜์˜ ์ด๋ฆ„์„ ๊ฐ€์ง„ ํ•จ์ˆ˜๊ฐ€ ๋‹จ ํ•˜๋‚˜๋งŒ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

    ํ•˜์ง€๋งŒ ๋งŒ์•ฝ ํ•จ์ˆ˜์˜ ์ด๋ฆ„์ด ๊ฐ™์€๋ฐ ์ธ์ž์˜ ์ข…๋ฅ˜๊ฐ€ ๋‹ค๋ฅธ ํ•จ์ˆ˜๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ๋‹ค๋ฉด, sayNewYearGreetings๊ณผ ๊ฐ™์ด ํ‘œ๊ธฐํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

     

     

    sayNewYearGreetings(_:) ๋˜๋Š” sayNewYearGreetings

    ์ด ํ•จ์ˆ˜๋Š” Argument Label์„ ์™€์ผ๋“œ์นด๋“œ ํŒจํ„ด์œผ๋กœ ์ƒ๋žตํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—, sayNewYearGreetings(_:)๋กœ ํ‘œ๊ธฐํ•˜๊ฑฐ๋‚˜ sayNewYearGreetings๋กœ ํ‘œ๊ธฐํ•œ๋‹ค.

     

     

    3. Function Types (ํ•จ์ˆ˜ ํ˜•์‹)

    Swift์—์„œ ํ•จ์ˆ˜๋Š” First Class Citizen์ด๋‹ค. 

     

    First Class Citizen๋Š” ์•„๋ž˜ 3๊ฐ€์ง€ ํŠน์ง•์„ ๊ฐ–๋Š”๋‹ค.

    1. ๋ณ€์ˆ˜, ์ƒ์ˆ˜์— ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

    2. ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

    3. ํ•จ์ˆ˜๋‚˜ ๋ฉ”์†Œ๋“œ์—์„œ ๋ฆฌํ„ดํ•  ์ˆ˜ ์žˆ๋‹ค.

     

    ์œ„์˜ 3๊ฐ€์ง€ ํŠน์ง•์„ ๊ฐ€์ง€๋ ค๋ฉด Type์ด ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•˜๋‹ค. ํ•จ์ˆ˜๋„ First Class Citizen์ด๋ฏ€๋กœ Type์„ ๊ฐ–๋Š”๋‹ค.

     

    ํ•จ์ˆ˜์˜ Type์€ ์•„๋ž˜์™€ ๊ฐ™์ด ParameterType๊ณผ ReturnType์œผ๋กœ ํ‘œํ˜„ํ•œ๋‹ค.

    (ParameterType) -> ReturnType

    ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ์—๋Š” ๋ฆฌํ„ดํ˜•์ด ์—†์œผ๋ฉด ๋ฆฌํ„ด ํ™”์‚ดํ‘œ์™€ ๋ฆฌํ„ดํƒ€์ž…์„ ์ƒ๋žตํ•˜์ง€๋งŒ, ํ•จ์ˆ˜ ํ˜•์‹์—์„œ๋Š” ๋ฆฌํ„ดํ˜•์ด ์—†์œผ๋ฉด ์—†๋‹ค๊ณ  ๋ฐ˜๋“œ์‹œ ๋ช…์‹œํ•ด์ฃผ์–ด์•ผํ•œ๋‹ค.

    ๋งŒ์•ฝ ParameterType์ด ์—†๋‹ค๋ฉด ()๋ฅผ ์“ฐ๊ณ , ReturnType์ด ์—†๋‹ค๋ฉด () ๋˜๋Š” Void๋ฅผ ์“ด๋‹ค.

     

    ์—ฌ๊ธฐ์„œ ()๋ž€, Void๋ฅผ ์˜๋ฏธํ•œ๋‹ค. Void๋Š” ์—†๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

    ๋˜ํ•œ Void๋Š” ๋น„์–ด ์žˆ๋Š” ํŠœํ”Œ๋กœ, ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ๋ฆฌํ„ดํ˜•์ด ์—†๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๋Š” ํ‚ค์›Œ๋“œ์ด๋‹ค.

     

     

    ์œ„์˜ ์˜ˆ์‹œ์—์„œ ์‚ฌ์šฉํ–ˆ๋˜ ํ•จ์ˆ˜๋“ค์„ ๋‹ค์‹œ ์‚ดํŽด๋ณด์ž.

    ๋จผ์ € "๋ณ€์ˆ˜, ์ƒ์ˆ˜์— ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค"๋Š” First Class Citizen์˜ ์ฒซ๋ฒˆ์งธ ํŠน์ง•์„ ์ด์šฉํ•ด์„œ Fuction Type์„ ์•Œ์•„๋ณด์ž. 

    sayNewYearGreetings

    ๋ณ€์ˆ˜ greeting์—๋Š” sayNewYearGreetings ๋ผ๋Š” ํ•จ์ˆ˜ ์ž์ฒด๊ฐ€ ์ €์žฅ๋˜์–ด์žˆ๋‹ค.

    ๋”ฐ๋ผ์„œ greeting์˜ ํƒ€์ž…์€ () -> ()์ด๊ณ , ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ด์„œ ํ”„๋ฆฐํŠธ๋ฌธ์„ ์ถœ๋ ฅํ•˜๋ ค๋ฉด greeting ๋’ค์— ()๋ฅผ ๋ถ™์—ฌ์„œ greeting()์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ด์ฃผ์–ด์•ผํ•œ๋‹ค.

     

     

    sayNewYearGreetings(with:)

    ๊ทธ๋ ‡๋‹ค๋ฉด sayNewYearGreetings(with:) ํ•จ์ˆ˜๋ฅผ greeting์— ์ €์žฅํ•˜๊ณ , greeting์„ ์ด์šฉํ•˜์—ฌ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ด๋ณด์ž.

    greeting์˜ ํƒ€์ž…์€ (Int) -> ()์ด๊ณ , greeting(2021)์— ์˜ํ•ด "Happy New Year 2021!"์ด ์ถœ๋ ฅ๋œ๋‹ค.

     

    ๊ทธ๋ƒฅ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ์—๋Š” Argument Label์ด ํ•„์š”ํ•˜์ง€๋งŒ, ์œ„์™€ ๊ฐ™์ด ์ƒ์ˆ˜ ๋˜๋Š” ๋ณ€์ˆ˜์— ์ €์žฅ๋œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ์—๋Š” Argument Label์„ ์“ฐ์ง€ ์•Š๋Š”๋‹ค. 

    Function Type์—๋Š” Parameter Type๊ณผ Return Type๋งŒ ํฌํ•จ์ด ๋˜๊ณ , Argument Label์€ ํฌํ•จ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

     

    ์ด๋ ‡๊ฒŒ Argument Label์„ ์“ฐ๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์ด Argument Label์„ ์ง€์šฐ๋ผ๋Š” ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

     

     

    ๋‹ค์Œ์œผ๋กœ ์•„๋ž˜ ์˜ˆ์‹œ๋“ค์„ ํ†ตํ•ด "ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.", "ํ•จ์ˆ˜์™€ ๋ฉ”์†Œ๋“œ๋กœ ๋ฆฌํ„ดํ•  ์ˆ˜ ์žˆ๋‹ค"๋Š” First Class Citizen์˜ ๋‘๋ฒˆ์งธ, ์„ธ๋ฒˆ์งธ ํŠน์ง•์„ ์‚ดํŽด๋ณด์ž.

     

     

    ์•„๋ž˜ 4๊ฐœ์˜ ํ•จ์ˆ˜๋“ค์€ ๋ชจ๋‘ (Int, Int) -> Int ํ˜•์ด๋‹ค. 

     

     

    ์•„๋ž˜ ํ•จ์ˆ˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜๋กœ, ((String) -> Optional<(Int, Int) -> Int>) ํ˜•์ด๋‹ค.

    ์ฆ‰, Parameter Type์€ String์ด๊ณ  Return Type์€ Optional<(Int, Int) -> Int)> ์ด๋‹ค. ์—ฌ๊ธฐ์„œ Function Type์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

    ์ด๋ ‡๊ฒŒ ํ•จ์ˆ˜ ๋‚ด์— ->๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ๋‹ค๋ฉด, ์ฒซ๋ฒˆ์งธ ํ™”์‚ดํ‘œ๋Š” calculateFunc์˜ return ํ™”์‚ดํ‘œ์ด๊ณ , ๋‚˜๋จธ์ง€ ํ™”์‚ดํ‘œ๋Š” ๋ชจ๋‘ Function Type์— ํฌํ•จ๋œ return ํ™”์‚ดํ‘œ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

    ํ•จ์ˆ˜๋ฅผ ๋ณด๋ฉด op์— ๋”ฐ๋ผ์„œ ๋‹ค๋ฅธ ํ•จ์ˆ˜๋“ค์ด ๋ฆฌํ„ด๋˜๊ณ  ์žˆ๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ Function Type์ด First Class Citizen์˜ ํŠน์ง•์ธ ํ•จ์ˆ˜๋‚˜ ๋ฉ”์†Œ๋“œ๋กœ ๋ฆฌํ„ด๋œ๋‹ค๋Š” ์ ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

     

     

    ์ด ํ•จ์ˆ˜๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์ถœ๋ ฅ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

    calculateFunc์˜ ์ธ์ž๋กœ "+"๊ฐ€ ์ „๋‹ฌ๋˜์–ด add(a:b:)๊ฐ€ ๋ฆฌํ„ด๋˜๊ณ , add์˜ a, b์—๋Š” ๊ฐ๊ฐ 2์™€ 5๊ฐ€ ์ „๋‹ฌ๋˜์–ด ๊ฒฐ๊ณผ๋Š” 2์™€ 5๊ฐ€ ๋”ํ•ด์ง„ 7์ด ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค. 

    'Swift' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

    [Swift] Tuples  (0) 2022.02.15
    [Swift] Closure, Syntax Optimization  (0) 2022.02.15
    [Swift] Function - 2 (Variadic Parameter, In-Out Parameter)  (0) 2022.02.15
    [Swift] Function - 1 (Defining/Calling Function, Parameter, Argument Label)  (0) 2022.02.15
    [Swift] Optional - 2 (IUO, Nil-Coalescing, Optional Chaining)  (0) 2022.02.14

    ๋Œ“๊ธ€

Designed by Tistory.