1. 함수와 메서드
함수와 메서드는 기본적으로 같다.
다만 상황이나 위치에 따라 다른 용어로 부른다.
메서드 : 구조체, 클래스, 열거형 등 특정 타입에 연관되어 사용하는 함수
함수: 모듈 전체에서 전역적으로 사용할 수 있는 함수
2. 함수의 정의와 호출
함수에서는 () 소괄호를 생략할 수 없다. (조건문이나 반복문과 달리)
스위프트의 함수: 재정의(오버라이드), 중복정의(오버로드) 모두 지원. -> 매개변수의 개수가 달라도 같은 이름의 함수를 만들 수 있다.
1) 기본적인 함수의 정의와 호출
자유도가 굉장히 높은 문법 중 하나.
함수의 이름, 매개변수(파라미터), 반환타입 등을 사용하여 함수 정의.
func 함수이름(매개변수...) -> 반환타입 {
실행구문
return 반환 값
}
func hello(name: String) -> String {
return "Hello \(name)!
}
let helloJenny: String = hello(name: "Jenny")
print(helloJenny) //Hello Jenny!
참고 : 함수 내부의 코드가 단 한 줄의 표현이고, 그 표현의 결과값의 타입이 함수의 반환 타입과 일치한다면, return 생략 가능.
매개변수: 함수를 정의할 때 외부로부터 받아들이는 전달 값의 이름. (name)
전달인자: 함수를 실제로 호출할 때 전달하는 값. (Jenny)
2) 매개변수
*매개변수가 없는 함수와 매개변수가 여러개인 함수
함수에 매개변수가 필요 없다면 매개변수의 위치를 공란으로 비워둠.
func helloWorld() -> String {
return "Hello, world!"
}
print(hellowWorld()) // Hello, world!
매개변수가 여러 개 필요한 함수를 정의할 때는 쉼표로 매개변수를 구분.
주의할점은 함수를 호출할 때, 매개변수 이름을 붙여주고 콜론(:)을 적어준 후 전달인자를 보내준다.
이렇게 호출시에 매개변수에 붙이는 이름을 '매개변수 이름'이라고 한다.
func sayHello(myName: String, yourName: String) -> String {
return "Hello \(yourName)! I'm \(myName)"
}
print(sayHello(myName: "yagom", yourName: "Jenny")) // Hello Jenny, I'm yagom
*매개변수이름과 전달인자 레이블
전달인자 레이블을 사용하려면 함수 정의에서 매개변수 이름 앞에 한 칸을 띄운 후 전달인자 레이블을 지정.
func 함수이름(전달인자레이블 매개변수 이름: 매개변수 타입, 전달인자 레이블 매개변수 이름: 매개변수 타입 ...) -> 반환 타입 {
실행 구문
return 반환 값
}
func sayHello(from myName:String, to name:String) -> String {
return "Hello \(name)! I'm (myName)"
}
print(sayHello(from:"yagom", to:"Jenny") // Hello Jenny! I'm yagom
*매개변수 기본값
스위프트의 함수에서는 매개변수마다 기본값 지정 가능.
즉, 매개변수가 전달되지 않으면 기본값 사용.
p161 예제 참조
*가변 매개변수와 입출력 매개변수 -> 어렵다...
매개변수로 몇 개의 값이 들어올지 모를 때, 가변 매개변수를 사용할 수 있다.
가변 매개변수는 0개이상(0개포함)의 값을 받아올 수 있으며, 가변 매개변수로 들어온 인자값은 배열처럼 사용 가능.
함수마다 가변 매개변수는 하나만 가질 수 있다.
var numbers: [Int] = [1,2,3]
func nonReferenceParameter(_arr: [Int]) {
var coppiedArr: [Int] = arr
coppiedArr[1] = 1
}
func referenceParameter(_arr: inout[Int]) {
arr[1] = 1
}
nonReferenceParameter(numbers)
print(numbers[1]) //2
referenceParameter(&numbers)
print(numbers[1]) //1
3) 반환이 없는 함수
void로 표기하거나 아예 반환 타입 표현을 생략
4) 데이터 타입으로의 함수
(매개변수 타입의 나열) -> 반환타입
3. 중첩함수
스위프트는 데이터 타입의 중첩이 자유롭다.
4.종료되지 않는 함수
비반환함수(메서드)는 반환타입을 Never라고 명시해주면 된다.
func crashAndBurn() -> Never {
fatalError("Something very, very bad happened")
}
crashAndBurn() //프로세스 종료 후 오류 보고
5. 반환 값을 무시할 수 있는 함수
프로그래머가 의도적으로 함수의 반환 값을 사용하지 않을 경우, 컴파일러가 함수의 결과 값을 사용하지 않았다는 경고를 보낼 때가 있다. 이런 경우 함수의 반환 값을 무시해도 된다는 @discardableResult 선언 속성을 사용하면 된다.
출처: 야곰 swift 책
'iOS > iOS Swift 문법' 카테고리의 다른 글
if - let, guard - let (0) | 2022.08.30 |
---|---|
프로퍼티와 메서드 (0) | 2022.07.31 |
iOS swift 흐름제어 (0) | 2022.07.16 |
iOS swift 연산자 (0) | 2022.07.14 |
iOS swift 열거형 enum , switch (0) | 2022.07.14 |