Swift - Function 4

 

Swift의 함수 정리 4 - In-Out Parameter, 함수의 Type

Function - 4


In-Out Parameters

  • 함수의 매개변수는 기본적으로 상수이다(함수 내에서 이 값을 변경하면 컴파일 에러 발생).
  • 만일 함수의 매개변수를 수정하거나 함수 호출 후에도 매개변수의 값을 변경된 값으로 유지하고자 한다면 매개변수를 in-out으로 지정해야 한다.
  • in-out 매개변수는 매개변수 type 오른쪽 앞에 inout 키워드를 이용하여 만든다.
  • in-out 매개변수로 전달된 값은 함수 내에서 수정 가능하며 함수 밖의 원래 값도 바꿀 수 있다.
  • 함수를 호출 할 때 in-out 매개변수는 변수로만 전달 가능하고 상수나 값 자체를 전달할 수 없다.
  • in-out 매개변수에 대한 인자를 명시적으로 전달할 때 인자 이름 앞에 &를 붙인다.

in-out 매개변수는 기본값을 가질 수 없으며 가변인자는 inout 키워드를 붙일 수 없다.

func swapTwoint (_ a: inout int, _ b: inout int) {
	let temporaryA = a
	a = b
	b = temporaryA
}

var someInt = 3
var anotherInt = 107

swapTwoint(&someInt, &anotherInt)
print("someInt is now \(someInt), and anotherInt is now \(anotherInt)")
// someInt는 107이, anotherInt는 3이 출력됨

in-out 매개변수는 함수의 리턴과는 다른 방식으로 함수 밖에서 할당된 변수의 값을 변경할 수 있다.

함수의 Type

  • 모든 함수는 매개변수와 리턴 type에 따라 독자적인 함수 type을 갖는다.
func addTwoInts(_ a: int, _ b: int) -> int {
	return a + b
}

func multiflyTwoInts(_ a: int, _ b: int) -> int {
	return a * b
}

func printHelloWorld() {
	print("Hello, World")
}
  • 앞의 두 함수는 (int, int) -> int로 표시할 수 있으며 “모두 int type인 두 개의 매개변수를 갖고 반환값이 int type인 함수”라고 읽을 수 있다.
  • 세 번째 함수는 () -> Void로 표시하고 “매개변수가 없고 Void를 반환하는 함수”라고 읽을 수 있다.

함수 Type의 이용

  • 함수 Type은 Swift의 다른 Type과 동일하게 사용할 수 있다.
Var mathFunction: (int, int) -> int = addTwoInts
  • 위 코드는 “mathFunction라는 변수를 ‘모두 int type인 두 개의 매개변수를 갖고 반환값이 int type인 함수’ Type으로 정의하고 이 새로운 변수가 addTwoInts 함수를 참조하도록 하였다”라고 표현할 수 있다.
  • addTwoInts(_:,_) 함수는 mathFunction 변수와 동일한 Type을 가지고 있기 때문에 할당시 Swift의 type-checker에 의해 통과된다.
  • 이제 mathFunction 변수를 addTwoInts(_:,_) 함수 대신 사용 가능하다.
print(Result: \(mathFunction(2, 3)))
// “Result: 5” 출력
  • 동일한 타입을 갖는 다른 함수도 할당 가능하다.
mathFunction = multiflyTwoInts
print(Result: \(mathFunction(2, 3)))
// “Result: 6” 출력
  • 다른 Type들과 마찬가지로 함수를 상수나 변수에 할당할 때 Swift는 알아서 Type을 유추하게 된다.
let anotherMathFunction = addTwoInts
// anotherMathFunction는 Swift가 (int, int) -> int Type으로 유추한다.