모바일앱/Swift
함수의 고급기능(1. 오버로드 2. In-out parameter 3. 함수안에 함수를 넣기)
GeekCode
2021. 10. 6. 18:34
반응형
기본적인 함수의 구조
func functionName(param: ParamType) -> ReturnType {
//.....
return returnValue
}
//external name을 사용하는 경우
func functionName(externalName param: ParamType) -> ReturnType {
//.....
return returnValue
}
1. 오버로드
같은 함수의 이름을 갖지만 파라미터나 리턴이 달라지는 경우가 있는데 그럴때 오버로드가 사용된다.
사실 오버라이딩, 오버로딩은 Swift에 국한된 게 아니라, 객체지향 프로그래밍에서 쓰이는 개념이다 -> 키워드 오버라이드 오버로드
override, overload
func sum() { }
func sum() { } // Invalid redeclaration of 'sum()'
//같은 함수를 사용하면 중복이라는 경보가 뜬다
func sum() { }
func sum(n: Int) { }
func sum() -> Int { return 0 }
//같은 함수의 이름을 갖지만 파라미터나 리턴이 달라지는 경우 -> 오버로드
//음료자판기가 있는데 한국용과 미국용으로 만든다면?
//한국용
func printTotalPrice(price: Int, count:Int){
print("Total Price: \(price * count)")
}
//미국달러 -> 소숫점을 표현해야하는 경우
func printTotalPrice(price: Double, count:Double){
print("Total Price: \(price * count)")
}
//param을 유니코드
func printTotalPrice(가격: Double, 갯수: Double){
print("Total Price: \(가격 * 갯수)")
}
2. In-out parameter
함수에 parameter에 들어가는 순간 constant가 된다. parameter값을 증감시키고 싶을 때 사용
//in-out parameter
//함수에서 파라미터에 1을 더하는 함수
//func incrementAndPrint(_ value: Int){
// value += 1
// print(value)
//}
// 파라미터에 들어가는 순간 이녀석은 constant가 된다. 그렇기 때문에 +=를 적용할수 없다.
var value = 3 //초기값
func incrementAndPrint(_ value: inout Int){
value += 1
print(value)
}
incrementAndPrint(&value) //& 기입하기
3. 함수안에 함수를 넣기
//변수의 인자로 함수를 넣는 방법
//보통은 인자로 value만 넣었지만 현대의 문법은 함수자체를 넣기도 한다.
// --------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)
//a와 b를 받아서 function에 넘겨주면 그에 대한 result를 프린트 해주는 함수
func printResult(_ function: (Int, Int) -> Int, _ a: Int,_ b: Int) {
let result = function(a,b)
print(result)
}
printResult(add, 10, 5)
// function에 add함수가 들어오고 10, 5를 받아서 계산됨
printResult(subtract, 10, 5)
//추가로 곱셈 나눗셈도 해보기
func multiple(_ a:Int, _ b: Int) -> Int{
return a * b
}
printResult(multiple, 10, 5)
func divide(_ a: Int,_ b: Int) -> Int {
return a / b
}
printResult(divide, 10, 5)
강사님의 마지막 코멘트는 실무에서 근본적으로 생각하는 것은 되도록 한가지 일만 할 수 있도록 만들라는 것이었다. 되도록 10줄 이하라는 제약을 걸어서 함수를 가장 순수하게 만들어가는 고민을 하도록 하자. 고민은 실력이 될것이다.
반응형