Skip to content

POP vs OOPΒ #77

@ujhong7

Description

@ujhong7

πŸ’πŸ»β€β™‚οΈΒ 10-2 : Protocol Oriented Programmingκ³Ό Object Oriented Programming의 차이점을 μ„€λͺ…ν•˜μ‹œμ˜€.

  1. Object Oriented Programming(OOP, 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°)은 
    클래슀λ₯Ό μ€‘μ‹¬μœΌλ‘œ μ„€κ³„λ˜λ©°,
    상속(Inheritance)을 ν™œμš©ν•˜μ—¬ μ½”λ“œλ₯Ό μž¬μ‚¬μš©ν•˜κ³  ν™•μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    클래슀 기반 μ„€κ³„μ—μ„œλŠ” λΆ€λͺ¨ 클래슀의 속성과 λ©”μ„œλ“œλ₯Ό μžμ‹ ν΄λž˜μŠ€κ°€ 상속받아 ν™•μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    예λ₯Ό λ“€μ–΄,Β Animal 클래슀λ₯Ό μƒμ†λ°›λŠ”Β Dog,Β CatΒ ν΄λž˜μŠ€κ°€ 각각의 νŠΉμ„±μ„ μΆ”κ°€ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€.
  2. Protocol Oriented Programming(POP, ν”„λ‘œν† μ½œ μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°)은 
    ν”„λ‘œν† μ½œ(Protocol)을 μ€‘μ‹¬μœΌλ‘œ μ„€κ³„λ˜λ©°,
    ꡬ쑰체(Struct)와 ν”„λ‘œν† μ½œ ν™•μž₯(Protocol Extension)을 적극적으둜 ν™œμš©ν•˜μ—¬ μ½”λ“œλ₯Ό ν™•μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    SwiftλŠ” ꡬ쑰체와 ν”„λ‘œν† μ½œ ν™•μž₯을 톡해 닀쀑 μƒμ†μ˜ 문제λ₯Ό ν•΄κ²°ν•˜κ³ , νƒ€μž…μ„ 더 μœ μ—°ν•˜κ²Œ 섀계할 수 μžˆλ„λ‘ λ•μŠ΅λ‹ˆλ‹€.
  3. OOPμ—μ„œλŠ”Β ν΄λž˜μŠ€ 계측 ꡬ쑰λ₯Ό 섀계해야 ν•˜μ§€λ§Œ,
    POPμ—μ„œλŠ”Β μ—¬λŸ¬ 개의 ν”„λ‘œν† μ½œμ„ μ‘°ν•©ν•˜μ—¬ κΈ°λŠ₯을 ν™•μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    이둜 인해 더 μœ μ—°ν•˜κ³ , 단일 μƒμ†μ˜ ν•œκ³„λ₯Ό κ·Ήλ³΅ν•œ 섀계가 κ°€λŠ₯ν•©λ‹ˆλ‹€.
  4. SwiftλŠ” ν”„λ‘œν† μ½œ μ§€ν–₯ μ–Έμ–΄λ‘œ μ„€κ³„λ˜μ—ˆμœΌλ©°,
    κΈ°λ³Έ νƒ€μž…μΈΒ Int,Β String,Β Array 등도 ꡬ쑰체(Struct)둜 κ΅¬ν˜„λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
    즉,Β ν΄λž˜μŠ€κ°€ μ•„λ‹Œ ꡬ쑰체λ₯Ό 기반으둜 ν”„λ‘œν† μ½œμ„ ν™œμš©ν•˜μ—¬ κΈ°λŠ₯을 ν™•μž₯ν•˜λŠ” 것이 Swift의 μ² ν•™μž…λ‹ˆλ‹€.
  5. OOP의 단점 쀑 ν•˜λ‚˜λŠ”Β ν΄λž˜μŠ€ 계측 ꡬ쑰가 κΉŠμ–΄μ§€λ©΄ μœ μ§€λ³΄μˆ˜κ°€ μ–΄λ €μ›Œμ§„λ‹€λŠ” μ μž…λ‹ˆλ‹€.
    POP을 ν™œμš©ν•˜λ©΄Β λ‹€μ€‘ ν”„λ‘œν† μ½œμ„ μ‘°ν•©ν•˜μ—¬ μ½”λ“œμ˜ 가독성과 μž¬μ‚¬μš©μ„±μ„ 높일 수 있으며,
    ꡬ쑰체λ₯Ό μ‚¬μš©ν•˜μ—¬ κ°’ νƒ€μž…(Value Type)의 μž₯점도 살릴 수 μžˆμŠ΅λ‹ˆλ‹€.
    .

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions