Swift

[ Swift ] ν•¨μˆ˜

Forest Yun 2021. 9. 2. 23:48
728x90

κ³΅λΆ€ν•œ λ‚΄μš©μ„ μ •λ¦¬ν•œ κΈ€μž…λ‹ˆλ‹€.

 

 

 

 

ν•¨μˆ˜

  1. ν•¨μˆ˜λž€?
  2. ν•¨μˆ˜μ˜ μ •μ˜μ™€ 호좜
  3. 일급 객체, ν•¨μˆ˜
  4. 쀑첩 ν•¨μˆ˜
  5. μ’…λ£Œλ˜μ§€ μ•ŠλŠ” ν•¨μˆ˜
  6. λ°˜ν™˜ 값을 λ¬΄μ‹œν•  수 μžˆλŠ” ν•¨μˆ˜

 

 

 

 

 

 

 

 

 

 


1. ν•¨μˆ˜λž€?

ν•¨μˆ˜λŠ” μž‘μ—…μ˜ κ°€μž₯ μž‘μ€ λ‹¨μœ„μ΄μž ν•˜λ‚˜μ˜ μž‘μ€ ν”„λ‘œκ·Έλž¨μœΌλ‘œ λ³Ό 수 μžˆλ‹€.

μŠ€μœ„ν”„νŠΈμ—μ„œμ˜ ν•¨μˆ˜λŠ” 일급 객체이닀. λ”°λΌμ„œ ν•¨μˆ˜λ₯Ό λ‹€λ₯Έ κ°’λ“€μ²˜λŸΌ ν•˜λ‚˜μ˜ κ°’μœΌλ‘œλ„ μ‚¬μš©ν•  수 μžˆλ‹€.

μŠ€μœ„ν”„νŠΈμ—μ„œ ν•¨μˆ˜λŠ” λ‹€λ₯Έ 언어보닀 μžμœ λ„κ°€ λ†’λ‹€.

 

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

μ˜€λ²„λΌμ΄λ“œ override μž¬μ •μ˜
μžμ‹ ν΄λž˜μŠ€κ°€ λΆ€λͺ¨ν΄λž˜μŠ€μ— μ˜ν•΄ 제곡된 λ©”μ„œλ“œλ₯Ό νŠΉμ •ν•œ ν˜•νƒœλ‘œ λ‹€μ‹œ κ΅¬ν˜„ν•˜λŠ” 것이닀.
μ˜€λ²„λ‘œλ“œ overload 쀑볡 μ •μ˜
λ§€κ°œλ³€μˆ˜μ˜ 이름과 νƒ€μž…, λ§€κ°œλ³€μˆ˜μ˜ κ°œμˆ˜κ°€ λ‹€λ₯΄λ‹€λ©΄ 같은 μ΄λ¦„μœΌλ‘œ μ—¬λŸ¬ 개의 ν•¨μˆ˜λ₯Ό λ§Œλ“€ 수 μžˆλ‹€.
전달 인자 λ ˆμ΄λΈ” λ³€κ²½λ§ŒμœΌλ‘œλ„ λ‹€λ₯Έ ν•¨μˆ˜κ°€ 되기 λ•Œλ¬Έμ— μ˜€λ²„λ‘œλ“œκ°€ κ°€λŠ₯ν•˜λ‹€.

 

 

 

 

 

 

 

 

 

 

 


2. ν•¨μˆ˜μ˜ μ •μ˜μ™€ 호좜

 

ν•¨μˆ˜ μ •μ˜μ˜ κΈ°λ³Έ ν˜•νƒœ

 

func sayHello() -> String {
    "Hello!"
    //return "Hello!"와 같은 λ™μž‘
}
print(sayHello())
//Hello 좜λ ₯
  • ν•¨μˆ˜ λ‚΄λΆ€μ˜ μ½”λ“œκ°€ 단 ν•œ 쀄이고, κ·Έ μ‹€ν–‰ λ¬Έμž₯의 νƒ€μž…μ΄ ν•¨μˆ˜μ˜ λ°˜ν™˜ νƒ€μž…κ³Ό μΌμΉ˜ν•œλ‹€λ©΄ return ν‚€μ›Œλ“œλ₯Ό μƒλž΅ν•  수 μžˆλ‹€.

 

 

 

func sendLetter(from myName: String,
                to yourName: String,
                _ content: String) -> String {
    return "Dear \(yourName),\n \(content) \n \(myName)"
}

var letter:String = sendLetter(from: "yh", to: "renee", "Hello!")
print(letter)

