Roel Notebook

[Swift] Functions

by Roel Downey
728x90
반응형

공부하고 정리할 내용

- 함수 (Functions)와 메서드

- 함수의 정의와 호출

 

함수 대부분은 작업의 가장 작은 단위이자 하나의 작은 프로그램이기도 하다. 하나의 프로그램은 하나의 큰 함수이다. 라는 말이 있듯이, 함수는 프로그램을 이루는 주된 요소 중 하나이다. Swift에서 함수는 일급 객체이기 때문에 하나의 값으로도 사용할 수 있다.

앞으로 설명하겠지만 Swift에서 함수는 다른 언어보다 훨씬 다양한 모습으로 존재하며, 코딩 스타일도 여러가지 이다. 따라서 규칙을 만들고 함수를 사용해야 한다.

 

함수 (Functions) 메서드

함수와 메서드는 기본적으로 같다. 다만 상황이나 위치에 따라 다른 용어로 부르는 것뿐이다.

구조체, 클래스, 열거형 등 특정 타입에 연관되어 사용하는 함수를 메서드, 모듈 전체에서 전역적으로 사용할 수 있는 함수를 함수 라고 부른다. 즉, 함수가 위치하거나 사용되는 범위 등에 따라 호칭이 달라질 뿐, 함수라는 것 자체에는 변함이 없다.

 

함수의 정의와 호출

Swift의 함수는 재정의(오버라이드)와 중복 정의(오버로드)를 모두 지원한다. 따라서 매개변수의 타입이 다르면 같은 이름의 함수를 여러 개 만들 수 있고, 매개변수의 개수가 달라도 같은 이름의 함수를 만들 수 있다. 그렇기 때문에 예제 중간중간 이름이 같은 함수를 구현해도 오류가 발생하지 않는다.

 

기본적인 함수의 정의와 호출

Swift 함수는 자유도가 굉장히 높은 문법 중 하나이다. 기본으로 함수의 이름과 매개변수(Parameter), 반환 타입(Return Type) 등을 사용하여 함수를 정의한다.

함수를 정의하는 키워드는 func 이다. 함수 이름을 지정해준 후 매개변수는 소괄호 () 로 감싸준다. 반환타입을 명시하기 전에는 -> 를 사용하여 어떤 타입이 반환될 것인지 명시해준다. 반환을 위한 키워드는 return 이다. 

 

함수의 정의

func functionName ( Parameters: ParametersType ) -> ReturnType {

    실행구문

    return 반환 값

}

(GrayItalicFont로 작성된 요소는 실제 값으로 바꿔야 하는 요소이다.)

 

기본 형태의 함수 정의와 사용 

 

func oneParameterStringReturnString(str: String) -> String {
let addName = "Hello," + str + "!"
return addName
}
print(oneParameterStringReturnString(str: "Cony"))
// Hello, Cony!
view raw func01.swift hosted with ❤ by GitHub

 

매개변수(Parameter)와 전달인자(Argument)
매개변수는 함수를 정의할 때 외부로부터 받아들이는 전달 값의 이름을 의미한다. 전달인자, 혹은 인자는 함수를 실제로 호출할 때 전달하는 값을 의미한다. 예를 들어 위의 코드에서 매개변수는 str 이고, 전달인자는 "Cony" 이다.

 

매개변수(Parameter)가 없는 함수

 

func noParameterReturnString() -> String {
return "No! Parameters Function"
}
print(noParameterReturnString())
// No! Parameters Function
view raw func02.swift hosted with ❤ by GitHub

 

매개변수(Parameter)가 여러 개인 함수

 

func manyParameterReturnString(person: String, age: Int) -> String {
if age > 20 {
return "Hello~ \(person)"
}
return "Hi! \(person)"
}
print(manyParameterReturnString(person: "Cony", age: 7))
// Hi! Cony
print(manyParameterReturnString(person: "elena", age: 25))
// Hello~ elena
view raw func03.swift hosted with ❤ by GitHub

 

