Deep_Dev
article thumbnail

πŸ“– ν•¨μˆ˜

πŸ“Œ  ν•¨μˆ˜μ™€ λ©”μ„œλ“œ

λ©”μ„œλ“œ : ꡬ쑰체, 클래슀, μ—΄κ±°ν˜• λ“± νŠΉμ •νƒ€μž…μ— μ—°κ΄€λ˜μ–΄ μ‚¬μš©ν•˜λŠ” ν•¨μˆ˜

함   μˆ˜ : λͺ¨λ“ˆ μ „μ²΄μ—μ„œ μ „μ—­μ μœΌλ‘œ μ‚¬μš©ν•  수 μžˆλŠ” ν•¨μˆ˜

 

πŸ’‘ ν•¨μˆ˜μ™€ λ©”μ„œλ“œλŠ” μ •μ˜ν•˜λŠ” μœ„μΉ˜μ™€ ν˜ΈμΆœλ˜λŠ” λ²”μœ„λ§Œ λ‹€λ₯Ό 뿐, μ •μ˜ν•˜λŠ” ν‚€μ›Œλ“œμ™€ κ΅¬ν˜„ν•˜λŠ” 방법은 κ°™λ‹€.

 

πŸ“Œ ν•¨μˆ˜μ˜ μ •μ˜μ™€ 호좜

ν•¨μˆ˜λŠ” μ†Œκ΄„ν˜Έ()λ₯Ό μƒλž΅ν•  수 μ—†λ‹€. 

μŠ€μœ„ν”„νŠΈ ν•¨μˆ˜λŠ” μž¬μ •μ˜(μ˜€λ²„λΌμ΄λ“œ)와 쀑볡 μ •μ˜(μ˜€λ²„λ‘œλ“œ)λ₯Ό λͺ¨λ‘ μ§€μ›ν•œλ‹€.

 

πŸ’‘λ”°λΌμ„œ λ§€κ°œλ³€μˆ˜μ˜ νƒ€μž…μ΄ λ‹€λ₯΄λ©΄ 같은 μ΄λ¦„μ˜ ν•¨μˆ˜λ₯Ό μ—¬λŸ¬ 개 λ§Œλ“€ 수 있고, λ§€κ°œλ³€μˆ˜μ˜ κ°œμˆ˜κ°€ 달라도 같은 μ΄λ¦„μ˜ ν•¨μˆ˜λ₯Ό λ§Œλ“€ 수 μžˆλ‹€.

 

ν•¨μˆ˜λ₯Ό μ •μ˜ν•˜λŠ” ν‚€μ›Œλ“œ : func 

λ°˜ν™˜μ„ μœ„ν•œ ν‚€μ›Œλ“œ : return 

 

ν•¨μˆ˜μ΄λ¦„μ„ 지정해쀀 ν›„ λ§€κ°œλ³€μˆ˜λŠ” μ†Œκ΄„ν˜Έ() 둜 감싸쀀닀. 

λ°˜ν™˜νƒ€μž…μ„ λͺ…μ‹œν•˜κΈ° μ „μ—λŠ” -> λ₯Ό μ‚¬μš©ν•˜μ—¬ μ–΄λ–€ νƒ€μž…μ΄ λ°˜ν™˜λ  것인지 λͺ…μ‹œν•΄μ€€λ‹€.

func ν•¨μˆ˜μ΄λ¦„(λ§€κ°œλ³€μˆ˜...) -> λ°˜ν™˜ νƒ€μž…{
	싀행ꡬ문
    return λ°˜ν™˜ κ°’
}

 

κΈ°λ³Έ ν˜•νƒœμ˜ ν•¨μˆ˜ μ •μ˜μ™€ μ‚¬μš©

func hello(name: String) -> String {
	return "Hello \(name)!"
}

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

func introduce(name: String) -> String{
	"제 이름은 " + name + μž…λ‹ˆλ‹€."
}

let introduceJenny: String = introduce(name:"Jenny")
print(introduceJenny) // 제 이름은 μ œλ‹ˆμž…λ‹ˆλ‹€.

ν•¨μˆ˜ λ‚΄λΆ€μ˜ μ½”λ“œκ°€ 단 ν•œμ€„μ˜ ν‘œν˜„μ΄κ³ , κ·Έ ν‘œν˜„μ˜ κ²°κ΄κ°’μ˜ νƒ€μž…μ΄ ν•¨μˆ˜μ˜ λ°˜ν™˜ νƒ€μž…κ³Ό μΌμΉ˜ν•œλ‹€λ©΄

