-
Swift - Function BasicProgramming/Swift 2020. 10. 6. 23:14
안녕하세요 :)
오늘은 Function(함수)에 대해서 공부해보려고 합니다.
함수란 어떠한 기능을 하는 코드 블록을 의미합니다. 함수를 사용하는 큰 이유중 하나는 재사용성에 있습니다.
자주 사용되는 기능을 함수로 구현 해 놓으면 코드의 중복을 줄일 수 있기 때문이죠.
사실 지금까지 우리는 함수를 계속 사용해 왔습니다.
대표적으로 print함수가 있겠네요.
로그에 출력을 해주는 기능을 하는 print함수가 없다면 우리는 이 기능을 구현하기 위해 매번 방대한 양의 코드를 매번 작성하면서 사용했어야 할 겁니다.
다행히도 Swift에서는 기본적으로 제공해주는 유용한 함수들이 있습니다.
이러한 함수들 해당 사이트에서 확인할 수 있습니다.
developer.apple.com/documentation/swift/swift_standard_library#topics
하지만 우리가 필요한 모든 함수들을 제공해주지는 못하겠죠?
그래서 우리는 필요한 함수는 직접 선언해야 합니다.
Defining Function (새로운 함수를 선언하는 방법)
함수를 선언할 때는 func keyword를 사용합니다.
이어서 함수의 이름을 적고 parameter(파라미터) 그리고 ReturnType(리턴형)을 적습니다.
funcName(parameter) -> ReturnType 부분을 Function Head라고 합니다.
그리고 {} 안에 코드를 작성하게 됩니다. 이 부분을 Function Body라고 합니다.
parameter와 ReturnType은 없다면 생략이 가능합니다.
오늘은 둘 다 생략이 가능한 함수만 구현해보도록 하겠습니다.
파라미터를 생략한다면 () 빈 괄호를 적어야 합니다.
그리고 ReturnType 생략한다면 ->와 ReturnType 모두 생략이 가능합니다.
sayGreeting함수는 Good afternoon good evening good night. 을 출력하는 함수입니다.
이렇게 적고 빌드를 하면 이 문구가 출력이 될까요??
아닙니다. 우리는 함수를 선언만 했지 호출하지 않았습니다.
Calling Function (함수를 호출하는 방법)
함수를 사용하는 것을 호출한다고 표현합니다.
함수를 호출하는 방법은 함수의 이름을 사용하면 됩니다.
만약 파라미터가 없다면 이름 뒤에 ()를 작성해야 합니다.
ReturnType
이번에는 ReturnType이 존재하는 함수를 선언해보도록 하겠습니다.
이 함수는 1과 2의 합을 리턴해주는 함수입니다.
1 + 2의 Type은 Int겠죠? 그래서 -> Int로 작성해 줍니다.
이렇게 ReturnType이 존재하는 함수는 Function Body에서 반드시 return Keyword가 존재해야 합니다.
그리고 return 다음에 expression이 온다면 이 expression을 평가한 값의 Type은 ReturnType과 동일해야 합니다.
함수는 return 뒤에 expression을 평가한 뒤에 평가된 값을 함수를 호출한 곳으로 반환하고 종료됩니다.
이렇게 함수를 호출하면 one + two를 평가한 3이 반환됩니다.
Implicit Return
ReturnType이 존재하면 반드시 return Keyword가 존재해야 한다고 했습니다.
하지만 예외가 있습니다.
Function Body가 단일 리턴문이라면 return이 생략 가능합니다.
위와 아래 코드는 같은 코드입니다.
만약 Function Body가 단일 리턴문이 아니라면 Swift가 그중에 무엇을 리턴해야 할지 모르기 때문에 return을 생략할 수 없습니다.
참고자료
https://docs.swift.org/swift-book/LanguageGuide/Functions.html
728x90'Programming > Swift' 카테고리의 다른 글
Swift - Function Variadic, In-out Parameter (0) 2020.10.08 Swift - Function Parameter (0) 2020.10.07 Swift - Optional Binding, Nil-coalescing Operator (0) 2020.10.05 Swift - Optional, Forced-Unwrapping (0) 2020.10.01 Swift - Control Transfer Statements (0) 2020.10.01