Swift의 함수는 매개변수를 어떻게 정의하냐에 따라서 모습이 크게 달라질 수 있습니다. 매개변수에 따라 함수의 모양과 기능이 어떻게 바뀌는지 알아보려고 합니다.
inout 파라미터가 무엇인지 알기 전에, 우리는 함수에 전달되는 파라미터가 값타입인지 참조타입인지(이 부분은 뒤에서 자세히)에 따라 어떻게 달라지는지를 알아야 된다.
→ 값타입은 Int, String같은 자료형으로 볼 수 있다. 값타입으로 전달된 것은 상수값이라고 했음. 즉 함수 내부에서 바뀔 수가 없다.
func iLoveU(name: String) {
name = "류희재" //error: Cannot assign to value: 'name'is a 'let' constant
print("나는 \\(name)을 사랑합니다")
}
→ 참조 타입은 클래스, 클로저 등이 있다. 참조타입의 값을 파라미터로 전달할 경우, 참조로 전달된다. 즉 함수 내부에서 전달된 인스턴스의 프로퍼티를 변경할 경우 변경이 가능하다.
(진짜 자세한 내용은 나중에 값타입 vs 참조타입에서 다루겠습니다. 일단은 이렇게 알고 가자!)
func iLoveU(human: Human) {
human.name = "류희재"
print("나는 \\(human.name)을 사랑합니다")
}
결론적으로 말하자면 inout 파라미터는 값 타입의 파라미터 값을 참조로 전달하는 방법이다!
해당 함수의 바디 내에서 함수 파라미터 값을 변경하려고 하면 컴파일 타입 에러가 발생한다. → 실수로 파라미터의 값을 변경할 수 있음을 방지 BUT. 함수의 파라미터 값을 변경하고 함수 호출이 종료된 후에도 이러한 변경된 값을 유지하고 싶다 이때 사용하는 것이
inout 파라미터!!!
inout
키워드를 작성&
를 사용하여 해당 값이 함수내부에서 변경될 것을 알려준다!