Swift

Function

dion_K 2020. 11. 12. 18:15
728x90

안녕하세요:)

 

오늘은 Function에 대해서 알아보도록 할게요!!

 

Function은 프로그램의 실행 과정 중에서 독립적으로 처리될 수 있는 부분을 분리하여 구조화한 객체를 의미합니다.

이렇게 독립적으로 작성된 함수는 여러 번 호출하여 사용할 수 있어서 같은 코드를 작성할 필요가 없다는 장점을 가지고 있습니다.

그럼 Swift에서 사용하는 Function에 대해서 알아볼까요?

 

1. Function

  • 함수는 특정 기능을 수행하는 코드 조각입니다.
  • 파라미터와 리턴 값을 생략할 수 있습니다.
  • 함수의 파라미터는 하나도 없을 수도 있고, 하나 이상일 수도 있습니다.
  • 함수를 사용하면 코드의 가독성이 좋아지고 불필요한 코드의 반복을 줄일 수 있습니다.
  • 코드를 변경해야 할 때 함수 내부만 수정하면 되므로 유지 보수가 용이해집니다.
  • 함수를 만들 때 함수 이름은 lowerCamelCase로 만들고, 직관적인 이름을 사용하는 것이 좋습니다.
func name(parameters) -> ReturnType { // function Head
    statement // function body
}
name(parameterts) // 함수 호출

< 매개변수와 리턴값이 없는 함수 >

func printHello() {
    print("안녕하세요")
}
printHello() // 안녕하세요

2. Return Value

  • 함수에 리턴형이 선언되어 있다면 리턴 다음 표현식을 평가 후 그 결과를 반환해 줍니다.
  • 반환 타입이 지정되면 반드시 그 타입에 맞는 값을 반환해야 합니다.
  • nil을 반환하려면 함수의 반환 타입이 반드시 옵셔널 타입으로 정의되어 있어야 합니다.
  • 함수 호출식이 표현식이고, 함수가 리턴하는 값은 표현식의 결과가 됩니다.
  • return은 함수의 실행을 중지합니다.
func add() -> Int {
    return 10 + 20
}
add() // 30

func sayHello() -> String {
    return "반가워요"
}
sayHello() // 반가워요

func doSomething() {
    let r = Int.random(in: 0...100) // 1~100까지의 랜덤 숫자 생성
    
    if !r.isMultiple(of: 2) {
        return // r이 홀수이면 함수의 실행을 중지
    }
    
    print(r)
}
doSomething()

 

3. Parameter

  • 파라미터는 함수 내부에서 사용할 수 있는 임시 상수입니다.
  • 파라미터는 함수가 실행될 때 실행되고, 실행이 완료되면 자동으로 삭제됩니다.
  • 파라미터에 기본값을 지정할 수 있고, 기본값을 가지고 있다면 생략이 가능합니다.
  • 파라미터 이름은 함수 바디에서 함수로 전달된 값에 접근할 때 사용합니다.
  • 파라미터의 스코프는 함수 바디로 제한됩니다.
  • 파라미터는 함수를 호출할 때 생성되고, 함수의 실행이 종료되면 자동으로 삭제됩니다.
func name(매개변수: 자료형...) {
    statement
}

func add(a: Int, b: Int) -> Int {
    // ex) a = 10 파라미터는 함수 바디에서 사용할 수 있는 임시 상수입니다. 값 변경 불가!
    return a + b
}
add(a: 10, b: 20) // 30

func echo(message: String, newline: Bool = true) { // 기본값 저장 
    if newline == true {
        print(message, true)
    } else {
        print(message, false)
    }
}

4. Argument Label

  • name : Type  파라미터 이름이자 Argument 이름입니다.
  • Label name : Type  Label이 Argument 이름입니다.
  • Argument Label을 사용하는 이유는 함수 이름의 가독성을 높이기 위해 사용하고, 파라미터의 역할을 구분하기 위해서 사용합니다.
  • 함수를 호출할 때 Argument 이름을 사용합니다.
  • 언더 스코어( _ ) 를 사용해서 생략할 수 있습니다.
  • Argument -> 실제로 전달하는 값입니다.
  • parameter -> 함수 안에서 사용하는 값입니다.
func printHello(name: String, msg: String) {
    print("\(name)님, \(msg)")
}
printHello(name: "동구", msg: "안녕하세요") // 동구님, 안녕하세요

func printHello(to name: String, welcome msg: String) {
    print("\(name)님, \(msg)")
}
printHello(to: "동구", welcome: "안녕하세요") // 동구님, 안녕하세요

func sayHello(_ name: String) { //Argument를 와일드카드 패턴으로 생략했습니다.
    print("Hello, \(name)")
}
sayHello("Swift") // Hello, Swift

5. Variadic parameter

  • 하나의 파라미터로 두 개 이상의 Argument를 전달할 수 있습니다.
  • Argument는 배열 형태로 전달됩니다.
  • 가변 파라미터는 개별 함수마다 하나씩만 선언할 수 있습니다.
  • 가변 파라미터는 기본값을 가질 수 없습니다.
func sum(_ nums: Int...) {
    var sum = 0
    for num in nums {
        sum += num
    }
    print(sum)
}
sum(1, 2, 3, 4, 5) // 15 Argument 5개

 

728x90