Skip to content

Latest commit

Β 

History

History
85 lines (58 loc) Β· 3.18 KB

Protocol.md

File metadata and controls

85 lines (58 loc) Β· 3.18 KB

ν”„λ‘œν† μ½œ (Protocol)

1. ν”„λ‘œν† μ½œμ΄λž€?

ν”„λ‘œν† μ½œμ΄λž€ νŠΉμ • 객체가 κ°–μΆ”μ–΄μ•Ό ν•  κΈ°λŠ₯μ΄λ‚˜ 속성에 λŒ€ν•œ 섀계도라고 ν•  수 μžˆλ‹€. ν˜‘μ—…ν•˜μ—¬ ν”„λ‘œκ·Έλž¨μ„ κ°œλ°œν•  λ•Œ λ‹€λ₯Έ ν”„λ‘œκ·Έλž˜λ¨Έμ—κ²Œ 일정 λΆ€λΆ„μ˜ κ°œλ°œμ„ 맑길 경우 λ¬΄μž‘μ • 맑기지 μ•Šκ³  '이러 μ΄λŸ¬ν•œ 것듀이 ν•„μš”ν•˜λ‹€'λΌλŠ” 섀계도λ₯Ό λ„˜κ²¨μ€„ λ•Œ μ‚¬μš©ν•œλ‹€. μ΄λ ‡κ²Œ ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•΄μ•Όλ§Œ μΆ”ν›„ ν”„λ‘œκ·Έλž¨μ„ ν•©μΉ˜λŠ” κ³Όμ •μ—μ„œ λ¬Έμ œκ°€ 생기지 μ•ŠλŠ”λ‹€.

예λ₯Ό λ“€μ–΄ λ‹€λ₯Έ ν”„λ‘œκ·Έλž˜λ¨Έμ—κ²Œ ν΄λž˜μŠ€κ°€ ν•„μš”ν•œλ° 이런 κΈ°λŠ₯을 ν•˜λŠ” ν•¨μˆ˜μ—¬μ•Ό ν•œλ‹€λ©° ν”„λ‘œν† μ½œλ‘œ λ§Œλ“€μ–΄ μ „λ‹¬ν•˜λ©΄, ν”„λ‘œκ·Έλž˜λ¨ΈλŠ” κ·Έ ν”„λ‘œν† μ½œμ„ 상속받아 μ½”λ”©ν•˜λ©΄ λœλ‹€. μ΄λ•Œ 상속받은 ν”„λ‘œν† μ½œμ—μ„œ μ •μ˜λœ λ‚΄μš©μ„ 빠뜨리면 μ—λŸ¬κ°€ λ°œμƒν•˜λ―€λ‘œ λˆ„λ½λ˜μ§€ μ•Šλ„λ‘ ν•΄μ•Ό ν•œλ‹€.

ν”„λ‘œν† μ½œμ€ μ‹€μ§ˆμ μœΌλ‘œ μ•„λ¬΄λŸ° λ‚΄μš©μ΄ μ—†λ‹€. λ‹¨μˆœνžˆ μ„ μ–Έ ν˜•νƒœλ§Œμ„ μ •μ˜ν•œλ‹€. μ‹€μ§ˆμ μΈ λ‚΄μš©μ€ 이 ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•˜λŠ” κ°μ²΄μ—μ„œ μ •μ˜ν•œλ‹€.

  • ν‚€μ›Œλ“œ : protocol

  • ν”„λ‘œν† μ½œ λͺ…λͺ…법 : 클래슀, ꡬ쑰체와 λ§ˆμ°¬κ°€μ§€λ‘œ μ²«κΈ€μžλ₯Ό λŒ€λ¬Έμžλ‘œ μ‹œμž‘ν•˜λŠ” UpperCamelCaseλ₯Ό μ‚¬μš©ν•œλ‹€.

