본문 바로가기

14일 만에 아이폰 앱 만들기

14일 만에 아이폰 앱 만들기 챌린지(7) - 스위프트 함수

14일 만에 아이폰 앱 만들기 챌린지(7) - 스위프트 함수

 

이 포스팅에서는 스위프트 함수에 대해서 알아봅니다.

 

스위프트 플레이 그라운드를 실행시켜서 진행하도록 하자.

func myFunc() {
  let a = 10
  let b = 20
  print(a+b)
}

func라는 키워드 뒤에 원하는 함수 이름을 적는다. 그리고 괄호를 입력하고, 그 뒤에 중괄호를 입력한다.
중괄호 안의 내용이 함수의 내용이 되는 것인데, 함수가 호출될 때마다 중괄호 안의 내용이 실행이 된다.

위 코드를 작성하고 실행을 하면 아무런 반응이 없을 것이다. 함수를 작성하기만 했지 호출하지는 않았기 때문이다.


함수를 호출해보자.

func myFunc() {
  let a = 10
  let b = 20
  print(a+b)
}

myFunc() // 함수 호출

30이 출력되는 것을 확인할 수 있을 것이다.

 

함수는 여러번 호출할 수 있다.

func myFunc() {
  let a = 10
  let b = 20
  print(a+b)
}

myFunc() // 함수 호출
myFunc() // 함수 호출
myFunc() // 함수 호출

위 코드를 실행하면 30이 세 번 출력되는 것을 볼 수 있다.

 

함수는 데이터를 받을 수도 있다. 

func myFunc(a:Int) {

  let b = 20
  print(a+b)

}

위 함수의 경우 Int 타입의 매개변수argument를 받고 있다. 그리고 함수 내부의 b와 더한 값을 출력하도록 하고 있다.

 

함수를 실행해보도록 하자.

myFunc(a: 5)

 

함수를 작성하다 보면 xcode의 자동완성기능이 실행된다. 함수를 선언했을 때 보았듯이 a에는 Int값만 넣을 수 있다. 위의 함수를 실행하면 25가 출력될 것이다.

 

함수는 값을 내놓을(반환) 수도 있다. 

 

func myFunc(a:Int) -> Int { // Int 값을 반환return한다고 명시

  let b = 20
  return a+b

}

화살표 모양으로 입력한 뒤 뒤에 Int라고 명시한 부분을 볼 수 있다. 이 부분은 어떤 값을 반환할지를 말해주는 것이다.  함수 내부에서 return이라는 키워드 뒤에 반환할 값을 적으면 되는데 반환할 값은 명시했던 데로 Int 타입의 값이어야 한다. 다른 타입의 값을 반환하려고 한다면 오류가 발생할 것이다.

 

func myFunc(a:Int) -> Int { // Int 값을 반환return한다고 명시

  let b = 20
  return a+b

}

myFunc(a: 5)

위 코드를 실행하면 아무런 반응을 볼 수 없을 것이다. 함수가 반환한 값을 확인하려면 변수나 상수에 저장하고 출력해봐야 할 것이다.

 

func myFunc(a:Int) -> Int { // Int 값을 반환return한다고 명시

  let b = 20
  return a+b

}

let mySum = myFunc(a: 5)  // mySum상수에 저장
print(mySum)

25가 출력됨을 볼 수 있다.

 

참고로 함수 내부에서 return 이후의 코드는 실행이 되지 않는다. 예를들어 아래의 함수에서 print(a+b)는 실행되지 않는다고 보면 된다.

func myFunc(a:Int) -> Int { // Int 값을 반환return한다고 명시

  let b = 20
  return a+b
  print(a+b) // 실행 안됨

}

 

함수를 선언할 때 return할 타입을 명시하지 않을 수 있다. 이런 형태를 void타입이라고 한다.

func myFunc2() -> Void{


}

func myFunc3(){

}

위 두 함수 모두 값을 리턴하지 않음을 나타내고 있다. -> Void라고 쓰지 않아도 된다.

 

여러 개의 parameter를 받는 함수를 만들어 보자.

func myFunc(a:Int, b:Int) -> Int { // 값을 두 개 받도록 함

  return a+b

}

print(myFunc(a: 2, b: 3)) // 변수나 상수를 사용하지 않고 바로 출력할 수도 있다.

5를 출력하는 것을 볼 수 있을 것이다.

 

함수에서 값을 선택적으로optional 받게 만들 수 도 있다. 위의 함수 같은 경우 b를 받을 수도, 받지 않게 할 수도 있다.

func myFunc(a:Int, b:Int = 0) -> Int { 

  return a+b

}

myFunc(a: 2, b: 3) // 5
myFunc(a: 1) // 1

b를 받지 않는다면 b값은 저절로 0이 된다.

 

 

argument label에 대해서 알아보자.

func myFunc(firstNumber a:Int, secondNumber b:Int = 0) -> Int {  // firstNumber, secondNumber argument 작성

  return a+b

}

myFunc(firstNumber : 1, secondeNumber : 2)

함수를 호출할 때 어떠한 argument에 어떤 값을 넣도록 할 것인지 명시적이 보여주게 할 수 있다.  만약 argumet label을 적지 않는다면 a, b가 그대로 argument label이 된다.

 

argument label을 사용하지 않을 수도 있는데 _(underscore)를 사용하면 된다.

func myFunc(_ a:Int, _ b:Int = 0) -> Int {  // argument label을 사용하지 않음

  return a+b

}

myFunc(1,  2)

값만 잘 넣어주면 된다.

 

함수는 이름이 값더라도 받는 argument의 형태가 다르면 여러 개를 선언할 수 있다. 호출할 때 구별해서 부를 수 있기 때문이다.

func myFunc(a:Int, b:Int = 0) ->  Int {
	return a+b
}

func myFunc(_ a: Int, _ b:Int = 0) -> Int {
	return a+b
}

// 두 함수 모두 선언이 가능

 

오늘은 함수 선어, 함수 parameter, Return Type(반환 타입), Argument Labels, 함수 특징에 대해서 알아보았다!  끝!