글
8. Swift 함수(Function)
Swfit
2017. 8. 4. 11:49
8. Swift 함수(Function)
- 함수의 기본 개념
- 동일한 코드가 여러 곳에서 사용될 때 이를 함수화하면 재작성할 필요 없이 함수 호출만으로 처리할 수 있다.
- 전체 프로세스를 하나의 소스 코드에서 연속적으로 작성하는 것보다 기능 단위로 함수화하면 가독성이 좋아지고, 코드와 로직을 이해하기 쉽습니다.
- 비지니스 로직을 변경해야 할 때 함수 내부만 수정하면 되므로 유지보수가 용이하다.
- 사용자 정의 함수
func 함수 이름(매개변수1:타입, 매개변수2:타입 …) -> 반환타입 {
실행 내용
return 반환 값
}
- 함수 정의
//매개변수와 반환값이 모두 없는 함수
func printHello() {
print(“안녕하세요”)
}
###################
//매개변수가 없지만 반환값은 있는 함수
func sayHello() -> String {
let returnValue = “안녕하세요”
return returnValue
}
###################
//매개변수는 있으나 반환값이 없는 함수
func printHelloWithName(name : String) {
print(“\(name)님, 안녕하세요”)
}
###################
//매개변수와 반환값이 모두 있는 함수
func sayHelloWithName(name:String) -> String {
let returnValue = “\(name)님 , 안녕하세요”
return returnValue
}
###################
//반환값이 없는 함수일때도 return 사용하는 경우는 함수의 실행을 명시적으로 종료할 목적으로 사용 된다.
func hello(name: String?) {
guard let _name = name else{
return
}
print(“\(_name)님, 안녕하세요”)
}
- 함수의 호출
printHello()
//printHello = 함수이름
//() = 함수호출 연산자
//입력된 (값 x 횟수)만큼 카운트 변수의 값을 증가
func incrementBy(amount:Int, numberOfTimes:Int) {
var count = 0
count = amount * numberOfTimes
}
###################
func times(x:Int, y:Int) -> Int {
return (x*y)
}
times(x:5 , y: 10) // 함수의 이름만으로 호출한 구문
times(x:y:)(5, 10) // 함수의 식별자를 사용하여 호출한 구문
// 스위프트 함수를 호출하는 방법은 함수명 + 괄호 + 인자값 이므로, 인자 레이블까지를 전체 함수의 이름으로 본다면 항상 times(x:y:)(5, 10) 형식으로 호출하는 것이 맞다. 하지만 실제로는 times 만으로 함수를 호출할 수 있으므로 times 는 함수의 이름으로 , times(x:y:)는 함수의 식별자로 보는 것이 조금더 적절 하다.
- 함수의 반환값과 튜플
// Int,String 으로 구성된 튜플을 반환하는 함수
func getIndvInfo() -> (Int,String) {
let height = 180
let name = “꼼꼼한 재은씨”
return(height , name)
}
###################
// Int,Character,String 으로 구성된 튜플을 반환하는 함수
func getUserInfo() -> (Int,Character,String) {
//데이터 타입이 String 으로 추론되는 것을 방지하기 위해 타입 어노테이션 선언
let gender : Character = “M”
let height = 180
let name = “꼼꼼한 재은씨”
return (height, gender, name)
}
###################
//튜플을 반환하는 함수의 반환값을 대입 받은 변수나 상수는 튜플의 인덱스를 이용하여 튜플 내부의 요소를 사용할 수 있습니다.
var uInfo = getUserinfo()
uInfo.0 // 180
uInfo.1 // “M"
uInfo.2 // “꼼꼼한 재은씨”
###################
//인덱스를 사용하는 대신 가독성과 편리성을 위해 튜플 요소 각각을 변수로 직접 받을 수도 있다.
var (a,b,c) = getUserInfo()
a // 180
b // “M”
c // “꼼꼼한 재은씨"
###################
//일부 필요하지 않은 튜플 항목은 앞에서 배운대로 언더바를 이용하면 변수 할당 없이 건너뛸 수 있다.
var (height, _, name) = getUserInfo()
###################
//튜플 반환값을 정의하는 부분에 변수를 할당해 주었다. 기존에는 타입명만 작성되어 있던 부분이다.이렇게 튜플 인자 타입 앞에 각각의 변수를 붙여 주면 함수의 결과값을 받은 변수에도 이들이 자동으로 바인딩 된다.
func getUserInfo() -> (h:Int,g:Character,n:String) {
//데이터 타입이 String 으로 추론되는 것을 방지하기 위해 타입 어노테이션 선언
let gender : Character = “M”
let height = 180
let name = “꼼꼼한 재은씨”
return (height, gender, name)
}
- 타입얼라이어스
****************************************
* typealias <새로운 타입 이름> = <타입 표현> *
****************************************
typealias infoResult = (Int, Character, String)
func getUserInfo() -> infoResult {
let gender : Character = “M”
let height = 180
let name = “꼼꼼한 재은씨”
return (height, gender, name)
}
//설정 값
getUserInfo().0 // 180
getUserInfo().1 // “M”
getUserInfo().2 // “꼼꼼한 재은씨"
###################
let info = getUserInfo()
info.0 // 180
info.1 // “M”
info.2 // “꼼꼼한 재은씨"
'Swfit' 카테고리의 다른 글
10. Swift 일급 객체로서의 함수 (0) | 2017.08.04 |
---|---|
9. Swift 매개변수 (1) | 2017.08.04 |
7. Swift 옵셔널 (Optional) (0) | 2017.08.04 |
6. Swift 튜플 (Tuple) (0) | 2017.08.04 |
5. Swift 집합 (Sets) (0) | 2017.08.04 |