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