본문 바로가기
IOS - Swift

Swift 기초문법 - In-out Parameters

by 게게겍 2022. 9. 15.

📖 In-out Parameters

📌 In-out Parameter (인-아웃 파라미터)

swift 내 함수에서의 파라미터는 상수이므로, 함수 내에서 파라미터의 값을 변경하는 것은 불가능합니다. (실수로라도 파라미터의 값을 변경시킬 수 없습니다.) 하지만 In-out 파라미터 를 활용하면 함수 안에서 파라미터의 값을 변경하고, 함수 호출이 종료된 이후에도 변경된 값이 지속되게 됩니다.

inout 매개변수는 다음의 과정을 거치게 됩니다.
  1. 함수가 호출되면, 매개변수로 넘겨진 변수가 복사된다.
  2. 함수 몸체에서, 복사한 값을 수정한다.
  3. 함수가 반환될 때, 변화된 값을 원본 변수에 재할당한다.

이 동작을 copy-in copy-out 혹은 다른언어에서의 call by value result 라고 불리게 됩니다.


가장 일반적인 함수입니다.

func sayName(_ Name: String) {
   print("안녕! 나는 \(Name)라고 해.")
}
sayName("코더")

>>> 안녕! 나는 코더라고 해.

Cannot assign to value: 'Name' is a 'let' constant

 

값을 임의로 변경하려 할 때, 파라미터가 상수이므로 변경할 수 없다는 경고창이 떴습니다.


💬 이를 해결하기 위해 inout 을 자료형 앞에 적으면 값을 변경할 수 있습니다.

func sayHI2(_ Name: inout String) {
    Name = "개발하는 " + Name
   print("안녕! 나는 \(Name)라고 해.")
}

💬 값을 집어넣을 때는 파라미터 앞에 & 를 붙여야 합니다.

sayHI2(&name)

>>> 안녕! 나는 개발하는 후니라고 해.