Swift문법 - (7)함수

Youth·2022년 9월 18일
0

swift문법공부

목록 보기
7/27
post-thumbnail
post-custom-banner

함수(Function)의 기본

  • "특정한 작업(기능)"을 수행하는 코드의 묶음에 이름을 부여하여 사용하는 것

함수는 항상 2단계로 실행

// 1) 함수 정의문

func sayhello() {
    print("Hello, world!")
    print("Hello, Swift!")
    print("Hello, what's up, bro!")
}

// 2) 함수 실행문(call)
// 소문자로 시작하고, 뒤에 () 소괄호(퍼렌서시스)가 오면
// 이것은 함수의 실행문이라는 것을 인지해야 함

sayhello()
⭐️소괄호 ()는 함수의 실행

Void타입의 이해(아웃풋이 없는경우)

//sayhello1함수는 Input도 없고 Output도 없는 상태
func sayhello1() -> Void {
    print("Hello, Swift!")
}
          =

func sayhello1() {
    print("Hello, Swift!")
}

함수의 파라미터, 아규먼트

plusFunction(a: 5, b: 7)

  • 파라미터(parameter) : 함수의 정의에 입력값으로 사용돼는 변수 - a,b
  • 아규먼트(argument) : 함수의 호출에 사용되는 실제 값 - 5,7
  • 아규먼트레이블
func printName1(first name: String) {
    print("나의 이름은 \(name) 입니다.")
}
//원래 파라미터는 name인데 아규먼트 레이블을 사용해 input을 first로 받는다

printName1(first: "뉴턴")
//first는 아규먼트레이블을 사용한 "파라미터"
//"뉴턴"은 아규먼트

//아규먼트레이블을 생략하는 와일드카드패턴을 사용할 수있음
func addPrintFunction(_ firstNum: Int, _ secondNum: Int) {
    print(firstNum + secondNum)
}
addPrintFunction(1, 2)
  • 가변파라미터(파라미터에 여러가지 값을 넣을 수 있음) - 기본값을 가질 수 없다
func arithmeticAverage(_ numbers: Double...) -> Double {
     //Double...의 뜻은 "Double형식의 아규먼트를 2개이상 전달하겠다"
    var total = 0.0
    for n in numbers {
        total += n
    }
    return total / Double(numbers.count)
}

arithmeticAverage(5, 6, 7, 8, 9)
//함수의 파라미터에 기본값을 정할 수 있다
func numFunction(num1: Int, num2: Int = 5) -> Int {
    var result = num1 + num2
    return result
}

numFunction(num1: 3)
numFunction(num1: 3, num2: 7)

seperator & terminator

  • seperator : 각각의 item사이에 어떤 요소를 넣을지
  • terminator : 한번의 실행이 끝나면(끝에) 뭘 넣을지

⭐️함수사용시 주의할점

함수 파라미터에 대한 정확한 이해

func someAdd(a: Int) -> Int {
    // let a: Int   (값의 변경이 불가능)
    // 아규먼트값을 파라미터(상수)에 바인딩한다는 개념
    a = a + 1
    // 이상황에서 a라는 값 자체가 변하기 때문에 오류발생
    // var b = a 로 선언해서 변수b를 사용해야 가능
    // b = b + 1
    // return b
    return a
}

someAdd(a: 5)

함수 내의 변수의 범위

func sumOfNum(a: Int) -> Int {
    var sum = 0
    sum += a
    return sum
}

//내부 변수를 밖에서 선언이나 사용 불가능
sum

return키워드의 정확한 이해

// 리턴타입이 있는 함수의 경우엔 return이 값을 리턴하고 함수를 끝낸다는 의미
// 리턴타입이 없는 함수의 경우엔 return이 함수를 끝낸다는 개념
// 결국 return은 함수를 끝낸다는 의미

func numberPrint(n num: Int) {
    if num >= 5 {
        print("숫자가 5이상입니다.")
        return
        // 함수가 끝나는 개념
        // return이 없으면
        // 숫자가5이상입니다, 숫자가 5미만입니다 둘다 출력됨
    }
    print("숫자가 5미만입니다.")
}

함수의 표기법, 함수의 타입 표기

  • 함수를 가리키려는 경우 어떻게 해야할까?
// 함수의 표기법(함수를 지칭시)
func doSomething() {
    print("출력")
}

func numberPrint(n num: Int) {
    
    if num >= 5 {
        print("숫자가 5이상입니다.")
        return
    }
    print("숫자가 5미만입니다.")
}

// 1) 파라미터가 없는 경우, ()를 삭제

//함수를 가리키는 경우
var some = doSomething
//가리킨 함수를 실행시키는 경우
some()

// 2) 아규먼트 레이블이 있는 경우, 아규먼트 레이블까지를 함수의 이름으로 봄

numberPrint(n:)        //  "numberPrint n 함수이다."

// 3) 파라미터가 여러개인 경우, **콤마없이** 아규먼트이름과 콜론을 표기

chooseStepFunction(backward:value:)
var some1 = chooseStepFunction(backward:value:)
some1(true, 5)

// 4) 아규먼트 레이블이 생략된 경우, 아래와 같이 표기

addPrintFunction(_:_:)
  • 함수의 타입은 어떻게 표기해야할까
var function1: (Int) -> () = numberPrint(n:)
// (Int) -> () : Input은 Int타입 Output은 Void타입
var function2: (Int, Int) -> () = addPrintFunction(_:_:)
// (Int, Int) -> () : Input은 Int타입 두개 Output은 Void타입
profile
AppleDeveloperAcademy@POSTECH 1기 수료, SOPT 32기 iOS파트 수료
post-custom-banner

0개의 댓글