function

권현석·2022년 12월 8일
0

함수 == 메서드

  • method(메서드): 구조체, 클라스, 열거형 등 특정 타입에 연관되어 사용하는 함수
  • function(함수): 모듈 전체에서 전역적으로 활용할 수 있는 함수

*스위프트에서 함수는 override(재정의), overload(중복정의) 가능
=> 매개변수 타입, 매개변수의 개수가 다르면 같은 이름의 함수 만들 수 있음

함수 호출 및 정의

  • 정의 및 호출
func hello(name: String) -> String {
    return "Hello \(name)!"
}

let helloJenny = hello(name: "Jenny")
print(helloJenny) //Hello Jenny!

=> *return은 함수 정의 시 생략 가능
parameter: 함수 정의 시 외부에서 받아들이는 전달 값 이름
e.g. name
argument: 함수 호출 시 전달하는 값
e.g. "Jenny"

- parameter가 없거나 다수의 function

parameter가 필요없으면 공란, 여러개 호출 시 콤마(,)로 구분
여러 parameter가 있는 함수 호출 시 (parameter name : argument)형태

*parameter name: 호출 시 parameter에 붙이는 이름

- parameter name & argument label

보통 함수 정의 시 parameter를 정의하면 parameter name(= external parameter)과 argument label을 같은 이름으로 사용 가능. but argument label 별도 지정 시 함수 외부에서 parameter의 역활 좀 더 명확히 할 수 있음.

  • func 함수이름(argumentLabel parameter: parameterType)
    (= func 함수이름(external internal: dataType) {})
    => external은 함수를 호출 할 때, internal은 함수를 implementing에서 value를 넣어야 하는 곳에 사용.
func sayHello(from myName: String, to name: String) -> String {
 	return "Hello \(name)! I'm \(myName)"
}

print(sayHello(from: "Shrimp", to: "Jenny"))  //Hello Jenny! I'm Shrimp

⭐️ from과 to는 external parameter name이고 myName과 name은 internal parameter name 이다.
그래서 name, myName은 return 다음에 들어가고, from과 to는 함수를 호출 할 때 사용된다.

  • arguement label = external parameter name
  • parameter name = internal parameter name
  • argument label의 생략
func sayHello(_ myName: String, _ name: String) -> String {
 	return "Hello \(name)! I'm \(myName)"
}
print(sayHello("Shrimp","Jenny"))  //Hello Jenny! I'm Shrimp

함수 정의 시 argument label(external parameter name)을 ''로 대체하고 함수 호출 시 argument label을 지우고 사용 할 값만 넣어주면 된다.
또는 함수 정의 시 parameter name 앞에 '
'를 붙이고 함수 호출 시 '()'안을 비울 수 있다.

*argument label 사용 시 함수 호출 할 때 parameter name 사용 불가

*함수이름이 같더라도 argument label이 다르면 overload(중복 정의)로 동작 가능.

function with output

  • creating the function
func getMilk(money: Int) -> Int {
	let change = money - 2
    return change 
}

-> : return arrow
Int : return type
return: return keyword
change: return value

  • calling the function
var change  = getmilk(4)

getmilk(4): output이고, 이건 위에 정의된 함수에 의해 2(Int)이다.

*function vanilla -> strawberry ->chocolate

// vanilla
func greeting1() {
	print("Hello")
}

print(greeting1)  // Hello

//strawberry
func greeting2(name: String) {
	print("Hello \(name)")
}

print(name: "alex") // Hello alex

//chocolate
func greeting3(name: String) -> Bool {
	if name == "alex" || name == "amy"{
    	return true
    }else {
    	return false
    }
}

var doorShouldOpen = greeting3(name: alex)
print(doorShouldOpen) // true
  • 밑에서 두번째 줄에 있는 greeting3(name: alex)는 output과 값이 같은데, 이를 변수로 선언해 사용 할 수 있다.
  • chocolate version 함수 선언 시 (->) 다음에 있는 Bool이 output의 데이터 타입이다.

closure

profile
wanna be an iOS developer

0개의 댓글