제네릭 공부할 때 처음 본 inout
예시:
func swapValues<T>(_ a: inout T, _ b: inout T) {
let temp = a
a = b
b = temp
}
저기서 inout
이 뭔가 했더니, 원래 let
으로 설정되는 함수의 파라미터를 변수처럼 만들어주는 키워드였다.
스위프트에서는 함수 파라미터가 기본적으로 let
으로 선언돼서 함수 내부에서 변경할 수 없다. 그래서 초반에 프로그래머스에서 오류 겁나 냄...
하지만!!!!! inout
키워드를 사용하면 함수의 파라미터를 마치 변수처럼 사용해서 값을 변경할 수 있다. 이렇게 하면 함수 내부에서 파라미터의 값을 직접 수정하고, 그 수정된 값이 함수 호출이 끝난 후에도 유지된다.
inout
키워드를 사용하면 파라미터를 변수처럼 사용해서 값을 변경할 수 있어.
func modifiableParameter(_ number: inout Int) {
number += 1 // number 값을 변경 가능
}
var value = 5
modifiableParameter(&value)
print(value) // 6
위 예제에서 modifiableParameter
함수는 inout
파라미터를 사용해서 number
의 값을 변경할 수 있다.
❗️ 또한, inout 파라미터를 사용한 함수는 호출될 때 &
를 사용해서 변수의 참조를 전달해야 한다
modifiableParameter(value)
이렇게만 작성하면 컴파일 오류가 납니다.