return ν‚€μ›Œλ“œλ₯Ό μƒλž΅ν•΄λ„ κ·Έ ν‘œν˜„μ˜ 결괏값이 ν•¨μˆ˜μ˜ λ°˜ν™˜κ°’μ΄ λ©λ‹ˆλ‹€.

 

🍎 λ§€κ°œλ³€μˆ˜μ™€ μ „λ‹¬μΈμž

λ§€κ°œλ³€μˆ˜λŠ” ν•¨μˆ˜λ₯Ό μ •μ˜ν•  λ•Œ μ™ΈλΆ€λ‘œλΆ€ν„° λ°›μ•„λ“€μ΄λŠ” 전달 κ°’μ˜ 이름을 μ˜λ―Έν•œλ‹€. 
μ „λ‹¬μΈμž, ν˜Ήμ€ μΈμžλŠ” ν•¨μˆ˜λ₯Ό μ‹€μ œλ‘œ ν˜ΈμΆœν•  λ•Œ μ „λ‹¬ν•˜λŠ” 값을 μ˜λ―Έν•œλ‹€. 예λ₯Όλ“€μ–΄ hello(name:)ν•¨μˆ˜μ—μ„œ 
λ§€κ°œλ³€μˆ˜λŠ” name이고 μ‹€μ œ μ‚¬μš©μ‹œ μ „λ‹¬λ°›λŠ” 값인 "Jenny"κ°€ μ „λ‹¬μΈμžμ΄λ‹€. 

 

πŸ“Œ λ§€κ°œλ³€μˆ˜

λ§€κ°œλ³€μˆ˜κ°€ μ—¬λŸ¬κ°œμΈ ν•¨μˆ˜μ˜ μ •μ˜μ™€ μ‚¬μš©

func sayHello(myName: String, yourName: String) -> String{
	return "Hello \(yourName)! I'm \(myName)"
}

print(sayHello(myName:"yagom", yourName:"Jenny"))

// Hello Jenny! I'm yagom

 

πŸ’‘ λ§€κ°œλ³€μˆ˜ κΈ°λ³Έκ°’

μŠ€μœ„ν”„νŠΈμ˜ ν•¨μˆ˜μ—μ„œλŠ” λ§€κ°œλ³€μˆ˜λ§ˆλ‹€ 기본값을 지정할 수 μžˆλ‹€. 즉, λ§€κ°œλ³€μˆ˜κ°€ μ „λ‹¬λ˜μ§€ μ•ŠμœΌλ©΄ 기본값을 μ‚¬μš©ν•œλ‹€.

// times λ§€κ°œλ³€μˆ˜κ°€ κΈ°λ³Έκ°’ 3을 κ°–λŠ”λ‹€.
func sayHello(_ name: String, times: Int = 3) -> String{
	var result: String=""
    
    for _ in 0..<times{
    	result+="Hello \(name)!" + " "
    }
    return result
}

// times λ§€κ°œλ³€μˆ˜μ˜ 전달 값을 λ„˜κ²¨μ£Όμ§€ μ•Šμ•„ κΈ°λ³Έκ°’ 3을 λ°˜μ˜ν•΄μ„œ 3번 좜λ ₯ν•œλ‹€.
print(sayHello("Hana")) // Hello Hana! Hello Hana! Hello Hana!

// times λ§€κ°œλ³€μˆ˜μ˜ 전달값을 2둜 λ„˜κ²¨μ£Όμ—ˆκΈ° λ•Œλ¬Έμ— 전달 값을 λ°˜μ˜ν•΄μ„œ 2번 좜λ ₯ν•œλ‹€.
print(sayHello("Joe",times:2)) // Hello Joe! Hello Joe!

 

πŸ’‘ κΈ°λ³Έ λ§€κ°œλ³€μˆ˜μ™€ μž…μΆœλ ₯ λ§€κ°œλ³€μˆ˜

λ§€κ°œλ³€μˆ˜λ‘œ λͺ‡ 개의 값이 λ“€μ–΄μ˜¬μ§€ λͺ¨λ₯Ό λ•Œ, κ°€λ³€ λ§€κ°œλ³€μˆ˜λ₯Ό μ΄μš©ν•  수 μžˆλ‹€.

