Swift

[ Swift ] ν”„λ‘œν† μ½œ 지ν–₯ ν”„λ‘œκ·Έλž˜λ°

Forest Yun 2023. 9. 24. 21:05
728x90

 

SwiftλŠ” ν”„λ‘œν† μ½œ 지ν–₯ ν”„λ‘œκ·Έλž˜λ°

2015λ…„ ν”„λ‘œν† μ½œ Extension이 λ„μž…λœ Swift 2.0 버전이 λ°œν‘œλ˜λ©° Apple은 Swiftκ°€ ν”„λ‘œν† μ½œ 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ΄λΌ μ„ μ–Έν–ˆλ‹€. 더해 ν”„λ‘œν† μ½œ 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ€ μ°Έμ‘° νƒ€μž…μΈ 클래슀의 μΈμŠ€ν„΄μŠ€λ³΄λ‹€ κ°’ νƒ€μž…μ„ 더 효율적으둜 μ‚¬μš©ν•˜λ©°, 였λ₯˜λ₯Ό 쀄일 λ°©μ•ˆμ΄λΌ μ†Œκ°œν–ˆλ‹€.

이제 μŠ€μœ„ν”„νŠΈμ—μ„œλŠ” ν΄λž˜μŠ€μ—μ„œ ν–ˆλ˜ κ²ƒμ²˜λŸΌ ꡬ쑰체와 μ—΄κ±°ν˜•μ— μΊ‘μŠν™”, 좔상화, μ ‘κ·Ό μ œμ–΄ λ“±μ˜ κΈ°λŠ₯을 κ΅¬ν˜„ν•  수 있으며, μ°Έμ‘° νƒ€μž…μ˜ μ°Έμ‘° λ¬Έμ œμ—μ„œ 더 자유둜울 수 있고 닀쀑상속과 더 λ‚˜μ€ 좔상화 λ©”μ»€λ‹ˆμ¦˜μ„ κ΅¬ν˜„ 수 있게 λ˜μ—ˆλ‹€.

 

ν”„λ‘œν† μ½œ

ν”„λ‘œν† μ½œμ΄λž€ νŠΉμ • μž‘업에 λ§žλŠ” λ©”μ„œλ“œμ™€ ν”„λ‘œνΌν‹°λ₯Ό μ •μ˜ν•˜λŠ” 청사진이닀. ν΄λž˜μŠ€λŠ” 클래슀만 상속할 수 μžˆλŠ” 것과 λ‹€λ₯΄κ²Œ, ν”„λ‘œν† μ½œμ€ 클래슀, ꡬ쑰체, μ—΄κ±°ν˜•μ΄ 상속할 수 μžˆλ‹€. Array, Int, Double λ“± μŠ€μœ„ν”„νŠΈμ˜ κΈ°λ³Έ μžλ£Œν˜•μ€ ꡬ쑰체이기 λ•Œλ¬Έμ— λ˜λ‹€λ₯Έ ꡬ쑰체λ₯Ό μƒμ†ν•˜κ±°λ‚˜ 상속 받을 수 μ—†λ‹€. κ·Έλž˜μ„œ 클래슀처럼 κ³΅ν†΅λœ ꡬ쑰λ₯Ό κ°€μ§ˆ 수 μ—†λ‹€κ³  생각할 수 μžˆμ§€λ§Œ, κ΅¬μ‘°μ²΄λŠ” ν”„λ‘œν† μ½œμ„ μƒμ†ν•˜λ©° 이λ₯Ό κ΅¬ν˜„ν•΄λ‚Έλ‹€. 

ν”„λ‘œν† μ½œμ˜ μ˜ˆλ‘œλŠ” Swift의 Identifiable이 μžˆλ‹€

// id둜 비ꡐ가 ν•„μš”ν•œ 경우 μƒμ†ν•˜μ—¬ μ‚¬μš©ν•  수 μžˆλ‹€
// 예) 학생증 idλ₯Ό 톡해 학생 ꡬ뢄
public protocol Identifiable<ID> {

    /// A type representing the stable identity of the entity associated with
    /// an instance.
    associatedtype ID : Hashable

    /// The stable identity of the entity associated with this instance.
    var id: Self.ID { get }
}

 

 

 

ν”„λ‘œν† μ½œ 지ν–₯ ν”„λ‘œκ·Έλž˜λ°

ν”„λ‘œν† μ½œ 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ€ μ΄λŸ¬ν•œ ν”„λ‘œν† μ½œ ν˜•νƒœλ₯Ό 적극 μ‚¬μš©ν•˜λŠ” 것이닀. μœ„ ν”„λ‘œν† μ½œμ˜ μ •μ˜μ— 'νŠΉμ •'μ΄λΌλŠ” 단어에 μ£Όλͺ©ν•˜λ©° 잘 이해가 λœλ‹€. 예λ₯Ό λ“€μ–΄ μ‚¬λžŒμ€ 이름과 거주지가 μžˆλ‹€. Name은 μ΄λ¦„λ§Œμ„ μœ„ν•œ μž‘μ—…μ΄κ³ , Home은 κ±°μ£Όμ§€λ§Œμ„ μœ„ν•œ μž‘μ—…μ΄λ‹€. μ΄λ ‡κ²Œ μž‘μ—… λ³„λ‘œ κ΅¬λΆ„ν•˜κ³  ν•˜λ‚˜λ‘œ λͺ¨μ•„ μ™„μ„±ν•˜λŠ” ν”„λ‘œκ·Έλž˜λ°μ„ ν”„λ‘œν† μ½œ 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ΄λΌ ν•œλ‹€.

