티스토리 뷰

1) 정의


 * 일련의 작업을 수행하는 코드 묶음을 식별할 수 있는 특정한 이름을 부여하여 사용하는 것


 * 함수 문법(function Syntax)

  func 함수명(파라미터 : 타입) -> 반환타입 {

      내용

      return 반환값

   }



2) 유형


 * 인풋과 아웃풋이 모두 있는 것(Fuction)

 * 인풋이 없고 아웃풋만 있는 것(Generator)

 * 인풋이 있고 아웃풋은 없는 것(Consumer)

 * Input과 아웃풋이 모두 없는 것



3) 함수의 기본



// Example. 1 파라미터, 반환타입, 반환값이 없는 함수

var x = 0

func addOne2() {

    x += 1

    print(x)

}

addOne2() * 결과 : 1




// Example. 2 파라미터, 반환타입, 반환값이 있는 함수

func greet(person: String) -> String {           * 파라미터명 : Person, 파라미터 타입 : String, 반환값 타입 : String


    let greeting = "Hello, " + person + "!"       * 상수 greeting의 타입 : String

    return greeting

}


greet(person: "Anna"* 결과 : "Hello, (Anna)!"   * (괄호) 부분이 입력한 파라미터 'person' 가 들어간 부분

greet(person: "Brian"* 결과 : "Hello, (Brian)!"




// 더 생각해보기 : 위의 함수 내용에서 내용을 결합하고 한 줄로 반환값 리턴하기(Combine the message creation and the return statement into one line)

func greetAgain(person: String) -> String {       

    return "Hello, " + person + "!"                            * 굳이 상수를 하나 선언할 필요가 없어져 코드가 간결해졌다.

}


greetAgain(person: "Anna"* 결과 : "Hello, Anna!"




// 여러 개의 파라미터가 있는 함수(Function with Multiple Parameters)

func addNumbers(a: Int, b: Int) -> Int {

    return a + b

}


addNumbers(a: 10, b: 20)             * 결과 : 30

addNumbers(a: 3, b: 5)                 * 결과 : 8




4) 함수의 심화 - 외부 매개변수(Argument Label)




// 외부 매개변수 Example 1. 선언 방법

 func functionName(labelname name: Type) -> ReturnType {

     contents

     return valueofReturn

     }


* labelname = 외부 매개변수(Argument Label), name : 파라미터(Parameter), 내부 매개변수




// 외부 매개변수 Example 2. 기본적으로 매개 변수는 매개 변수 이름을 인수 레이블로 사용 합니다.


Example.

func someFunction(firstParameterName : Int, secondParameterName: Int) {

    print(firstParameterName, secondParameterName)

}


someFunction(firstParameterName: 1, secondParameterName: 2)




// 외부 매개변수 Example 2. 외부 매개변수가 생략된 함수(Omitting Arguments Labels) : '_' 을 사용하여 생략한다.

func someFunction(_ firstParameterName : Int, secondParameterName : Int) {

    print(firstParameterName, secondParameterName)

}


// 

someFunction(firstParameterName : 1, secondParameterName : 2)  과 아래는 동일

someFunction(1, secondParameterName: 2

 * 매개변수명 생략. 파라미터명을 사용해줘도 되지만 생략된 외부 매개변수명 덕분에 그냥 1만 입력.





// 외부 매개변수를 활용한 함수(Specifying Argument Labels)

func someFunction(argumentLabel parameterName: Int) {  

 * (외부 내부매개변수: 타입) 순으로 선언

    print(parameterName)

}


* 함수 내부에서는 파라미터 명(parameterName)을 사용했고, 아래 외부에서는 외부 매개변수(argumentLabel)를 이용해 선언하였다.

someFunction(argumentLabel: 10)

                                                             



// 파라미터 값을 설정하여 사용한 함수 구문(Default Parameter Values)

func functionWithDefault(parameterWithoutDefault: Int, parameterWithDefault: Int = 12) -> Int {

    return parameterWithDefault

}



functionWithDefault(parameterWithoutDefault: 3, parameterWithDefault: 6)  

 * 뒷부분에 값을 수정하여 선언하였다.                     

functionWithDefault(parameterWithoutDefault: 4

 * parameterWithDefault 값이 선언되지 않았기 때문에 함수에서 선언한 그대로 12.





Question. 매개변수를 하나만 쓰면 되는건데, 왜 굳이 따로 나눠 쓰나요?


Answer. 여러가지 이유가 있겠지만, 그 중 하나는 내부적으로 함수를 모두 내 마음대로 작성했는데, 외부에서 보았을 때, 그 매개변수의 의미를 분명히 해주기 위한 이유도 있다.

 




5) 함수의 심화 - Variaric Parameters("파라미터의 개수를 여러 개 쓰고 싶은데, 몇 개가 들어갈지 잘 모르겠어요..." 일 때 쓸 수있는 방법)


* Variaric Parameters Example 1.


func arithmeticMean(_ numbers: Double...) -> Double {           * 앞선 경우와는 다르게 파라미터의 타입 뒤에 ... 이 붙으신거 보이시죠? 저렇게 쓰시면 됩니다.. 

    var total: Double = 0.0

    for number in numbers {

        total += number

    }

    return total / Double(numbers.count)

}


arithmeticMean(1, 2, 3, 4, 5)

arithmeticMean(3, 8.25, 18.75)

arithmeticMean(1, 2.5, 4, 8.5)        맨 위 파라미터 개수는 5개, 그 다음은 3개, 그 다음은 4개... 자기 맘대로 파라미터 개수를 늘려가며 사용하고 싶을 때 유용합니다.



// 위의 함수와 아래 함수의 차이를 구분해보자 !!!!!!!!!!!!!!



func arithmeticMean1(_ numbers: Double..., and last: Double) -> Double {  

    print(numbers)

    print(last)

    return last

}



Question. arithmeticMean1(1, 2, 3, 5) 을 사용하면 왜 오류가 발생할까?


Answer. 어디까지가 numbers 고 어디가 last 인지 알 수 없기 때문에, "Missing argument for parameter 'and' in call" 오류 발생



// 바로 위 함수와 아래의 함수를 비교해보자 !!!!!!!!!



func arithmeticMean2(_ numbers: Double..., and last: Double) -> Double { // numbers 가 파라미터

    print(numbers)

    print(last)

    return last

}


arithmeticMean2(1, 2, 3, and: 5)       




Question. 이 함수의 결과는 오류가 발생하지 않습니다. 왜일까요?


Answer. 1,2,3 이 numbers의 파라미터, 그리고 5가 and(last의 외부 파라미터명) 파라미터. 명시적으로 선언이 되었기 때문에 오류 발생하지 않는다.




이상으로 함수의 기본에 대해서 알아보았습니다 !


made by Inswag's Swift in FastCampus 7th iOS Development School












댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함