반응형

함수란(Functions)

특정 작업을 수행하는 코드 블록이다. 더 길게 설명할 수 있지만 저게 바로 함수의 본질이다.


함수의 형태

func 함수이름(파라미터: 데이터 타입) -> 리턴 타입{
    // 실행할 코드
    return 리턴 값
}

 

swift에서 사용되는 함수의 구조는 위 코드와 같으며 다음과 같은 특징들을 가지고 있다.

  1. 함수를 만들 때는 func 키워드를 사용한다.
  2. 함수의 이름은 덧셈을 하는 함수이면 add, 이름을 출력하는 함수이면 printName과 같이 함수 이름을 보고 함수가 수행하는 작업이 무엇인지 알 수 있도록 만든다.
  3. 일반적으로 다른 언어에서는 함수의 파라미터를 String name처럼 데이터 타입 변수 이름 구조를 갖지만 swift에서는 반대로 사용될 뿐더러 파라미터와 데이터 타입 사이는 콜론(:)으로 구분 짓는다.
  4. 리턴 타입을 나타낼 때는  -> 을 사용한다.

다양한 특징들이 더 있지만 일단 이정도의 특징만 알아두고 나머지 특징들은 코드를 통해 배워도록 하자.

다음 코드는 장난감 가게에 들어온 손님에게 인사를 하는 함수이다.

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(1020)
ter

 

test()함수를 정의한 부분의 파라미터 앞에 Under score(_)를 넣었다. _ 키워드를 사용하면 함수를 호출할 때 첫 번째에 있는 10은 자동적으로 value에 저장이 되고 20은 두 번째에 있는 value2에 저장이 된다. 

반응형

+ Recent posts