๐ŸŽ iOS

๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(OPP)

AHN.Jihyeon 2024. 6. 7. 23:57

๋ฉ€ํ‹ฐํŒจ๋Ÿฌ๋‹ค์ž„ ์–ธ์–ด,  Swift

์ฝ”๋“œ๋ฅผ ์„ค๊ณ„ํ•˜๊ณ  ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•(ํŒจ๋Ÿฌ๋‹ค์ž„)์€ ๋‹ค์–‘ํ•˜๋‹ค.

ํ˜„๋Œ€์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋Š” ๋Œ€๋ถ€๋ถ„ 2๊ฐœ ์ด์ƒ์˜ ํŒจ๋Ÿฌ๋‹ค์ž„์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ€ํ‹ฐํŒจ๋Ÿฌ๋‹ค์ž„ ์–ธ์–ด์ด๋‹ค.

 

Swift๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ํŒจ๋Ÿฌ๋‹ค์ž„์„ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋‹ค.

  • Object-Oriented Programming(๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ)
  • Protocol-Oriented Programming(ํ”„๋กœํ† ์ฝœ ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ) 
  • Functianal Programming(ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ)

 

 

๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ž€?

๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ํŒจ๋Ÿฌ๋‹ค์ž„ ์ค‘ ํ•˜๋‚˜๋กœ, ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ฒด๋ผ๋Š” ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜.

 

  • ์ ˆ์ฐจ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ : ํ”„๋กœ๊ทธ๋žจ์„ ๋ช…๋ น์˜ ์ˆœ์„œ์™€ ์ ˆ์ฐจ๋กœ ๋ณด๋Š” ๋ฐฉ์‹. ํ”„๋กœ๊ทธ๋žจ์„ ๋น ๋ฅด๊ฒŒ ๋งŒ๋“ค ๋•Œ ์œ ์šฉํ•˜๋‹ค.
  • ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ : ๊ฐ์ฒด๋ฅผ ๋ชจ๋ธ๋งํ•ด์„œ ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ์‹.
    - ํด๋ž˜์Šค ๋‹จ์œ„๋กœ ์ˆ˜์ • ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์œ ์ง€๋ณด์ˆ˜์™€ ํ™•์žฅ์„ฑ์„ ๋งŒ๋“ค ๋•Œ ์œ ์šฉํ•˜๋‹ค. 
    - ํด๋ž˜์Šค์˜ ์ƒ์†์„ ํ†ตํ•ด ํ™•์žฅํ•จ์œผ๋กœ์จ ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 

 

 

 ‘๊ฐ์ฒด(Object)’๋ž€?

์ฃผ๋ณ€์— ์กด์žฌํ•˜๋Š” ๋ชจ๋“  ๋Œ€์ƒ๊ณผ ๊ฐœ๋…๋“ค์„ ๊ฐ์ฒด๋กœ ํ‘œํ˜„ํ•˜๊ณ  ๊ฐ์ฒด์˜ ์ƒํƒœ์™€ ๋™์ž‘์„ ๋ณ€๊ฒฝํ•ด ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฐœ๋…์ด๋‹ค. 

๊ฐ์ฒด๋Š” ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋กœ, ๋ฐ์ดํ„ฐ(์†์„ฑ)์™€ ๊ธฐ๋Šฅ๋“ค(๋ฉ”์„œ๋“œ)๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ์€ ๋Œ€์ƒ์„ ๋งํ•œ๋‹ค. 

๊ฐ์ฒด๋“ค์€ ๊ฐ์ž์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ ์ด๋“ค ๊ฐ์ฒด๋Š” ์„œ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ ๋ฐ›์œผ๋ฉฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 


๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ 4๊ฐ€์ง€ ํŠน์ง•

1. ์ถ”์ƒํ™” (Abstraction)

๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง„ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ํŠน์ง• ์ค‘์—์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์ฒ˜๋ฆฌํ•  ํŠน์ง•๋“ค์„ ๋„์ถœํ•˜๋Š” ๊ณผ์ •.

์ถ”์ƒํ™”๋Š” ๋ณต์žกํ•œ ์‹œ์Šคํ…œ์„ ๋‹จ์ˆœํ™”ํ•˜์—ฌ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์„ ๊ฐ•์กฐํ•˜๊ณ  ๋ถˆํ•„์š”ํ•œ ๋ถ€๋ถ„์„ ์ˆจ๊ฒจ ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค. 

์ถ”์ƒํ™”๋Š” ๊ฐ์ฒด๋“ค์ด ๊ณตํ†ต์ ์œผ๋กœ ํ•„์š”๋กœ ํ•˜๋Š” ์†์„ฑ์ด๋‚˜ ๋™์ž‘์„ ํ•˜๋‚˜์˜ ๋ถ„๋ฅ˜(class)๋กœ  ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. 

์ถ”์ƒํ™”์˜ ๊ฒฐ๊ณผ๋ฅผ ์ฝ”๋“œ๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ์ด class๋‹ค. ๊ฐ์ฒด์˜ ํŠน์ง•๊ณผ ์ƒํƒœ๋Š” ์†์„ฑ์œผ๋กœ ๊ตฌํ˜„ํ•˜๊ณ  ๊ฐ์ฒด์˜ ๋™์ž‘์€ ๋ฉ”์„œ๋“œ๋กœ ๊ตฌํ˜„ํ•˜ํ•œ๋‹ค. 

 

 

