티스토리 뷰

Swift/야곰의 스위프트

7장 함수

할루루 2018. 1. 29. 20:56

[시작]


- Swift에서 함수는 일급 객체이므로 하나의 값으로도 사용 가능함

- 개인이나 협업자끼리 코딩 규칙을 만들고 함수를 사용하는 것이 권장됨



[함수와 메서드]


- 메서드 : 구조체, 클래스, 열거형 등 특정 타입에 연관되어 사용하는 함수

- 함수 : 모듈 전체에서 전역적으로 사용할 수 있는 함수

- 오버라이드와 오버로딩을 지원함

1
2
3
4
5
func 함수 이름(매개변수...) -> 반환 타입{
    실행 구문
    return 반환값
}
 
cs


- 함수 정의 시 매개변수 이름을 붙여야 함

- 전달인자 레이블을 붙일 수 있음. _로 지정하면 함수 호출 시 전달인자 레이블을 명시하지 않아도 됨

 : 이 경우에 매개변수 이름은 함수 내에서, 전달인자 레이블은 함수 호출 시 매개변수 지정에 사용됨

- 전달인자 레이블만 다르게 써도 오버로딩 가능

- 매개변수 기본값 설정 가능

- ...을 사용하여 가변 매개변수 지정 가능

1
2
3
4
5
6
func printNumbers(numbers val: Int...) {
    for number in val{
        print(number)
    }
}
printNumbers(numbers: 1,2,3,4,5,6,7)
cs


위의 코드는 가변 매개변수를 사용하여 매개변수로 들어온 값들을 for-in 구문을 통해 탐색하여 출력함


- inout 키워드로 C++의 call-by-reference 비슷하게 구현 가능

1
2
3
4
5
6
var number = 3
func changeNumber(val: inout Int){
    val = 4
}
changeNumber(val: &number)
print(number)
cs

- 위의 코드는 입출력 매개변수를 활용하여 함수 외부의 값을 변경함



[데이터 타입으로서의 함수]



1
2
3
4
5
6
7
8
9
10
11
12
13
14
let isAdding: Bool = false
func add(_ val1: Int, _ val2: Int-> Int{
    return val1 + val2
}
func multiply(_ val1: Int, _ val2: Int-> Int{
    return val1 * val2
}
func chooseFunc(_ isAdding: Bool-> (IntInt-> Int{
    return isAdding ? add : multiply
}
func printResult(_ function: (IntInt)->Int, _ val1: Int, _ val2: Int){
    print(function(val1, val2))
}
printResult(chooseFunc(isAdding), 43)
cs

위의 코드는 함수를 전달인자로 전달받고 반환값으로 사용하는 등의 기능을 함


[종료되지 않는 함수]

- 비반환 함수, 비반환 메서드 : 정상적으로 끝날 수 없는 함수
- 오류를 던지거나 중대한 시스템 오류를 보고한 후 프로세스를 종료함
- 반환 타입을 Never로 명시함

1
2
3
4
5
6
7
8
9
10
func crashAndBurn() -> Never{
    fatalError("Fatal!")
}
func someFunction(isGood: Bool){
    guard isGood else{
        crashAndBurn()
    }
    print("Good")
}
someFunction(isGood: false)
cs


위의 코드는 true가 들어오면 Good을 출력하고 false가 들어오면 오류 메세지를 출력함



[반환 값을 무시할 수 있는 함수]


- 프로그래머가 의도적으로 함수의 반환 값을 사용하지 않을 경우 컴파일러가 경고를 보낼 수 있음

- @discardableResult 선언 속성을 사용하여 컴파일러가 이를 무시하도록 할 수 있음


'Swift > 야곰의 스위프트' 카테고리의 다른 글

9장 구조체와 클래스  (0) 2018.02.03
8장 옵셔널  (0) 2018.02.03
6장 흐름 제어  (0) 2018.01.29
5장 연산자  (0) 2018.01.29
4장 데이터 타입 고급  (0) 2018.01.29
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함