1. 파라미터 집중 탐구

Swift의 함수는 매개변수를 어떻게 정의하냐에 따라서 모습이 크게 달라질 수 있습니다. 매개변수에 따라 함수의 모양과 기능이 어떻게 바뀌는지 알아보려고 합니다.

2. inout 파라미터

inout 파라미터가 무엇인지 알기 전에, 우리는 함수에 전달되는 파라미터가 값타입인지 참조타입인지(이 부분은 뒤에서 자세히)에 따라 어떻게 달라지는지를 알아야 된다.

2-1. 파라미터 ⇒ 값타입 vs 참조타입?

2-1-1. 파라미터로 전달되는 Value 타입의 값은 복사된 상수 값이다

→ 값타입은 Int, String같은 자료형으로 볼 수 있다. 값타입으로 전달된 것은 상수값이라고 했음. 즉 함수 내부에서 바뀔 수가 없다.

func iLoveU(name: String) {
		name = "류희재" //error: Cannot assign to value: 'name'is a 'let' constant
		print("나는 \\(name)을 사랑합니다")
}

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

→ 참조 타입은 클래스, 클로저 등이 있다. 참조타입의 값을 파라미터로 전달할 경우, 참조로 전달된다. 즉 함수 내부에서 전달된 인스턴스의 프로퍼티를 변경할 경우 변경이 가능하다.

(진짜 자세한 내용은 나중에 값타입 vs 참조타입에서 다루겠습니다. 일단은 이렇게 알고 가자!)

func iLoveU(human: Human) {
		human.name = "류희재"
		print("나는 \\(human.name)을 사랑합니다")
}

2-2. inout 파라미터?

결론적으로 말하자면 inout 파라미터는 값 타입의 파라미터 값을 참조로 전달하는 방법이다!

해당 함수의 바디 내에서 함수 파라미터 값을 변경하려고 하면 컴파일 타입 에러가 발생한다. → 실수로 파라미터의 값을 변경할 수 있음을 방지 BUT. 함수의 파라미터 값을 변경하고 함수 호출이 종료된 후에도 이러한 변경된 값을 유지하고 싶다 이때 사용하는 것이

inout 파라미터!!!

2-2-1. inout 파라미터 사용하기!