2. ์บก์Аํ™” (Encapsulation)

์บก์Аํ™”๋Š” ์—ฐ๊ด€ ์žˆ๋Š” ๊ฐ์ฒด์˜ ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ๋ฅผ ํ•˜๋‚˜์˜ ์บก์А(ํด๋ž˜์Šค)๋กœ ๋ฌถ์–ด ํ™œ์šฉํ•œ๋‹ค.  

์ถ”์ƒํ™”์™€ ๋น„๊ตํ•ด๋ณด์ž๋ฉด, ์ถ”์ƒํ™”๋Š” ๋””์ž์ธ ๊ด€์  / ์บก์Аํ™”๋Š” ์‹ค์ œ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ด€์ 

 

์ ‘๊ทผ์ œ์–ด์ž(private/ public)์„ ํ†ตํ•ด ๊ฐ์ฒด ์™ธ๋ถ€์—์„œ์˜ ์ ‘๊ทผ์„ ์ œํ•œํ•˜์—ฌ ๊ฐ์ฒด ๋‚ด๋ถ€์˜ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ํ†ต์ œ -> ์€๋‹‰ํ™”

์ด๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด ๊ฐ„์˜ ์˜์กด์„ฑ์„ ์ค„์ด๊ณ , ๊ฐ์ฒด ๊ฐ„์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์ƒํ˜ธ ์ž‘์šฉ์„ ๋‹จ์ˆœํ™”ํ•œ๋‹ค.

์บก์Аํ™”๋Š” ์ •๋ณด ์€๋‹‰ํ™”๋ฅผ ํ†ตํ•ด ๋†’์€ ์‘์ง‘๋„, ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ํ•œ๋‹ค.

 

 

ํ•œ ๊ณณ์—์„œ ๋ณ€ํ™”๊ฐ€ ์ผ์–ด๋‚˜๋„ ๋‹ค๋ฅธ ๊ณณ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ์ค„์ผ ์ˆ˜ ์žˆ์–ด ์ฝ”๋“œ๋ฅผ ๋ณดํ˜ธํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค. 

 

* ์‘์ง‘๋„ : ํด๋ž˜์Šค๋‚˜ ๋ชจ๋“ˆ ์•ˆ์˜ ์š”์†Œ๊ฐ€ ๋ฐ€์ ‘ํ•˜๊ฒŒ ๊ด€๋ จ๋œ ์ •๋„

* ๊ฒฐํ•ฉ๋„ : ์–ด๋–ค ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•  ๋•Œ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋‚˜ ๋ชจ๋“ˆ์— ์˜์กดํ•˜๋Š” ์ •๋„ 

 

 

3. ์ƒ์† (Inheritance)

๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ํŠน์„ฑ์„ ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ๋ฌผ๋ ค๋ฐ›์•„ ์‚ฌ์šฉํ•˜๋Š” ๊ฐœ๋…์ด๋‹ค. 

์ƒ์†์€ ๊ธฐ์กด ํด๋ž˜์Šค์—์„œ ์ •์˜๋œ ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ๋ฅผ ๋‹ค๋ฅธ ํด๋ž˜์Šค์—์„œ ์žฌ์‚ฌ์šฉ/ ํ™•์žฅ์„ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค. 

 

 

 

 4. ๋‹คํ˜•์„ฑ (Polymorphism)

๋‹คํ˜•์„ฑ์€ ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋‚˜ ์—ฐ์‚ฐ์ž๊ฐ€ ๋‹ค์–‘ํ•œ ๊ฐ์ฒด์—์„œ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. 

์˜ค๋ฒ„๋ผ์ด๋”ฉ๊ณผ ์˜ค๋ฒ„๋กœ๋”ฉ์„ ํ†ตํ•ด ๋ฉ”์„œ๋“œ๋‚˜ ํด๋ž˜์Šค๋ฅผ ๋‹ค์–‘ํ•˜๊ฒŒ ๋™์ž‘์‹œํ‚จ๋‹ค. 

-> ๋™์  ๋ฐ”์ธ๋”ฉ / ๋ฉ”์„œ๋“œ ๋””์ŠคํŒจ์น˜

 

์˜ค๋ฒ„๋ผ์ด๋”ฉ (Overriding)

์ƒ์† ๊ด€๊ณ„์—์„œ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ž์‹ ํด๋ž˜์Šค์—์„œ ์žฌ์ •์˜ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ

 

์˜ค๋ฒ„๋กœ๋”ฉ (Overloading)

๋™์ผํ•œ ํ•จ์ˆ˜๋‚˜ ๋ฉ”์„œ๋“œ ์ด๋ฆ„์„ ๊ฐ€์ง€์ง€๋งŒ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ํƒ€์ž…, ๊ฐœ์ˆ˜, ์ˆœ์„œ ๋“ฑ์— ๋”ฐ๋ผ ๋‹ค์–‘ํ•œ ๋ฒ„์ „์˜ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