protocol ν”„λ‘œν† μ½œμ΄λ¦„ {
    ν”„λ‘œν† μ½œ μ •μ˜
}
  • ꡬ쑰체, 클래슀, μ—΄κ±°ν˜• λ“±μ—μ„œ ν”„λ‘œν† μ½œμ„ μ±„νƒν•˜λ €λ©΄ νƒ€μž… 뒀에 콜둠(:)을 λΆ™μ—¬μ€€ ν›„ 채택할 ν”„λ‘œν† μ½œ 이름을 μ‰Όν‘œ(,)둜 κ΅¬λΆ„ν•˜μ—¬ λͺ…μ‹œν•œλ‹€.
struct SomeStruct: AProtocol, AnotherProtocol {
    // ꡬ쑰체 μ •μ˜
}

class SomeClass: AProtocol, AnotherProtocol {
    // 클래슀 μ •μ˜
}

enum SomeEnum: AProtocol, AnotherProtocol {
    // μ—΄κ±°ν˜• μ •μ˜
}
  • μœ„ μ½”λ“œμ˜ 각 νƒ€μž…μ€ AProtocolκ³Ό AnotherProtocol을 μ±„νƒν•œ 것이닀. λ§Œμ•½, ν΄λž˜μŠ€κ°€ λ‹€λ₯Έ 클래슀λ₯Ό μƒμ†λ°›λŠ”λ‹€λ©΄ 상속받을 클래슀 이름 λ‹€μŒμ— 채택할 ν”„λ‘œν† μ½œμ„ λ‚˜μ—΄ν•œλ‹€.
class SomeClass: SuperClass, AProtocol, AnotherProtocol {
    // 클래슀 μ •μ˜
}
  • μœ„μ˜ SomeClassλŠ” SuperClassλ₯Ό μƒμ†λ°›μ•˜μœΌλ©° λ™μ‹œμ— AProtocolκ³Ό AnotherProtocol ν”„λ‘œν† μ½œμ„ μ±„νƒν•œ ν΄λž˜μŠ€μ΄λ‹€.

μ˜ˆμ‹œ

계산기λ₯Ό λ§Œλ“€μ–΄ λ³Ό λ•Œ, λ§μ…ˆκ³Ό λΊ„μ…ˆμ΄ κΌ­ μžˆμ–΄μ•Ό ν•œλ‹€λ©΄ μ•„λž˜μ²˜λŸΌ ν”„λ‘œν† μ½œμ„ λ§Œλ“€ 수 μžˆλ‹€.

protocol CalculatorProtocol
    func add(op1 : Int, op2 : Int) -> Int
    func sub(op1 : Int, op2 : Int) -> Int

μ΄λ ‡κ²Œ 계산기 ν”„λ‘œν† μ½œμ„ λ§Œλ“€μ—ˆλ‹€λ©΄ 이 계산기 ν”„λ‘œν† μ½œμ„ 상속받은 ν΄λž˜μŠ€λŠ” λ°˜λ“œμ‹œ add ν•¨μˆ˜μ™€ sub ν•¨μˆ˜λ₯Ό λ§Œλ“€μ–΄μ•Ό ν•œλ‹€. 그렇지 μ•ŠμœΌλ©΄ μ—λŸ¬κ°€ λ°œμƒν•œλ‹€.

class SimpleCalculator : CalculatorProtocol {
    func add(op1 : Int, op2 : Int) -> Int {
        return op1 + op2
    }
    func sub(op1 : Int, op2 : Int) -> Int {
        return op1 - op2
    }
}

2. ν”„λ‘œν† μ½œ μš”κ΅¬μ‚¬ν•­

μ—…λ°μ΄νŠΈ μ˜ˆμ •



참고 자료

Swift – ν”„λ‘œν† μ½œ, μ΅μŠ€ν…μ…˜

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

λ„μ„œ : The μΉœμ ˆν•œ Swift ν”„λ‘œκ·Έλž˜λ° Zero(V 4.0)