본문 바로가기
모바일앱/Swift

함수의 고급기능(1. 오버로드 2. In-out parameter 3. 함수안에 함수를 넣기)

by GeekCode 2021. 10. 6.
반응형

 

기본적인 함수의 구조

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줄 이하라는 제약을 걸어서 함수를 가장 순수하게 만들어가는 고민을 하도록 하자. 고민은 실력이 될것이다.

반응형

'모바일앱 > Swift' 카테고리의 다른 글

Collection - Dictionary  (0) 2021.10.10
Collection - Array  (0) 2021.10.09
옵셔널 도전과제  (0) 2021.10.08
옵셔널  (0) 2021.10.07
기본함수사용능력 테스트  (0) 2021.10.06
함수 응용하기  (0) 2021.10.05
함수 기본  (0) 2021.10.04
21.9월.5주 복습(월) - 플로우 컨트롤  (0) 2021.10.04