jane1choi / TIL

Today I Learned #심야아요

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[Swift] In-Out Parameters

jane1choi opened this issue · comments

우리말로 입출력 파라미터라고도 불리는 In-Out Parameters는 Value 타입(값 타입)의 값을 Reference 타입의 값처럼 참조로 전달하는 방법입니다.

파라미터로 전달되는 Value 타입의 값은 복사된 상수 값

값 타입 vs 참조 타입 에서도 정리했듯이 Value 타입의 값(struct로 정의된 일반적인 자료형의 값)은 복사되어 전달됩니다.
또한, Swift 함수는 기본적으로 함수의 모든 인자가 함수를 호출할 때. 상수로 호출됩니다.
-> 파라미터로 전달되는 Value 타입의 값은 복사된 상수 값이므로 파라미터로 넘어온 값은 바꿀 수 없습니다.

스크린샷 2022-06-09 오후 10 44 30

위와 같이 함수 내부에서 파라미터로 받은 값을 변경하려고 하면 오류가 발생하는 것을 확인할 수 있습니다.

파라미터로 전달되는 Reference 타입의 값은 참조된다

파라미터로 클래스의 인스턴스와 같은 Reference(참조) 타입이 전달될 경우에는 복사된 상수 값이 아닌 주소값이 전달됩니다!
그렇기 때문에 만약 다음과 같이 함수 내부에서 전달된 인스턴스의 프로퍼티를 변경하면

스크린샷 2022-06-09 오후 11 11 13

위와 같이 jane이라는 인스턴스의 프로퍼티 값이 변경됩니다!

왜냐하면 인스턴스는 Reference타입이므로 참조에 의한 전달이 되었기 때문입니다!

In-Out Parameters

위에 간단히 설명했듯이 우리말로는 입출력 파라미터라고도 하는 In-Out Parameters는 Value 타입의 값을 Reference 타입의 값처럼
참조로 전달하고 싶을 때 사용하는 파라미터로, 선언은 다음과 같이 합니다.

(name: inout Type)

사용방법

  1. 함수 파라미터 선언 시 타입 앞에 inout 키워드 붙여주기
func sayHello(name: inout String) { }

입출력 파라미터로 사용하고 싶다면, 함수 선언 시 위와 같이 파라미터 type 앞에 inout 키워드를 붙여줍니다.

  1. 함수 호출 시 전달인자 앞에 & 붙여주기
sayHello(name: &name)

입출력 파라미터를 사용해 참조로 값을 전달해주기 위해서는 함수를 호출할 때 전달인자 앞에 &를 붙여주어야 합니다.

사용방법을 따라서 예시코드를 작성해보면,

스크린샷 2022-06-09 오후 11 31 22

name의 값이 sayHello() 함수에 의해 변경된 값으로 print가 찍히는걸 확인할 수 있습니다!

주의할 점

⚠️ inout 파라미터는 파라미터 기본값 설정, 가변 파라미터 등을 지원하지 않습니다.
따라서 함수 호출 시 파라미터 생략이 불가능하며, 정해진 개수의 파라미터만 넘길 수 있습니다.