본문 바로가기

Apple/Swift

Swift 01 - 함수(function)

반응형

함수(function)는 코드를 재사용할 때 유용하다. 필요한 함수를 작성해 이곳저곳에서 그 함수를 실행할 수 있다. 같은 기능을 하는 코드를 여러 번 작성하는 것은 비효율적이기 때문에 함수를 사용하면 효율적인 코드를 작성할 수 있다.

Swift 함수는 func 라는 키워드로 시작한다. 함수를 실행하는 것을 함수호출이라고 한다.

// 토트넘 설명을 출력하는 함수의 예시
func printTottehamDescription() { 
	let mainDescription = """
    토트넘은 영국 잉글랜드 프리미어리그의 프로축구클럽으로 \
    연고지는 런던, \
    홈 구장은 토트넘 핫스퍼 스타디움이다
    """
    
    print(mainDescription)
}

// 선언한 함수를 사용
printTottehamDescription()

// output
토트넘은 영국 잉글랜드 프리미어리그의 프로축구클럽으로 연고지는 런던, 홈 구장은 토트넘 핫스퍼 스타디움이다

 

Swift에서는 어떤 값들을 함수 내부로 전달하면 함수 동작 방식을 변경할 수 있다. print() 함수에서 문자열을 입력한 것이 그 예라고 할 수 있다. 함수에 전달하는 값을 parameter(파라미터, 매개변수)라고 부른다. Swift에서 함수를 작성할 때 함수에 파라미터를 입력하려면 아래와 같이 파라미터의 이름과 타입을 지정해야 한다.

// 손흥민의 등번호를 출력하는 함수 - 파라미터의 이름은 backNumber, 타입은 Int(정수)
func sonNumber(backNumber: Int) {
    print(backNumber)
}

// 7 입력
sonNumber(backNumber: 7)

 

함수는 파라미터를 입력받는 것뿐만 아니라 데이터를 반환(return)할 수도 있다. 반환한 값은 새로운 변수에 할당할 수 있고 그 변수를 출력하면 함수에서 반환한 값을 확인할 수 있다.

// 마일 단위를 킬로미터로 변환하여 반환하는 함수(파라미터의 이름 mile, 타입은 Float, 반환할 타입도 Float)
func mileToKilometer(mile: Float) -> Float {
    return mile * 1.60934
}

// 7 입력
let distance = mileToKilometer(mile: 7)
print(distance)

 

이쯤에서, print() 함수는 파라미터의 이름 없이 사용할 수 있다는 것을 눈치챘을 수도 있는데, 물론 우리도 파라미터 입력이 필요 없는 함수를 작성할 수 있다. 파라미터의 이름 앞에 _(underscore)를 입력하면 함수를 호출할 때 파라미터의 이름 없이 파라미터 값만 입력할 수 있다.

func printHM7(_ name: String){
    print(name)
}

printHM7("손흥민")

 

위처럼 파라미터의 이름 없이 사용하면 코드 작성 시간을 줄일 수 있지만 여러 가지 함수가 여기저기서 호출되다 보면 어떤 파라미터를 입력해야 하는지 헷갈리거나 혼동할 여지가 있기 때문에 파라미터의 이름을 입력하는 것을 권장한다.

 

함수 파라미터에는 기본값을 입력할 수 있다. 파라미터에 기본값을 세팅하면 함수 호출 시 그 파라미터에 내용이 없으면 기본값을 사용해 함수를 호출한다.

// 선수에게 인사하는 함수, 이름에 손흥민을 기본값으로 세팅했다.
func hiToPlayer(name: String = "손흥민", content: String) {
    print("\(name) 선수 \(content)")
}

hiToPlayer(content: "안녕하세요")

//output
손흥민 선수 안녕하세요

 

파라미터를 여러 개 허용하는 함수도 작성할 수 있는데, 이러한 함수를 가변함수(Variadic Function)라고 한다. 파라미터 타입 뒤에 ...(점 세개)을 입력하여 가변함수를 작성할 수 있다.  

func mileToKilometer(miles: Float...) {
    for mile in miles {
        print("\(mile)마일은 \(mile * 1.60934) 킬로미터")
    }
    
}

let distance = mileToKilometer(miles: 1,3,5,7)
print(distance)

 

Swift 함수에 전달되는 모든 파라미터는 상수(constant)이기 때문에 변경할 수 가 없다. 이를 바꾸기 원한다면 파라미터 타입 앞에 inout키워드를 추가해 파라미터로 입력한 변수를 변경할 수 있다. 함수 내에서 파라미터로 사용한 변수의 값이 호출한 함수 내에서 바뀌게 된다. 아래의 예시를 보면 "손흥민"이라는 문자열을 담은 hm7 변수가 heungminIsWorldClass 함수에 의해 "World Class" 문자열을 담은 변수로 바뀐 것을 확인할 수 있다. 변수의 값이 바뀌기 때문에 var로 선언해야 한다.

func heungminIsWorldClass(name: inout String) {
    name = "World Class"
}

var hm7 = "손흥민"
heungminIsWorldClass(name: &hm7)
print(hm7)

//output 
World Class
반응형

'Apple > Swift' 카테고리의 다른 글

Swift 03 - 구조체(struct)  (0) 2022.03.12
Swift 02 - 클로저(Closure)  (0) 2022.03.12
firebase install error/fail  (0) 2020.04.26
Swift > awakeFromNib()  (0) 2020.04.21
Swift > Array  (0) 2020.04.21