iOS κ°œλ°œμ„ ν•˜λ‹€λ³΄λ©΄ λͺ¨λ“ˆν™” λΌλŠ” 말을 정말 많이 λ“£κ²Œ λœλ‹€. λͺ¨λ“ˆμ€ νŠΉμ • κΈ°λŠ₯을 ν•˜λ‚˜λ‘œ 묢은 독립적인 λ‹¨μœ„λ‘œ, μ΄λŸ¬ν•œ λͺ¨λ“ˆμ΄ λͺ¨μ—¬ ν•˜λ‚˜μ˜ ν”„λ‘œκ·Έλž¨μ„ κ΅¬μ„±ν•œλ‹€. Swiftλ₯Ό μ‚¬μš©ν•˜λŠ” iOSλŠ” ν”„λ‘œν† μ½œμ„ 톡해 이 λͺ¨λ“ˆν™”λ₯Ό ν•˜κ³  μžˆλ‹€.

Protocol Name {
    var firstName: String { get set }
    var lastName: String { get set }
}

Protocol Home {
    var location: String { get set }
    
    mutating func move() // λ©”μ„œλ“œ λ‚΄μ—μ„œ location λ³€κ²½
}

struct Person: Name, Home {
    var firstName: String
    var lastName: String
    
    func move() {
       print("🚌🚌🚌")
    }
 }

 

 

 

Protocol Extension

μš°λ¦¬κ°€ ν”„λ‘œν† μ½œμ„ μ±„νƒν•˜λ©΄ ν•„μˆ˜μ μœΌλ‘œ ν•΄λ‹Ή ν”„λ‘œν† μ½œμ˜ ν”„λ‘œνΌν‹°μ™€ λ©”μ„œλ“œλ₯Ό λͺ¨λ‘ κ΅¬ν˜„ν•΄μ•Ό ν•œλ‹€. 근데 λ§Œμ•½ ν”„λ‘œν† μ½œμ„ μ±„νƒν•œ λ§Žμ€ ν•˜μœ„ νƒ€μž…λ“€μ΄ λ™μΌν•œ μž‘μ—…μ„ ν•œλ‹€λ©΄ ν”„λ‘œμ νŠΈλŠ” μ€‘λ³΅λœ μ½”λ“œλ₯Ό 많이 κ°€μ§€κ²Œ 될 것이닀. μ΄λŸ¬ν•œ ν”„λ‘œν† μ½œμ„ 단점을 μ—†μ• μ£ΌλŠ” 것이 λ°”λ‘œ Extension이닀.

예) 메일과 λ¬ΈμžλŠ” λ™μΌν•˜κ²Œ μˆ˜μ‹ κ³Ό λ°œμ‹  μž‘μ—…μ΄ ν•„μš”ν•˜λ‹€

 

ν”„λ‘œν† μ½œλ‘œ ν•„μš”ν•œ μž‘μ—…μ„ 'μ •μ˜'ν–ˆλ‹€λ©΄, Extension을 톡해 'μ΄ˆκΈ°κ΅¬ν˜„'을 ν•˜μ—¬ μ±„νƒν•˜λŠ” λ§Žμ€ νƒ€μž…μ— μž‘μ—…μ„ 쀄일 수 μžˆλ‹€. 더해 초기 κ΅¬ν˜„λœ μž‘μ—…μ„ μ˜€λ²„λΌμ΄λ“œν•  수 μžˆμ–΄ νƒ€μž…μ˜ νŠΉμ„±μ— 따라 변경도 κ°€λŠ₯ν•˜λ‹€. μ΄λ ‡κ²Œ ν”„λ‘œν† μ½œ μ΅μŠ€ν…μ…˜μ„ 톡해 μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±μ„ 높일 수 μžˆλ‹€.

 

 

 

 

 

 

2015 WWDC
μ•Όκ³° μŠ€μœ„ν”„νŠΈ 5
Protocol
Protocol Oriented Programing
ν”„λ‘œν† μ½œ 지ν–₯ ν”„λ‘œκ·Έλž˜λ°
728x90

'Swift' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[ Swift ] isCase | isLowercase | isUppercase  (0) 2023.10.04
[ Swift ] print(_:separator:terminator:)  (0) 2023.10.04
[ Swift ] Serializationμ΄λž€?  (0) 2023.01.18
[ Swift ] μ˜΅μ…”λ„ Optionals  (0) 2021.09.05
[ Swift ] ν•¨μˆ˜  (0) 2021.09.02