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

설정

트랙백

댓글