//좜λ ₯
Dear renee,
 Hello! 
 yh
  • λ§€κ°œλ³€μˆ˜(Parameter)와 μ „λ‹¬μΈμž(Argument)
    • λ§€κ°œλ³€μˆ˜: ν•¨μˆ˜λ₯Ό μ •μ˜ν•  λ•Œ μ™ΈλΆ€λ‘œλΆ€ν„° λ°›μ•„λ“€μ΄λŠ” 전달 κ°’μ˜ 이름. μ•ˆ (예: myName)
    • μ „λ‹¬μΈμž(λ˜λŠ” 인자) : ν•¨μˆ˜λ₯Ό μ‹€μ œλ‘œ ν˜ΈμΆœν•  λ•Œ μ „λ‹¬ν•˜λŠ” κ°’. λ°– (예: "yh")
  • μ „λ‹¬μΈμž λ ˆμ΄λΈ”
    • ν•¨μˆ˜ μ™ΈλΆ€μ—μ„œ λ³΄μ΄λŠ” 이름. μ „λ‹¬μΈμž λ ˆμ΄λΈ”μ„ μ§€μ •ν•˜μ§€ μ•Šμ•˜λ‹€λ©΄, λ§€κ°œλ³€μˆ˜κ°€ μ „λ‹¬μΈμž λ ˆμ΄λΈ” 역할을 λŒ€μ‹ ν•œλ‹€. (예: from)
    • μ „λ‹¬μΈμž λ ˆμ΄λΈ”μ„ λ³„λ„λ‘œ μ§€μ •ν•˜λ©΄ ν•¨μˆ˜ μ™ΈλΆ€μ—μ„œ λ§€κ°œλ³€μˆ˜μ˜ 역할을 μ’€ 더 λͺ…ν™•νžˆ ν•  수 μžˆλ‹€.
  • μ „λ‹¬μΈμž λ ˆμ΄λΈ”(λ§€κ°œλ³€μˆ˜ 이름)을 μ‚¬μš©ν•˜κ³  싢지 μ•Šλ‹€λ©΄, μ™€μΌλ“œ μΉ΄λ“œ μ‹λ³„μž(_)λ₯Ό μ‚¬μš©ν•˜λΌ.

 

 

 

 

func sendLetter(from myName: String,
                _ content: String,
                to yourName: String = "my friend") -> String {
    return "Dear \(yourName),\n \(content) \n \(myName)"
}

letter = sendLetter(from: "88yh", "Hi!!")
print(letter)

letter = sendLetter(from: "john", "Nice to meet you!", to: "Mina")
print(letter)

//좜λ ₯
Dear my friend,
 Hi!! 
 88yh
Dear Mina,
 Nice to meet you! 
 john
  • μŠ€μœ„ν”„νŠΈμ˜ ν•¨μˆ˜μ—μ„œλŠ” λ§€κ°œλ³€μˆ˜μ— 기본값을 지정할 수 μžˆλ‹€. 기본값을 μ„€μ •ν•œ λ§€κ°œλ³€μˆ˜λŠ” ν•¨μˆ˜ 호좜 μ‹œ 전달 인자λ₯Ό 받지 μ•Šμ„ μˆ˜λ„, 받을 μˆ˜λ„ μžˆλ‹€. (예: μœ„ 예제의 sendLetter ν•¨μˆ˜λ‘œ, sendLetter(from:_:) κ°€λŠ₯ sendLetter(from:_:to:) κ°€λŠ₯ )
    • +μΆ”κ°€) μ€‘μš”ν•œ λ§€κ°œλ³€μˆ˜λŠ” μ•žμͺ½μ— λ°°μΉ˜ν•˜λŠ” 것이 μ’‹λ‹€. κΈ°λ³Έκ°’이 μ—†λŠ” λ§€κ°œλ³€μˆ˜λŠ” 주둜 μ€‘μš”ν•œ 값을 전달할 κ°€λŠ₯성이 λ†’λ‹€. λ”°λΌμ„œ κΈ°λ³Έ 값이 μ—†λŠ” λ§€κ°œλ³€μˆ˜λ₯Ό μ•žμ— λ°°μΉ˜ν•œλ‹€.

 

 

 

 

func sayFavoriteList(favoriteList: String...) {
    for favorite in favoriteList {
        print("I Love \(favorite)")
    }
}

sayFavoriteList(favoriteList: "LaLaLand", "blue", "purple")
  • κ°€λ³€ λ§€κ°œλ³€μˆ˜:
    • λ§€κ°œλ³€μˆ˜μ˜ 개수λ₯Ό μ•Œ 수 없을 λ•Œ μ‚¬μš©ν•œλ‹€.
    • 0개 μ΄μƒμ˜ 값을 λ°›μ•„μ˜¬ 수 있으며, 전달 인자 값을 λ°°μ—΄μ²˜λŸΌ μ‚¬μš©ν•œλ‹€.
    • ν•¨μˆ˜λ§ˆλ‹€ ν•œ 개의 κ°€λ³€ λ§€κ°œλ³€μˆ˜λ₯Ό κ°€μ§ˆ 수 μžˆλ‹€.

 

 

 

 

 

 

 

 

 

 

 

 


