-
[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