반환 값이 없는 함수

 

func parametersNoReturn(parameter: String) {
print("No! Return!! print \(parameter)")
}
parametersNoReturn(parameter: "Noooooooooo~~~~")
// No! Return!! print Noooooooooo~~~~
view raw func04.swift hosted with ❤ by GitHub

 

반환 값이 여러 개인 함수

 

func parameterOneReturnMany(array: [Int]) -> (min: Int, max: Int) {
var currentMin = array[0]
var currentMax = array[0]
for value in array[1..<array.count] {
if value < currentMin {
currentMin = value
} else if value > currentMax {
currentMax = value
}
}
return (currentMin,currentMax)
}
let bounds = parameterOneReturnMany(array: [8,-6,2,109,3,71])
print("min is \(bounds.min) and max is \(bounds.max)")
// min is -6 and max is 109
view raw func05.swift hosted with ❤ by GitHub

 

함수를 데이터 타입으로 사용하는 예

함수를 데이터 타입으로 사용할 수 있다는 것은 함수를 전달 인자로 받을 수도, 반환 값으로 돌려줄 수도 있다는 의미이다. 상황에 맞는 함수를 반환해주는 것도 가능하다는 뜻이다. 이는 Swift의 함수가 일급 객체이기 때문에 가능한 일이다.

 

typealias CalculateTwoInts = (Int,Int) -> Int
func addTwoInts(_ a: Int, _ b: Int) -> Int {
return a+b
}
var mathFunction: CalculateTwoInts = addTwoInts
print(mathFunction(2,5))
// 7
view raw func06.swift hosted with ❤ by GitHub

 

위의 코드는 먼저 두 Int 값을 입력받아 계산 후 Int 값을 돌려주는 형태의 함수를 

CalculateTwoInts라는 별칭으로 지었다. 그리고 addTwoInts(_:_:)라는 간단한 함수를 만들었다. 함수는 변수 mathFunction에 할당되거나 mathFunction이라는 이름으로 호출할 수도 있다. 또 아래의 코드처럼 전달인자로 함수를 넘겨줄 수도 있다.

 

typealias CalculateTwoInts = (Int,Int) -> Int
func addTwoInts(_ a: Int, _ b: Int) -> Int {
return a+b
}
var mathFunction: CalculateTwoInts = addTwoInts
func printMathResult(_ mathFunction: CalculateTwoInts, _ a: Int, _ b: Int) {
print("Result: \(mathFunction(a,b))")
}
printMathResult(addTwoInts, 3, 5)
// Result: 8
view raw func07.swift hosted with ❤ by GitHub

 

매개변수 기본 값

Swift의 함수에서는 매개변수마다 기본값을 지정할 수 있다. 즉, 매개변수가 전달되지 않으면 기본값을 사용한다. 매개변수 기본값이 있는 함수는 함수를 중복 정의한 것처럼 사용할 수 있다.

 

func basisFunction(parameter: Int = 12) {
print(parameter)
}
basisFunction()
//12
basisFunction(parameter: 5)
//5
view raw func08.swift hosted with ❤ by GitHub

 

가변 매개변수와 입출력 매개변수

매개변수로 몇 개의 값이 들어올지 모를 때, 가변 매개변수를 사용할 수 있다. 가변 매개변수는 0개 이상(0개 포함)의 값을 받아올 수 있으며, 가변 매개변수로 들어온 인자 값은 배열처럼 사용할 수 있다.

 

func arithmeticMean(numbers: Double...) -> Double {
var total: Double = 0
for number in numbers {
total += number
}
return total / Double(numbers.count)
}
arithmeticMean(numbers: 1,2,3,4,5)
// 3.0
arithmeticMean(numbers: 3,8.25,18.75)
// 10.0
view raw func09.swift hosted with ❤ by GitHub

 

[참고 링크]

Apple Developer: [Functions]

728x90
반응형
블로그의 프로필 사진

블로그의 정보

What doing?

Roel Downey

활동하기