[Swfit 정면 돌파] 02. 함수

H43RO·2021년 7월 29일
1

Swift 정면돌파

목록 보기
2/19
post-thumbnail

본 시리즈는 아래 강의자료를 기반으로 작성되었습니다.
https://www.boostcourse.org/mo122/joinLectures/38564

오늘은 함수에 대하여 공부해보았다. Kotlin 이랑 문법이 비슷한 형태여서 훨씬 익숙하게 접근할 수 있었다. 또한 함수 호출시 파라미터 명시가 워낙 직관적이어서 상당히 세련된 느낌이 들었다. 전달인자 레이블 같은 경우 함수의 동작이 추상화된 상태에서 파라미터 각각의 대략적인 동작까지 사용자(개발자)로 하여금 훨씬 쉽고 간단하게 이해할 수 있게 해주는 것 같다.

함수 기본

함수의 선언

// 함수 선언 기본 형태
func name(param1: String, param2: Int) -> String {
	return "Hello, World!"
}

func sum(a: Int, b: Int) -> Int {
	return a + b
}

// 반환 값 없는 경우
func name(param1: String, param2: String) -> Void {
	return
}

// -> Void 생략 가능
func printMyName(name: String) {
	print(name)
}

// 매개변수가 없는 함수
func maxIntegerValue() -> Int {
	return Int.max
}

// 매개변수 및 반환값이 없는 함
// 가독성 해치지 않는 범위에서 한 줄 표현 가능
func bye() { print("BYE") }

함수의 호출

sum(a: 3, b: 5)  // 8
printMyName(name: "H43RO")  // H43RO
maxIntegerValue()  // Int 의 최댓값
bye()  // BYE

함수 고급

매개변수 기본 값

→ 매개변수에 기본적으로 전달될 값을 미리 지정할 수 있음

func greeting(friend: String, me: String = "H43RO"){
	print("Hello \(friend)! I'm \(me)")
}

greeting(friend: "LULU")  // Hello LULU! I'm H43RO
greeting(friend: "LULU", me: "LALA")  // Hello LULU! I'm LALA

전달인자 레이블

→ 함수를 호출할 때 함수 사용자의 입장에서 매개변수의 역할을 좀 더 명확하게 표현

// 함수 내부에서 전달인자 사용시 매개변수 원래 이름 사용
func greeting(to friend: String, from me: String) {
	print("Hello \(friend)! I'm \(me)")
}

// 함수 호출 할 때 전달인자 레이블 사용해야 함
greeting(to: "LULU", from: "LALA")  // Hello LULU! I'm LALA

-> 이 경우 사용자가 매개변수의 레이블을 보고 매개변수 각각의 동작을 유추할 수 있음

가변 매개변수

→ 전달 받을 값의 개수를 알기 어려울 때 사용 (함수당 하나만 가질 수 있음)

func helloToFriends(me: String, friends: String...) -> String {
	return "Hello \(friends)! I'm \(me)!"
}

print(helloToFriends(me: "H43RO", friends: "LULU", "LALA"))
// Hello ["LULU", "LALA"]! I'm H43RO!

데이터 타입으로서의 함수

→ 스위프트는 함수형 프로그래밍 패러다임을 포함하는 다중 패러다임 언어라서 함수를 일급객체(일급시민)로 취급

→ 따라서 변수, 상수 등에 함수를 할당할 수 있고 매개변수로 활용할 수도 있음

// 데이터 타입으로 함수를 사용하는 경우 Void 등 반환 타입 생략이 불가능

var someFunction: (String, String) -> Void = greeting(to:from:)
someFunction("LULU", "H43RO")  // Hello LULU! I'm H43RO

someFunction = greeting(friend:me:)
someFunction("LULU", "LALA")  // Hello LULU! I'm LALA

// 타입이 다른 함수는 할당할 수 없음
// somefunction = helloTofriends(me:friends:) -> 가변 인자 있기 때문에 컴파일 오류 발생

func runAnother(function: (String, String) -> Void){
	function("karina", "winter")
}

// Hello karina! I'm winter
runAnother(function: greeting(friend:me:))
runAnother(function: someFunction)
profile
어려울수록 기본에 미치고 열광하라

0개의 댓글