티스토리 뷰
[시작]
- 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) -> (Int, Int) -> Int{ return isAdding ? add : multiply } func printResult(_ function: (Int, Int)->Int, _ val1: Int, _ val2: Int){ print(function(val1, val2)) } printResult(chooseFunc(isAdding), 4, 3) | 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 |
댓글