ν•¨μˆ˜λ§ˆλ‹€ κ°€λ³€ λ§€κ°œλ³€μˆ˜λŠ” ν•˜λ‚˜λ§Œ κ°€μ§ˆ 수 μžˆλ‹€.

 

 

πŸ’‘λ°˜ν™˜μ΄ μ—†λŠ” ν•¨μˆ˜

ν•¨μˆ˜λŠ” νŠΉμ • 연산을 μ‹€ν–‰ν•œ ν›„ 결괏값을 λ°˜ν™˜ν•œλ‹€. κ·ΈλŸ¬λ‚˜ κ°’μ˜ λ°˜ν™˜μ΄ ν•„μš”ν•˜μ§€ μ•Šμ€ ν•¨μˆ˜λ„ μžˆλ‹€.

κ·ΈλŸ΄λ•ŒλŠ” λ°˜ν™˜ 값이 μ—†λŠ” ν•¨μˆ˜λ₯Ό λ§Œλ“€μ–΄μ£Όλ©΄ λœλ‹€. λ§Œμ•½ λ°˜ν™˜ 값이 μ—†λŠ” ν—˜μˆ˜λΌλ©΄ λ°˜ν™˜νƒ€μž…μ„ 'μ—†μŒ'을 μ˜λ―Έν•˜λŠ” Void둜 ν‘œκΈ°ν•˜κ±°λ‚˜

μ•„μ˜ˆ λ°˜ν™˜ νƒ€μž… ν‘œν˜„μ„ μƒλž΅ν•΄λ„ λœλ‹€

 μ¦‰, λ°˜ν™˜ νƒ€μž…μ΄ Void μ΄κ±°λ‚˜ μƒλž΅λ˜μ–΄ μžˆλ‹€λ©΄ λ°˜ν™˜ 값이 μ—†λŠ” ν•¨μˆ˜μ΄λ‹€.

 

λ°˜ν™˜ 값이 μ—†λŠ” ν•¨μˆ˜μ˜ μ •μ˜μ™€ μ‚¬μš©

func sayHelloWorld() {
	print("Hello, world!")
}
sayHelloWorld() // Hello, World!

func sayHello(from myName: String, to name: String){
	print("Hello \(name)! I'm \(myName)")
}
sayHello(from:"yagom", to:"Mijeong") // Hello Mijeong! I'm yagom

func sayGoodBye() -> Void{
	print("Good Bye")
}
sayGoodBye() // GoodBye

 

πŸ’‘ 데이터 νƒ€μž…μœΌλ‘œμ„œμ˜ ν•¨μˆ˜

μŠ€μœ„ν”„νŠΈ ν•¨μˆ˜λŠ” 일급 κ°μ²΄μ΄λ―€λ‘œ ν•˜λ‚˜μ˜ 데이터 νƒ€μž…μœΌλ‘œ μ‚¬μš©ν•  수 μžˆλ‹€.

 

ν•¨μˆ˜λ₯Ό ν•˜λ‚˜μ˜ 데이터 νƒ€μž…μœΌλ‘œ λ‚˜νƒ€λ‚΄λŠ” 방법

 ( λ§€κ°œλ³€μˆ˜ νƒ€μž…μ˜ λ‚˜μ—΄ ) -> λ°˜ν™˜ νƒ€μž…

func sayHello(name: String, times: Int) -> String{
	...
}
// sayHello ν•¨μˆ˜μ˜ νƒ€μž…μ€ (String, Int) -> String μž…λ‹ˆλ‹€.


func sayHelloToFriends(me: String, names: String...) -> String{
	...
}
// sayHelloToFriends ν•¨μˆ˜μ˜ νƒ€μž…μ€ (String,String...) -> String μž…λ‹ˆλ‹€.
// λ§Œμ•½ λ§€κ°œλ³€μˆ˜λ‚˜ λ°˜ν™˜ 값이 μ—†λ‹€λ©΄ Void ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μ—†μŒμ„ λ‚˜νƒ€λ‚Έλ‹€.


func sayHelloWorld(){
	...
}
// sayHelloWorld ν•¨μˆ˜μ˜ νƒ€μž…μ€ (Void) -> Void μž…λ‹ˆλ‹€.

λ‹€μŒμ€ λͺ¨λ‘ 같은 ν‘œν˜„μ΄λ‹€.

  • (Void) -> Void
  • () -> Void
  • () -> ()

 

πŸ“Œ  쀑첩 ν•¨μˆ˜