3. 일급 객체, ν•¨μˆ˜

μŠ€μœ„ν”„νŠΈμ˜ ν•¨μˆ˜λŠ” 일급 객체이기 λ•Œλ¬Έμ— ν•˜λ‚˜μ˜ 데이터 νƒ€μž…μœΌλ‘œ μ‚¬μš©ν•  수 μžˆλ‹€. 즉, λ§€κ°œλ³€μˆ˜μ˜ νƒ€μž…, λ°˜ν™˜κ°’μ˜ νƒ€μž…, λ³€μˆ˜μ˜ νƒ€μž…μœΌλ‘œ μ‚¬μš©λ  수 μžˆλ‹€.

일급 κ°μ²΄λŠ” ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„κ³Ό 연관이 μžˆλ‹€. ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„μ— λŒ€ν•œ κ°„λ‹¨ν•œ μ„€λͺ….

https://88yhtserof.tistory.com/17?category=966954 

 

[ SWIFT ] μŠ€μœ„ν”„νŠΈλž€?

κ³΅λΆ€ν•œ λ‚΄μš©μ„ μ •λ¦¬ν•œ κΈ€μž…λ‹ˆλ‹€. Chapter 1. μŠ€μœ„ν”„νŠΈ 1. μŠ€μœ„ν”„νŠΈλž€? ARC (Automatic Reference Counting μžλ™ μ°Έμ‘° 횟수 계산) 지원 -λ©”λͺ¨λ¦¬ 관리 쉬움 컴파일 μ–Έμ–΄ ν”„λ‘œκ·Έλž¨μ„ λΉŒλ“œ, μ‹€ν–‰ν•˜λŠ” κ³Όμ • λΆˆν•„μš”.

88yhtserof.tistory.com

 

 

 

ν•¨μˆ˜λ₯Ό λ³€μˆ˜μ˜ νƒ€μž…μœΌλ‘œ μ‚¬μš©ν•œ 경우

func isEvenNumber(_ number: Int) -> Bool {
    if number % 2 == 0 {
        return true
    }
    return false
}

print(isEvenNumber(2))

let function1: (Int) -> Bool = isEvenNumber

print(function1(5))

//νƒ€μž… 별칭을 μ‚¬μš©ν•˜μ—¬ λ‚˜νƒ€λ‚Ό μˆ˜λ„ μžˆλ‹€.
typealias CheckInt = (Int) -> Bool
let function2: CheckInt = isEvenNumber

print(function2(10))
  • λ³€μˆ˜μ˜ νƒ€μž…μœΌλ‘œ μ‚¬μš©ν•˜λŠ” 경우 데이터 νƒ€μž… 뢀뢄에 '(λ§€κ°œλ³€μˆ˜ νƒ€μž…) -> λ°˜ν™˜νƒ€μž…' 을 μ λŠ”λ‹€.
  • λ‹€λ₯Έ 데이터 νƒ€μž…κ³Ό λ™μΌν•˜κ²Œ νƒ€μž… 별칭을 μ‚¬μš©ν•˜μ—¬ λ‚˜νƒ€λ‚Ό 수 μžˆλ‹€.

νƒ€μž… 별칭에 λŒ€ν•œ μ„€λͺ…

https://88yhtserof.tistory.com/21?category=966954 

 

[ SWIFT ] 데이터 νƒ€μž… κ³ κΈ‰ (1)

κ³΅λΆ€ν•œ λ‚΄μš©μ„ μ •λ¦¬ν•œ κΈ€μž…λ‹ˆλ‹€. 데이터 νƒ€μž… κ³ κΈ‰(1) 데이터 νƒ€μž… μ•ˆμ‹¬ νƒ€μž… 별칭 νŠœν”Œ 1. 데이터 νƒ€μž… μ•ˆμ‹¬ μŠ€μœ„ν”„νŠΈμ˜ νŠΉμ§• - μ•ˆμ •μ„±. λ”°λΌμ„œ μŠ€μœ„ν”„νŠΈλŠ” νƒ€μž…μ— μ—„κ²©ν•˜λ‹€. μ„œλ‘œ λ‹€λ₯Έ νƒ€μž…λΌλ¦¬

88yhtserof.tistory.com

 

 

 

 

 

 

μ „λ‹¬μΈμžκ°€ ν•¨μˆ˜μΈ 경우

func sayResult(_ number:Int, function: (Int) -> Bool) {
    if function(number) {
        print("\(number)λŠ” μ§μˆ˜μž…λ‹ˆλ‹€.")
    }else{
        print("\(number)λŠ” ν™€μˆ˜μž…λ‹ˆλ‹€.")
    }
}

