함수란(Functions)
특정 작업을 수행하는 코드 블록이다. 더 길게 설명할 수 있지만 저게 바로 함수의 본질이다.
함수의 형태
func 함수이름(파라미터: 데이터 타입) -> 리턴 타입{
// 실행할 코드
return 리턴 값
}
|
swift에서 사용되는 함수의 구조는 위 코드와 같으며 다음과 같은 특징들을 가지고 있다.
- 함수를 만들 때는 func 키워드를 사용한다.
- 함수의 이름은 덧셈을 하는 함수이면 add, 이름을 출력하는 함수이면 printName과 같이 함수 이름을 보고 함수가 수행하는 작업이 무엇인지 알 수 있도록 만든다.
- 일반적으로 다른 언어에서는 함수의 파라미터를 String name처럼 데이터 타입 변수 이름 구조를 갖지만 swift에서는 반대로 사용될 뿐더러 파라미터와 데이터 타입 사이는 콜론(:)으로 구분 짓는다.
- 리턴 타입을 나타낼 때는 -> 을 사용한다.
다양한 특징들이 더 있지만 일단 이정도의 특징만 알아두고 나머지 특징들은 코드를 통해 배워도록 하자.
다음 코드는 장난감 가게에 들어온 손님에게 인사를 하는 함수이다.
func printWelcome(){
print("Welcome to the toy shop")
}
|
위에서 말한 특징처럼 함수를 만들기 위해 func 키워드를 사용하였으며, 가게에 들어온 손님에게 인사하는 함수이므로 함수 이름을 보고 어떠한 기능을 하는 함수인지 알 수 있도록 printWelcome이라 만들었다. -> 이처럼 함수를 정의(definition)할 수 있고, 실제로 printWelcome()함수를 사용하려면 함수를 호출(call) 해야하는데 방법은 아래와 같다.
func printWelcome(){
print("Welcome to the toy shop")
}
printWelcome()
|
코드의 가장 아래처럼 함수의 이름과 똑같이 작성하면 함수를 호출할 수 있다. 코드를 실행해보면 printWelcome()함수의 블록안에 있는 print()함수가 실행이 되어 "Welcome to the toy shop"이 출력이 될 것이다.
이렇게 두 가지의 코드를 통해 함수를 정의하고 호출하는 방법에 대해서 간단히 알아보았다. 이번에는 파라미터가 있고, 리턴 타입이 있는 함수를 정의하고 호출해보자.
func toyInfo(toyName: String) -> String{
let buy = "\(toyName)을(를) 구매하였습니다."
return buy
}
let result = toyInfo(toyName: "Woody")
print(result)
|
toyInfo()함수는 구매한 장난감을 알려주는 함수이다. 한 개의 파라미터로 장난감의 이름을 받아 buy에 저장 후 리턴 하여 result에 저장하고 출력하는 코드이다. ->에서 String으로 사용한 이유는 buy의 데이터 타입이 String이기 때문에 String으로 작성하였으며 만약에 리턴 값이 정수형일 경우에는 -> Int로, 소수형일 경우 Double 혹은 Float을 사용하면 된다.
다음 코드의 printPrice()함수는 장난감 가격(toyPrice)과 장난감 개수(toyCount)를 매개변수로 받아서 가격을 알려주는 함수이다.
func printPrice(toyPrice: Int, toyCount: Int){
print("total price : \(toyPrice*toyCount)")
}
printPrice(toyPrice: 1000, toyCount: 5)
|
아래는 여러 가지의 장난감의 구매했을 때 코드이다.
func printPrice(toyPrice: Int, toyCount: Int){
print("total price : \(toyPrice*toyCount)")
}
printPrice(toyPrice: 1000, toyCount: 5)
printPrice(toyPrice: 1000, toyCount: 7)
printPrice(toyPrice: 1000, toyCount: 9)
printPrice(toyPrice: 1000, toyCount: 10)
printPrice(toyPrice: 1000, toyCount: 14)
|
장난감 개수를 5개뿐만 아니라 여러개를 구매했을 때 출력하는 코드는 위와같이 printPrice()함수를 여러번 호출하면 된다.
그런데 여기서 보면 price값이 모두 1000원으로 일정한데 이러한 경우에 함수에 default값을 세팅해줄 수 있다.
func printPrice(toyPrice: Int = 1000, toyCount: Int){
print("total price : \(toyPrice*toyCount)")
}
printPrice(toyCount: 5)
printPrice(toyCount: 7)
printPrice(toyCount: 9)
printPrice(toyCount: 10)
printPrice(toyCount: 14)
|
이렇게 코드를 작성하면 printPrice()함수를 호출할 때 인자 값을 toyCount만 전달하면 자동적으로 toyPrice매개변수는 1000으로 세팅되어있기 때문에 이전 코드와 같은 결과를 출력할 수 있다. 상대적으로 인자값 개수도 적고 더 깔끔해보이는 장점이 있다.
단, 아래 코드처럼 toyPrice 매개변수의 default값을 1000으로 저장했지만, 파라미터가 2000으로 전달되는 경우 toyPrice 매개변수에는 default값인 1000이 아닌 2000이 저장된다.
func printPrice(toyPrice: Int = 1000, toyCount: Int){
print("total price : \(toyPrice*toyCount)")
}
printPrice(toyPrice: 2000, toyCount: 5)
|
underscore 키워드 사용 방법
func test(value: Int, value2: Int){
print(value)
}
test(value: 5, value2: 10)
|
test()함수를 호출할 때 값을 전달할 인자 값이 어느 파라미터에 전달되는지 구체적으로 명시하였는데 파라미터에 전달할 값만 작성해서 호출하는 방법은 Under score 키워드를 사용하면 가능하다.
func test(_ value: Int, _ value2: Int){
print(value, value2)
}
test(10, 20)
ter
|
test()함수를 정의한 부분의 파라미터 앞에 Under score(_)를 넣었다. _ 키워드를 사용하면 함수를 호출할 때 첫 번째에 있는 10은 자동적으로 value에 저장이 되고 20은 두 번째에 있는 value2에 저장이 된다.
'언어 > Swift 5' 카테고리의 다른 글
[Swift 5] In-out 파라미터 사용 방법 (1) | 2020.03.24 |
---|---|
[Swift 5] 함수의 오버로딩(Overloading)이란? (0) | 2020.03.24 |
[Swift 5] Any와 nil에 대하여 (0) | 2020.03.06 |