ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Swift - Function Parameter
    Programming/Swift 2020. 10. 7. 23:16

     

    지난 포스팅에 이어 오늘은 Parameter(파라미터)가 있는 함수를 선언하고 호출하는 방법에 대해서 공부해보도록 하겠습니다.

    Parameter란 외부에서 값을 가져와 Function Body에서 사용하는 임시 상수를 의미합니다.

    Parameter는 함수가 호출되면 생성되고 함수가 종료되면 삭제됩니다.

     


     

    Defining Function

     

    지난 포스팅에서 함수를 선언할 때 Function Head부분에서 func funcName(parameter) -> ReturnType 이라고 설명하고 넘어갔습니다.

    여기서 parameter 부분을 자세히 설명하면

     

     

     

     

    이렇게 parameterName과 ParameterType으로 작성해야 합니다. 여러 개를 작성하고 싶다면 , (comma)로 얼마든지 원하는 수만큼 작성할 수 있습니다.

    Parameter를 하나만 받고 Return Type이 없는 함수를 선언해 보겠습니다.

     

     

     

     

    addOne(num:)이라는 함수는 Int 타입의 num을 파라미터로 받는 함수입니다.

    호출하면 num에 저장된 값에 +1을 더해서 로그에 출력해줍니다.

    파라미터는 바디에서 사용하는 임시상수라고 했죠?

    num이라는 임시상수는 print() 안에서 사용됐습니다.

    그럼 여기서 num에 뭐가 저장돼있는데??라는 의문이 드시죠??

    num에 저장되는 값은 함수를 호출할때 지정합니다.

     


     

    Calling Function

     

     

     

     

     

     

    함수를 호출하는 방법은 함수의 이름을 적고 괄호 안에 (parameterName: ParameterType에 맞는 저장할 값)을 적어줍니다.

    함수 선언 부분에서 우리는 파라미터이름을 num으로 하고 타입을 Int로 지정했습니다.

    그래서 이 함수를 호출 할 때 위의 코드와 같이 호출합니다.

     


     

    두 수의 덧셈을 반환해주는 함수

     

    이제 Parameter와 Return Type을 모두 가지는 함수를 만들어 보겠습니다.

     

     

     

     

    이 함수는 Int Type의 a와 b를 파라미터로 받아 Int Type을 리턴해주는 함수입니다.

     

     

     

     

    Int Type를 받는 파라미터에 Double Type을 입력할 수 없습니다.

    호출하는 법은 간단하죠??

    이번에는 파라미터가 2개이므로 호출할 때 2개의 파라미터를 전달해야 합니다.

    그리고 이렇게 Type에 맞지 않는 값을 전달하면 에러가 발생합니다.

     


     

    Argument Label

     

    사실 Parameter는 더 세분화 시킬 수 있습니다. 자세히 말하면 Function Head 부분은 다음과 같습니다.

     

     

     

     

    name이라고 적은 부분은 사실 parameterName이고 그 앞에 argumentLabel을 더 작성할 수 있습니다.

    지금까지 사용했던 코드는 argumentLabel을 생략한 것입니다.

    argumentLabel을 적지 않고 name만 작성하면 name은 argumentLabel임과 동시에 parameterName입니다.

     

    그리고 사실 함수를 호출해 주는 부분도 자세히 말하면 다음과 같습니다.

     

     

     

     

    argumentLabel은 뭐야?라고 생각하셨죠??

    argumentLabel은 단어 그대로 Argument의 Label(이름)입니다.

    argument는 함수를 호출할 때 전달되는 실제 값입니다.

    argument의 값이 parameter로 전달되어 function body에서 사용이 되는 것입니다.

     

     

     

     

    둘 다 같은 a와 b지만 호출할 때 사용한 a, b는 Argument이고 Function Head와 Body에서 사용된 a, b는 Parameter입니다.

    그럼 이제 argumentLabel과 parameterName을 따로 선언해 보겠습니다.

     

    Swift에서는 대부분 funName은 동사를 포함한 단어로 argumentLabel은 전치사로 parameterName은 명사로 짓습니다.

    지키지 않아도 오류가 나지는 않지만 가독성을 위해 지켜주는 게 좋습니다.

    Function Head만 봐도 대충 어떤 기능을 하는 함수인지 감이 오게 되죠??

    그럼 greet(to:) 함수를 호출해 볼까요?

     

     

    맞지않는 아규먼트레이블을 사용했다고 에러가 발생합니다.

    지금까지 하던 대로 parameterName을 사용하면 에러가 발생합니다.

    argumentLabel을 작성하면 함수를 호출할 때 argumentLabel을 사용해서 호출해야 합니다.

     


     

    print 함수

     

    지금까지 우리가 사용했던 print도 함수라고 말씀드린 게 기억이 나시나요?

    잘 생각해보면 print함수를 사용할 때 argumentLable을 쓰지 않았습니다.

     

     

    함수 호출 부분인데 () 괄호 안에 name은 없고 Value부분만 있습니다.

    이유를 알기위해서 print함수가 어떻게 선언돼있는지 보겠습니다.

     

     

    print함수는 다음과 같이 선언돼있습니다. 다른 건 아직 공부하지 않았으니 넘어가고 _ items를 봐주세요!

    argumentLabel이 _ (underscore)로 돼있습니다.

    _은 WildcardPattern으로 주로 생략과 관련이 있습니다.

    이에 대한 자세한 부분은 다음에 공부해보도록 해요.

    이렇게 argumentLable이 _ 로 돼있다면 함수를 호출할 때 argumentLabel을 생략할 수 있습니다.

    예시를 보도록 할게요.

     

     

    위에서 사용 했던 add(a:b:) 함수에 argumentLable을 추가했습니다.

    처음과 다르게 호출할 때 바로 값만 전달해도 함수가 호출됩니다.

     


     

    참고자료

     

    https://kxcoding.com

     

    여러분의 새로운 도전을 응원합니다 | KxCoding

    Mastering SwiftUI 더 적은 코드로, 더 멋진 UI 만들기

    kxcoding.com

     

     

    https://docs.swift.org/swift-book/LanguageGuide/Functions.html

     

    Functions — The Swift Programming Language (Swift 5.6)

    Functions Functions are self-contained chunks of code that perform a specific task. You give a function a name that identifies what it does, and this name is used to “call” the function to perform its task when needed. Swift’s unified function syntax

    docs.swift.org

     

     

    728x90
Designed by Tistory.