Danny의 iOS 컨닝페이퍼
article thumbnail

inout 파라미터

함수의 파라미터는 기본적으로 값타입입니다.

파라미터는 임시 상수(let)이기 때문에 변경 불가능 하죠.

 

그러므로 아래와 같이 전역변수를 함수 안에서 그냥 변경할 순 없습니다.

var firstInt = 10
var secondInt = 20

func swap(_ a: Int, _ b: Int) {
    var temp = a        
    a = b               
    b = temp          
}

swap(firstInt, secondInt)

// error: Cannot assign to value: 'a' is a 'let' constant
// error: Cannot assign to value: 'b' is a 'let' constant

 

만약 inout 파라미터를 사용한다면

inout 파라미터는 함수 내에서 변수를 직접 변경하겠다는 의미입니다.

inout워드는 참조로 값을 전달한다는 의미이기 때문에 직접 변수의 주소를 갖고 값을 변경시킬 수 있습니다.

또한 호출 시 명시적으로 &(앰퍼센트)를 사용하여 참조하였다는 걸 컴파일러에 알려 버그를 방지해야 합니다.

var firstInt = 10
var secondInt = 20

func swap(_ a: inout Int, _ b: inout Int) {
    var temp = a        // 참조 타입이기 때문에 아래와 같습니다.
    a = b               // firstInt = b
    b = temp            // secondInt = temp
}

swap(&firstInt, &secondInt)
print("firstInt is now \(firstInt), and secondInt is now \(secondInt)")

// firstInt is now 20, and secondInt is now 10

 

 

간단 요약

 

💡 inout 매개변수앰퍼샌드(&)

함수의 매개변수는 기본적으로 상수인데, 이 매개변수 값을 해당 함수의 본문 내에서 변경하려 하면 컴파일 오류가 생깁니다. 함수에서 매개변수의 값을 수정하고 함수 호출이 종료된 후에도 변경 사항을 유지하려면 inout 파라미터를 사용하면 됩니다.

inout 매개변수는 함수에 전달된 값을 가지며, 함수에 의해 수정되며 원래 값을 대체하기 위해 함수에 다시 전달되죠.

inout 매개변수는 변수 var 에만 전달할 수 있고, 상수 및 리터럴은 수정 불가하므로 인수로 전달할 수 없습니다. 변수 이름 앞에 앰퍼샌드(&)를 사용해 수정될 수 있음을 나타내야 됩니다.

 

 

부족한 설명이지만, 조금은 이해 가셨나요?

틀린 내용이 있다면 언제든지 지적해 주시면 감사히 받겠습니다. 🫠
읽어주셔서 감사합니다 😃

 

반응형

'Xcode > Swift 문법' 카테고리의 다른 글

[iOS/Swift] 속성 감시자 (Observed Properties)  (0) 2023.01.04
[iOS/Swift] Class와 Struct  (0) 2022.12.28
[iOS/Swift] 고차함수  (0) 2022.12.27
[iOS/Swift] 타입에일리어스(typealias)  (0) 2022.12.27
[iOS/Swift] “ = “ 의미  (0) 2022.12.26
profile

Danny의 iOS 컨닝페이퍼

@Danny's iOS

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!