정리하려고 맘 먹고 작성 중인데... 잘못 먹은 것 같다..
함수
- 앞서 말했 듯, Swift에서의 함수는 일급 시민이다
함수 vs 메서드
- 메서드 : 구조체, 클래스, 열거형 등 특정 타입에 연관되어 사용하는 함수
- 함수 : 모듈 전체에서 전역적으로 사용하는 함수
- 개발자들끼리 약속된 것 같다. 누구는 클래스의 메소드를 메소드라하고, 누구는 함수라 하고, 누구는 펑션이라 한다면 의사소통이 비효율적일 것이기 때문에, 약속(?)한 것이 아닐까
- 나도 이때부터 확실히 머리속에 박아두고 설명할 때는 인지하며 말하는 편이다.
//매개변수가 없는 함수
func sayHello(){
print("Hello, My name is tree")
}
//매개변수가 있는 함수
func sayHello(name: String){
print("Hello, My name is \(name)")
}
//매개변수의 기본값이 있는 함수
func sayHello(name: String = "tree"){
print("Hello, My name is \(name)")
}
//반환 타입이 있는 함수
func sayHello(name: String) -> String{
return "Hello, My name is \(name)"
}
+ 매개변수의 기본값이 있는 매개변수는 뒤로 보내야 한다.
입출력 매개변수 사용
- 순서
- 전달인자 값 복사
- 함수 내부에서 값 변경
- 반환 시점에 변경된 값을 매개변수에 할당
- inout을 사용하면 값 타입도 참조 타입처럼 사용할 수 있다
- B.U.T. 메모리 관점에서 안전하지 않기 때문에 사용을 지양한다. -> 이에 대해서도 이후에 작성할 것이다
//보통은 값을 복사하여 매개변수로 전달한다
var arr: [Int] = [1,2,3,4,5]
func abc(_ arr: [Int]){
arr[0] = 100
}
abc(arr)
print(arr[0]) // 1
//입출력 매개변수 사용
func abc(_ arr: inout [Int]){
arr[0] = 100
}
abc(&arr)
print(arr[0]) // 100
함수를 데이터 타입으로
- 앞서서 여러 차례 말했 듯이 함수는 일급 시민으로써 사용된다
var someFunction: (Int, Int) -> Int
func addInts(_ a: Int, _ b: Int) -> Int{
return a+b
}
someFunction = addInts
print(someFunction(1,2)) // 3
someFunction이라는 변수에 addInts라는 함수를 지정하여 사용할 수 있다
B.U.T. 타입이 같아야한다.
중첩 함수
- 말 그대로 함수 내에 함수가 존재하는 것이다.
func function1(_ bool: Bool) -> (Int) -> Int{
func plus(_ i: Int) -> Int{
return i+1
}
func minus(_ i: Int) -> Int{
return i-1
}
//삼항 연산자
// ? 앞의 식이 true면 plus를 false면 minus를 return한다
return bool ? plus: minus
}
var num: (Int) -> Int = func(true) //plus함수 할당
print(num(1)) // 2
이외에도 다양한 함수들이 존재한다
- 종료되지 않는 함수
- 반환 타입을 Never로 선언
- 반환값을 무시 가능한 함수
- @discardableResult 어노테이션 사용
'Swift' 카테고리의 다른 글
[Swift] 구조체/클래스 - 스위프트 언어 및 문법(5) - feat.야곰's Swift Programming (0) | 2021.01.14 |
---|---|
[Swift] 옵셔널 - 스위프트 언어 및 문법(4) - feat.야곰's Swift Programming (0) | 2021.01.14 |
[Swift] 데이터타입 - 스위프트 언어 및 문법(2) - feat.야곰's Swift Programming (0) | 2021.01.14 |
[Swift] 스위프트란? - 스위프트 언어 및 문법(1) - feat.야곰's Swift Programming (0) | 2021.01.14 |
[Swift] autoreleasepool 이란? (2) | 2021.01.14 |