함수(Function)2

황인호·2022년 11월 9일
0

iOS 기초 문법

목록 보기
9/10

overloading

overload(과적하다)는 하나의 함수 이름에 여러개의 함수를 대응시키는 것이다.

func doSomething(value: String) { 
	print(value)
}
func doSomething(value: Int) { 
	print(value)
}
func doSomething(value: Double) { 
	print(value)
}
func doSomething(value1: Int, value: String) { 
	print(value1, value2)
}

doSomething(value: "안녕")
doSomething(value: 1)
doSomething(value1: 2,value2: "한")

오버로딩을 지원 안하게 되면 함수마다 새롭게 정의해 줘야한다. doSomeInt, doSomeString 이런식으로 각각 정의 해줘야 하고 호출 할 때 마다 함수 이름별로 호출 해줘야 해서 불편할 수도 있다. 오버로딩을 지원하게 되면 위처럼 보기 편하게 정리가 가능하다. 함수이름, 파라미터 수, 아규먼트 레이블, 리턴형을 모두 포함해서 함수를 식별할 수 있다.

inout 파라미터

스위프트에서 함수의 파라미터는 값타입이므로 값을 복사해서 사용하므로 함수 내부에서 파라미터의 값을 변경할 수 없다. 만약 함수에서 파라미터의 값을 변경하려고 하면 컴파일 에러가 발생할 것이다. 이런 파라미터 값을 함수가 종료된 후에도 유지하고 싶으면 변수의 주소값을 직접 넘겨주는 참조타입인 inout 파라미터를 쓰면 된다. 참조타입은 메모리 주소를 전달하기 때문에 가능하다.

var a = 1
var b = 2

func swapNumber(a: inout Int, b: inout Int) {
	var temp = a
	a = b
    b = temp
}

swapNumber(a: &num1, b: &num2)       	함수를 실행할 때 변수 앞에 &(앰퍼샌드:원본이 전달됨) 기호를 붙여서 사용 해준다. 
print(num1)
print(num2)

inout 파라미터를 사용할 때 주의할 점이 있는데 상수(let)와 메모리 주소를 전달하기 때문에 리터럴(&뒤 입력값에 직접적으로 값을 입력)은 사용을 못한다. 그리고 당연히 함수에 기본값을 설정해 줄 수 없다.
마지막으로 가변파라미터도 사용을 할 수 없다.

profile
비전공자 iOS 개발 공부

0개의 댓글