μŠ€μœ„ν”„νŠΈλŠ” 데이터 νƒ€μž…μ˜ 쀑첩이 μžμœ λ‘­λ‹€.

예λ₯Όλ“€μ–΄ μ—΄κ±°ν˜• μ•ˆμ— 또 ν•˜λ‚˜μ˜ μ—΄κ±°ν˜•μ΄ λ“€μ–΄κ°ˆ 수 있고, 클래슀 μ•ˆμ— 또 λ‹€λ₯Έ ν΄λž˜μŠ€κ°€ λ“€μ–΄κ°ˆ 수 μžˆλ‹€.

 

πŸ“Œ μ’…λ£Œλ˜μ§€ μ•ŠλŠ” ν•¨μˆ˜

λΉ„λ°˜ν™˜ ν•¨μˆ˜ ( λΉ„λ°˜ν™˜ λ©”μ„œλ“œ ) : μŠ€μœ„ν”„νŠΈμ—μ„œ μ’…λ£Œ(return) λ˜μ§€ μ•ŠλŠ” ν•¨μˆ˜

μ’…λ£Œλ˜μ§€ μ•ŠλŠ”λ‹€ = μ •μƒμ μœΌλ‘œ λλ‚˜μ§€ μ•ŠλŠ”λ‹€

 

λΉ„λ°˜ν™˜ ν•¨μˆ˜λŠ” μ–΄λ””μ„œλ“  호좜이 κ°€λŠ₯ν•˜κ³  guard ꡬ문의 else λΈ”λ‘μ—μ„œλ„ ν˜ΈμΆœν•  수 μžˆλ‹€. 

λΉ„λ°˜ν™˜ λ©”μ„œλ“œλŠ” μž¬μ •μ˜λŠ” ν•  수 μžˆμ§€λ§Œ, λΉ„λ°˜ν™˜ νƒ€μž…μ΄λΌλŠ” 것은 λ³€κ²½ν•  수 μ—†λ‹€.

 

λΉ„λ°˜ν™˜ ν•¨μˆ˜ ( λ©”μ„œλ“œ )λŠ” λ°˜ν™˜ νƒ€μž…μ„ Never 라고 λͺ…μ‹œν•΄μ£Όλ©΄ λœλ‹€.

 

πŸ“Œ λ°˜ν™˜ 값을 λ¬΄μ‹œν•  수 μžˆλŠ” ν•¨μˆ˜

가끔 ν•¨μˆ˜μ˜ λ°˜ν™˜ 값이 κΌ­ ν•„μš”ν•˜μ§€ μ•Šμ€ κ²½μš°λ„ μžˆλ‹€. 

ν”„λ‘œκ·Έλž˜λ¨Έκ°€ μ˜λ„μ μœΌλ‘œ ν•¨μˆ˜μ˜ λ°˜ν™˜ 값을 μ‚¬μš©ν•˜μ§€ μ•Šμ„ 경우, μ»΄νŒŒμΌλŸ¬κ°€ ν•¨μˆ˜μ˜ κ²°κ³Ό 값을 μ‚¬μš©ν•˜μ§€ μ•Šμ•˜λ‹€λŠ” κ²½κ³ λ₯Ό 보낼 수 μžˆλ‹€.

이런 경우 ν•¨μˆ˜μ˜ λ°˜ν™˜ 값을 λ¬΄μ‹œν•΄λ„ λœλ‹€λŠ” @discardableResult 선언을 ν•˜λ©΄ λœλ‹€.

 

func say(_ something: String) -> String{
	print(something)
    return something
}

@discardableResult func discadableResultSay(_ something: String) -> String{
	print(something)
    return something
}

// λ°˜ν™˜ 값을 μ‚¬μš©ν•˜μ§€ μ•Šμ•˜μœΌλ―€λ‘œ μ»΄νŒŒμΌλŸ¬κ°€ κ²½κ³ λ₯Ό ν‘œμ‹œν•  수 μžˆλ‹€.
say("hello") // hello

// λ°˜ν™˜ 값을 μ‚¬μš©ν•˜μ§€ μ•Šμ„ 수 μžˆλ‹€κ³  미리 μ•Œλ ΈκΈ° λ•Œλ¬Έμ—
// λ°˜ν™˜ 값을 μ‚¬μš©ν•˜μ§€ μ•Šμ•„λ„ μ»΄νŒŒμΌλŸ¬κ°€ κ²½κ³ ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
discardableResultSay("hello") // hello