inout 매개변수

hoBahk·2021년 10월 13일
0

inout

오늘은 inout 매개변수 사용법에 대해 공부해보도록 하겠습니다.

사용하는 이유 (효과)

함수의 매개변수는 기본적으로 상수입니다. 그래서 매개변수로 받아온 값을 수정할 수 없는데요.
이럴 때 사용하는 것이 inout 매개변수 입니다.
inout은 함수의 매개변수의 할당된 값을 변경하려고 할 때 사용합니다.
매개변수로 받아온 값을 함수 내에서 변경할 때 사용하는 것입니다.

사용법

사용법은 아래와 같습니다. (예시를 위해 급하게 만들어 허접합니다..)

func start(){
    var number = 0
    print(number)
    addOne(number: &number)
    print(number)
}

func addOne (number: inout Int){
    number += 1
}

start()

// 0
// 1

위와 같이 start()함수에서 선언한 number라는 변수를 addOne()이라는 함수에서 값을 변경할 때 inout을 사용합니다.
addOne()함수의 매개변수를 보시면 func addOne(number: inout Int) 처럼 inout 키워드를 매개변수의 타입 앞에 적어줍니다.
또한, start()함수에서 addOne(number: &number)를 보시면 함수를 호출할 때 변수 앞에 &를 적어줍니다.
수정될 수 있음을 나타내기 위해 표시해두는 것이라고 합니다.

동작 원리

inout 매개변수는 다음과 같이 동작합니다.

  1. 함수가 호출되면 인수 값이 복사됩니다.
  2. 함수 본문에 들어가게 되면 1번에서 복사 해둔 값이 수정됩니다.
  3. 함수가 반환되면 2번에서 변경된 복사본의 값이 원래 인수에 할당됩니다.

위와 같은 방식을 copy-in copy-out 또는 call by Value result 방식이라고 합니다.

주의할 점

  1. inout 매개변수를 사용하여도 상수로 선언된 것은 변경할 수 없습니다.
  2. inout 매개변수는 기본값을 가질 수 없으며 가변 매개변수로 표시할 수 없습니다.
  3. 메모리 안정성을 해칠 수 있습니다. (메모리 안정성에 관한 것은 다음에 소개 하겠습니다..)

[참고]

https://docs.swift.org/swift-book/LanguageGuide/Functions.html

profile
호박에 줄 그어서 수박 되는 성장 드라마

0개의 댓글