[iOS] 패스트캠퍼스 챌린지 9일차 - Function(2)
Function 고급 기능
오버로드
함수의 이름은 같지만 다양한 리턴 타입, 파라미터 타입, 개수 등으로 다른 함수.
func printTotalPrice(price: Int, count: Int){
print(" Total price: \(price * count)")
}
func printTotalPrice(price: Double, count: Double){
print(" Total price: \(price * count)")
}
func printTotalPrice(가격: Double, 갯수: Double){
print(" Total price: \(가격 * 갯수)")
}
In-out parameter
기본적으로 swift에서 파라미터 value는 값이 copy 되어서 들어오되, 그 타입이 constant이다. 즉 파라미터로 들어온 값은 변경할 수 없다. 변경을 하려면 함수 내부에서 지역변수를 선언하고 대입하는 과정이 필요하다. 하지만 지역변수는 함수를 벗어나는 순간 사라진다. 함수 내외에서 값의 변화를 유지하기 위해서는 inout을 사용하면 된다. inout은 함수 내에서의 변화를 반환 값 이외의 방법으로 전달하는 방법이다. 즉 inout 키워드를 파라미터 타입 앞에 붙이면 값을 변화시키겠다는 일종의 선언을 한 것이다. 따라서 상수나 리터럴을 넘길 수 없다.
inout의 원리는 다음과 같다. copy-in copy-out 방식이다.
1. 함수가 호출되면 매개변수로 넘겨진 변수는 복사된다.
2. 함수 몸체에서 복사했던 값을 변화시킨다
3.함수가 반환될 때, 이 변화된 값을 원본 변수에 재할당한다.
var value = 3
func incrementAndPrint(_ value: inout Int){
value += 1
print(value)
}
incrementAndPrint(&value) // inout 파라미터에 값을 넘길 땐 &표시를 붙여야 한다.
함수의 인자로 함수 자체를 넘기는 방법
함수를 파라미터로 넘길 때 같은 타입의 함수를 파라미터로 넘겨야 한다.
// Function as a param
func add(_ a: Int, _ b: Int) -> Int {
return a+b
}
func subtract(_ a: Int, _ b: Int) -> Int {
return a - b
}
var function = add // 함수 자체를 변수에 할당할 수 있다.
function(4,2)
function = subtract
function (4,2)
func printResult(_ function: (Int, Int) -> Int, _ a: Int, _ b: Int) {
let result = function(a, b)
print(result)
}
printResult(add, 10, 5) // 15
printResult(subtract, 10, 5) // 5
함수를 짤 때는 하나의 함수가 하나의 기능을 하도록 한다. 10줄을 넘기지 않도록 한다. 함수는 최대한 순수하게!!
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.