iOS/iOS 앱 개발 올인원 패키지 Online

[iOS] 패스트캠퍼스 챌린지 9일차 - Function(2)

듀IT 2021. 9. 14. 18:05

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줄을 넘기지 않도록 한다. 함수는 최대한 순수하게!!

 

오늘의 공부 모습

 

https://bit.ly/37BpXiC

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.