sayResult(10, function: isEvenNumber)

 

 

 

 

 

 

 

 

 

 

 

 


4. 쀑첩 ν•¨μˆ˜

  • μŠ€μœ„ν”„νŠΈλŠ” 데이터 νƒ€μž…μ˜ 쀑첩이 κ°€λŠ₯ν•˜λ‹€. λ”°λΌμ„œ ν•¨μˆ˜ μ•ˆμ˜ ν•¨μˆ˜λ₯Ό λ„£λŠ” 쀑첩 ν•¨μˆ˜λ„ κ°€λŠ₯ν•˜λ‹€.
  • μš°λ¦¬κ°€ 보톡 μ •μ˜ν•œ ν•¨μˆ˜λŠ” μ „μ—­ ν•¨μˆ˜μ΄λ‹€. λ”°λΌμ„œ λͺ¨λ“ˆ μ•ˆ μ–΄λ””λ“  μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ‹€. ν•˜μ§€λ§Œ ν•¨μˆ˜ μ•ˆμ˜ ν•¨μˆ˜λŠ” 지역 ν•¨μˆ˜λ‘œ ν•΄λ‹Ή ν•¨μˆ˜μ˜ μƒμœ„ ν•¨μˆ˜ μ•ˆμ—μ„œλ§Œ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.
  • μ΄λŠ” λ‹¨μ μœΌλ‘œ 보일 μˆ˜λ„ μžˆμ§€λ§Œ, λΆˆν•„μš”ν•œ λ²”μœ„λŠ” λΉΌκ³  ν•¨μˆ˜κ°€ μ‚¬μš©ν•˜λŠ” λ²”μœ„κΉŒμ§€λ§Œ λ²”μœ„λ₯Ό ν•œμ •ν•  수 μžˆλ‹€λŠ” μž₯점이닀.
  • λ‚΄λΆ€ ν•¨μˆ˜λ₯Ό μ™ΈλΆ€μ—μ„œλ„ μ‚¬μš©ν•΄μ•Ό ν•œλ‹€λ©΄, λ°˜ν™˜ κ°’μœΌλ‘œ ν•¨μˆ˜λ₯Ό μ„€μ •ν•˜μ—¬ μ™ΈλΆ€κΉŒμ§€ μ‚¬μš© λ²”μœ„λ₯Ό ν™•μž₯ν•  수 μžˆλ‹€.

 

 

 

 

 

 

 

 

 

 


5. μ’…λ£Œλ˜μ§€ μ•ŠλŠ” ν•¨μˆ˜

  • λΉ„λ°˜ν™˜ ν•¨μˆ˜(Nonreturning function) λ˜λŠ” λΉ„λ°˜ν™˜ λ©”μ„œλ“œ(Nonreturning method)
  • μ’…λ£Œλ˜μ§€ μ•ŠλŠ”λ‹€λŠ” 것은 returnλ˜μ§€ μ•ŠλŠ”λ‹€λŠ” 것. μ •μƒμ μœΌλ‘œ λλ‚˜μ§€ μ•ŠλŠ” ν•¨μˆ˜
  • 였λ₯˜λ₯Ό λ˜μ§€κ±°λ‚˜ μ€‘λŒ€ν•œ μ‹œμŠ€ν…œ 였λ₯˜λ₯Ό λ³΄κ³ ν•˜λŠ” λ“±μ˜ 일을 ν•˜κ³  ν”„λ‘œμ„ΈμŠ€λ₯Ό μ’…λ£Œν•΄ 버린닀.
  • λ°˜ν™˜ νƒ€μž… Never

 

 

 

 

 

 

 

 

 

 


6. λ°˜ν™˜ 값을 λ¬΄μ‹œν•  수 μžˆλŠ” ν•¨μˆ˜

  • @discardableResult λ₯Ό ν•¨μˆ˜ μ„ μ–Έ μ•žμ— μž‘μ„±
  • ν•¨μˆ˜μ˜ λ°˜ν™˜ 값을 λ¬΄μ‹œν•΄λ„ λœλ‹€λŠ” 의미
  • μŠ€μœ„ν”„νŠΈ ν‘œμ€€ 라이브러리 λ©”μ„œλ“œμ—μ„œ λ³Ό 수 μžˆλ‹€.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

곡뢀 자료

https://ko.wikipedia.org/wiki/λ©”μ†Œλ“œ_μ˜€λ²„λΌμ΄λ”©
μ˜€λ²„λΌμ΄λ“œ μ •μ˜
μ•Όκ³° - μŠ€μœ„ν”„νŠΈ ν”„λ‘œκ·Έλž˜λ° 5판 (SWIFT5)
728x90