본문 바로가기

Swift_Grammar

[Swift_Grammar] 함수

 

 

오늘은 함수에 대해서 간단히 알아보겠다.

 

함수라는건 기능을 만드는 것.

그리고 함수 하나에는

하나의 기능을 만드는 코드가 들어가야

가장 베스트이다.

 

기본적으로 func라는 키워드와

함수의 이름, 매개변수(Parameter), 반환타입(Return type) 등을 사용하여 함수를 정의한다.

매개변수는 소괄호로 감싸주며,  ->를 사용한후 반환 타입을 명시해준다.

또한 함수 내부의 코드가 한줄인 동시에 그 결괏값이 반환타입과 일치한다면 return 키워드는 생략이 가능하다.

 

func sayHEllo() -> String {
    return "Hello"
}

// "Hello"

func sayHEllo() -> String {
    "Hello"
}

// "Hello"

 

 

이번에는 매개변수를 받는 함수를 보겠다.

두개의 Int타입 값을 받고 있고

함수 내부에서는 받은 값을 더한 후에 

Int 타입의 결괏값을 return 하고 있다.

 

func sum(lhs: Int, rhs: Int) -> Int {
    return lhs + rhs
}

sum(lhs: 1, rhs: 2)

// 3

 

 

함수를 호출할때 매개변수의 이름이 아닌

다른 이름의argumentLabel을 사용할수 있게 따로 지정해줄수 있다.

보통 함수를 정의할 때 매개변수를 정의하면 매개변수 이름과 

argumentLabel을 같은 이름으로 사용할 수 있지만 

별도로 argumentLabel을 지정해 준다면

함수 외부에서 매개변수의 역할을 argumentLabel의 네이밍을 통해

조금더 직관적으로 해독할수 있는 장점이 생긴다.

 

func sayHello(to myFriend: String) {
    print("hello" + myFriend)
}

sayHello(to: "KIM")

// hello KIM

 

 

함수의 반환값을 사용하여 변수에 담아 사용할수도 있다.

즉 함수가 호출되고 내부에 코드가 실행된 후

return 하는 타입의 값을 변수에 할당할 수 있다는 얘기다.

 

func sum(lhs: Int, rhs: Int) -> Int {
    return lhs + rhs
}

let result = sum(lhs: 1, rhs: 2)
print(result)

// 3

 

 

함수 정의시 매개변수에 기본값을 설정하면

함수를 호출할때 argumentLabel의 값을 입력하지 않아도

실행이 가능하다.

따로 설정을 해주지 않아도

default 값으로 특정한 값을 가지고 있을때 이와같이 처리를 한다.

 

func sum(lhs: Int, rhs: Int = 1) -> Int {
    return lhs + rhs
}

sum(lhs: 3)

// 4

 

 

가변 매개변수를 사용해서

여러개의 값을 매개변수로 받을수도 있다.

또한 그 가변 매개변수는 배열처럼 사용할 수 있다.

몇개의 값을 가지고 오는지 정확하지 않을때

개수에 대한 제한성에서 벗어난 함수라고 할 수 있다.

 

func myNumber(numbers: Int...) {
    for number in numbers {
        print(number)
    }
}

myNumber(numbers: 1, 2, 3, 4)

// 1, 2, 3, 4

 

 

와일드 카드 식별자를 사용하여 

함수를 호출할때 argumentLabel을 생략할수도 있다.

다만 함수를 호출할때 

argumentLabel의 네이밍을 생략해도

어떤 기능을 하는 함수인지 식별이 가능한 선에서 진행하는걸 추천한다.

개인 프로젝트에서는 나만 기억하고 있다면 크게 상관할게 아니지만

팀 프로젝트 같은 경우 동료의 가독성을 해칠 수 있는 요소중에 하나로 자리잡을 수 있기 때문이다. 

 

func sum(_ number: Int, _ number2: Int) -> Int { 
	 return number + number2
}

sum(1, 2)

 

 

함수 안에 또 다른 함수를 정의해서 사용하는것도 가능하다.

이러한 사용의 목적은 A라는 함수 안에서만 사용하게 될 함수 B를 

외부에서 접근을 못하게끔 ( 혹시나 실수든 뭐든 )

원초차단을 하기위해서 이다.

 

 

func sumAndMultiple(number1: Int, number2: Int) -> Int { 
	 
     func multiple2(myNumber: Int) -> Int {
         return myNumber * 2
     }
     
     var sum = number1 + number2
     
     let result = multiple2(myNumber: sum)
     
     return result
}

sumAndMultiple(number1: 2, number2: 4)

// 12

 

 

 

'Swift_Grammar' 카테고리의 다른 글

[Swift_Grammar] 구조체와 클래스  (0) 2020.12.30
[Swift_Grammar] Optional  (0) 2020.12.28
[Swift_Grammar] 흐름 제어 (2)  (0) 2020.12.25
[Swift_Grammar] 흐름 제어 (1)  (0) 2020.12.23
[Swift_Grammar] Data Type  (0) 2020.12.21