Swift Advanced
inout
파라미터에 참조 변수를 사용하는 문법. C언어로 치면 파라미터에 포인터를 할당한 것과 비슷하다.
특징 Thread-Safe 하므로 이 함수의 작업 중에 다른 스레드에서 이 파라미터(주소)의 값을 변경할 수 없다.
Example Code 아래는 a와 b를 스왑하는 함수인데 inout 참조를 통해 스왑이 가능하다. (메모리 주소값을 참조 하는 것)
func swapTwoInts(_ a: inout Int, _ b: inout Int) {
let temporaryA = a
a = b
b = temporaryA
}
// 사용 예제
var someInt = 3
var anotherInt = 107
swapTwoInts(&someInt, &anotherInt) // & 를 통해 주소를 참조한다.
inout 참고자료 Functions - Inout Parameters
Generics
어떠한 로직이 있을 때 타입 또는 프로토콜에 상관없이 재사용가능한 코드.
Generic 미사용의 경우 같은 로직의 메소드를 타입마다 오버로딩 해주어야한다. (오버로딩: 같은 이름의 함수를 동일하지 않은 파라미터로 여러개 구현 하는 것)
func swapTwoStrings(_ a: inout String, _ b: inout String) {
let temporaryA = a
a = b
b = temporaryA
}
func swapTwoDoubles(_ a: inout Double, _ b: inout Double) {
let temporaryA = a
a = b
b = temporaryA
}
Generic을 사용하면 메소드 하나로 타입에 상관없이 사용할 수 있다.
func swapTwoValues<T>(_ a: inout T, _ b: inout T) {
let temporaryA = a
a = b
b = temporaryA
}
명명 Type의 첫글자인 T, U, V … 이렇게 짓는 것이 관용적이고, 두 이름의 관계가 있는경우 Swift의 *Dictionary