함수

  • 함수란? 프로그램이 실행되는 행동을 담당

함수 구현

func fName(parameterName: Type) -> Type {
    return value
}

//num1, num2 라는 정수값을 받아 정수로 반환하는 함수
func add(num1: Int, num2: Int) -> Int {
    return num1 + num2
}

//num1, num2 라는 정수값을 받아 아무것도 반환하지 않는 함수
func add(num1: Int, num2: Int) {
    print(num1 + num2)
}

//firstNum, secondNum 이라는 외부 매개변수명과 num1, num2라는 내부 변수명을 지닌 정수값을 받아 문자열로 반환하는 함수
func multiple(firstNum num1: Int, secondNum num2: Int) -> String {
    return "\(num1 * num2)"
}

//아무것도 받지 않고, 반환값도 없는 함수
func nothing() {
}
  • func: 함수를 생성하는 키워드
  • fName: 함수의 이름
  • parameterName: 매개변수 (Arguement가 없을시에는 parameter가 온다.)
  • Type: 매개변수의 타입, 반환값의 Type
  • return: 리턴값이 있는 경우 리턴하는 키워드 (반환값은 반환 타입과 같아야 한다.)
  • 그러나 리턴값과 매개변수의 타입이 반드시 같아야 하는 것은 아니다.
  • 함수는 매개변수의 제한은 없으나, 반환값은 한 개만 존재해야 한다. 만약 많은 반환값이 필요할 경우 배열, 사전, 튜플 등의 형식을 이용해야 한다.
  • 함수의 매개변수 명은 생략이 가능하며 리턴값도 생략이 가능하여 다양한 형태가 존재한다.

함수 응용

func test(score: Int...) -> Double {
    var result: Double = 0
    
    for i in score { //가변인자로 받은 score는 배열로 들어온다.
        result += Double(i)
    }
    return result / Double(score.count)
}

print(test(score: 10, 20, 30, 40, 50)) //30.0
  • 일반적으로 함수는 매개변수의 갯수가 지정되어 있지만, 가변 인자를 활용하여 값을 배열로 받을 수 있다.
func number(num1:Int, num2:Int = 10) -> Int {
    return num1 + num2
}
number(num1: 10)
//20
number(num1: 10, num2: 5)
//15
  • 매개변수에는 기본값을 설정할 수 있다.
  • 이 기본값은 인자로 값이 들어오지 않을 때 사용된다
var a: Int = 3
var b: Int = 1

func swapTwoInts(_ a: inout Int, _ b: inout Int) {
    let temporaryA = a
    a=b
    b = temporaryA
}

swap(&a, &b)
//a = 1, b = 3

swap(&3, &1)
//실행불가
  • 외부 매개변수명을 _ (와일드카드)로 선언하면 함수를 호출할때 인자값 레이블을 생략할 수 있다.
  • inout 키워드를 통해 매개변수를 통해 들어오는 값을 직접 변경할 수 있다.
  • inout 키워드 사용시 함수호출에 &을 붙인다.
  • & 키워드는 값이 아닌 주소값을 추출하기 때문에 값 자체를 바꿀 수 있다.
  • 직접 매개변수에 값을 입력하는 것은 불가능하다. (& 키워드는 주소값을 전달하기 때문에 리터럴인 3 혹은 1 값 자체는 전달이 불가능하다.)