๐Ÿ“ŒLanguage/JavaScript

TIL) ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ, OOP, ์บก์Šํ™”, ์ถ”์ƒํ™”, ์ƒ์†, ๋‹คํ˜•์„ฑ

hellohailie 2022. 5. 25. 14:44

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

 

์ ˆ์ฐจ ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ = ๋‹จ์ˆœํžˆ ๋ณ„๊ฐœ์˜ ๋ณ€์ˆ˜์™€ ํ•จ์ˆ˜๋กœ ์ˆœ์ฐจ์ ์œผ๋กœ ์ž‘๋™

์ ˆ์ฐจ์  ์–ธ์–ด = ์ˆœ์ฐจ์ ์ธ ๋ช…๋ น์˜ ์กฐํ•ฉ ex) ์ดˆ๊ธฐ์˜ C, ํฌํŠธ๋ž€

 

๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ = ๋ฐ์ดํ„ฐ์˜ ์ ‘๊ทผ, ๋ฐ์ดํ„ฐ์˜ ์ฒ˜๋ฆฌ ๊ณผ์ •์—์„œ ๋Œ€ํ•œ ๋ชจํ˜•์„ ๋งŒ๋“ค์–ด๋‚ธ๋‹ค. ('ํด๋ž˜์Šค'๋ผ๋Š” ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์˜ ์ฒญ์‚ฌ์ง„์„ ์‚ฌ์šฉํ•ด์„œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค. )

๊ทธ๋ž˜์„œ ๋ฐ์ดํ„ฐ์™€ ๊ธฐ๋Šฅ์ด ๋ณ„๊ฐœ๋กœ ์ทจ๊ธ‰๋˜์ง€ ์•Š๊ณ , ํ•œ ๋ฒˆ์— ๋ฌถ์—ฌ์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. // ๋ฉ”์„œ๋“œ์™€ ์†์„ฑ์ด ์กด์žฌํ•œ๋‹ค. 

ํ˜„๋Œ€ ์–ธ์–ด๋“ค์€ ๋Œ€๋ถ€๋ถ„ ๊ฐ์ฒด ์ง€ํ–ฅ์˜ ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. 

 

OOP๋Š” ํ”„๋กœ๊ทธ๋žจ ์„ค๊ณ„ ์ฒ ํ•™์ด๋‹ค. 

OOP์˜ ๋ชจ๋“  ๊ฒƒ์€ '๊ฐ์ฒด'๋กœ ๊ทธ๋ฃนํ™”๋œ๋‹ค. // ์ด ๊ฐ์ฒด๋Š” ํ•œ๋ฒˆ ๋งŒ๋“ค๊ณ  ๋‚˜๋ฉด, ๋ฉ”๋ชจ๋ฆฌ์ƒ์—์„œ ๋ฐ˜ํ™˜๋˜๊ธฐ ์ „๊นŒ์ง€ ๊ฐ์ฒด ๋‚ด์˜ ๋ชจ๋“  ๊ฒƒ์ด ์œ ์ง€๋œ๋‹ค. 

OOP์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค. 

 

ํด๋ž˜์Šค๋Š” ์„ธ๋ถ€ ์‚ฌํ•ญ(์†์„ฑ)์ด ๋“ค์–ด๊ฐ€์ง€ ์•Š์€ ์ฒญ์‚ฌ์ง„์ด๋‹ค. 

์„ธ๋ถ€ ์‚ฌํ•ญ๋งŒ ๋„ฃ๋Š”๋‹ค๋ฉด ๊ฐ์ฒด๊ฐ€ ๋œ๋‹ค. ์—ฌ๊ธฐ์„œ ๊ฐ์ฒด๋Š” js์˜ ๊ฐ์ฒด (object)๊ฐ€ ์•„๋‹ˆ๊ณ  ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ๋งŒ๋“ค์–ด์ง„ ๊ฐ์ฒด์ด๋‹ค. ์ด๋ฅผ ์ค„์—ฌ์„œ ์ธ์Šคํ„ด์Šค๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. 

=> ์ƒ์„ฑ์ž๋Š” ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ๋„ฃ์–ด์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ํ•จ์ˆ˜์— ์ธ์ž๋ฅผ ๋„ฃ๋“ฏ์ด ์†์„ฑ์„ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค. 

 

์‰ฝ๊ฒŒ ์˜ˆ๋ฅผ ๋“ค์ž๋ฉด!!

 

class Car = ํด๋ž˜์Šค์˜ ์ด๋ฆ„

์ž๋™์ฐจ ์ƒ‰์ƒ, ๊ฐ€๊ฒฉ, ์†๋ ฅ ๋“ฑ๋“ฑ์˜ ๊ณ ์œ ํ•œ ์†์„ฑ = ์†์„ฑ

์‹œ์ž‘, ํ›„์ง„, ์ „์ง„, ๋ฉˆ์ถค ๋“ฑ ์ž๋™์ฐจ์˜ ๊ธฐ๋Šฅ = ๋ฉ”์„œ๋“œ

 


๊ฐ์ฒด ์ง€ํ–ฅ์˜ ์ค‘์š”์„ฑ = ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค ๋•Œ ์ข‹์€ ์„ค๊ณ„๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๊ผญ ์ดํ•ดํ•˜๊ณ  ์‘์šฉํ•ด์•ผํ•œ๋‹ค. 

 

๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์ฃผ์š” ๊ฐœ๋… // OOP Basic Concepts

OOP(object oriented programming)

1. Encapsulation (์บก์Šํ™”)

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

3. Inheritance (์ƒ์†)

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

 

 

1. Encapsulation (์บก์Šํ™”) // ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•˜์ง€ ์•Š๊ฒŒ ํ•˜๊ณ , ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ธ๋‹ค. 

  • ๋ฐ์ดํ„ฐ(์†์„ฑ)์™€ ๊ธฐ๋Šฅ (๋ฉ”์„œ๋“œ)๋“ค์ด ๋Š์Šจํ•˜๊ฒŒ ๊ฒฐํ•ฉ
  • ์€๋‹‰์˜ ํŠน์ง•๋„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. // ๋‚ด๋ถ€ ๋ฐ์ดํ„ฐ๋‚˜ ๋‚ด๋ถ€ ๊ตฌํ˜„์ด ์™ธ๋ถ€๋กœ ๋…ธ์ถœ๋˜์ง€ ์•Š๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ.
  • ๊ทธ๋ž˜์„œ ์€๋‹‰ํ™”์˜ ํŠน์ง•์„ ์‚ด๋ ค์„œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ๊ฐ์ฒด ๋‚ด ๋ฉ”์„œ๋“œ์˜ ๊ตฌํ˜„๋งŒ ์ˆ˜์ •ํ•˜๊ณ , ๋…ธ์ถœ๋œ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ ํ๋ฆ„์€ ๋ฐ”๋€Œ์ง€ ์•Š๋„๋ก ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ==> ํด๋กœ์ € ๋ชจ๋“ˆ ํŒจํ„ด์„ ์‚ฌ์šฉ
  • ๋Š์Šจํ•œ ๊ฒฐํ•ฉ(loose coupling)์— ์œ ๋ฆฌํ•˜๋‹ค = ์–ธ์ œ๋“ ์ง€ ๊ตฌํ˜„์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

2. Abstraction (์ถ”์ƒํ™”) // ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•˜์ง€ ์•Š๊ฒŒ ํ•˜๊ณ , ๋‹จ์ˆœํ™”๋œ ์‚ฌ์šฉ์œผ๋กœ ๋ณ€ํ™”์— ๋Œ€ํ•œ ์˜ํ–ฅ์„ ์ตœ์†Œํ™”ํ•œ๋‹ค. 

 

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

 

 

3. Inheritance (์ƒ์†) // ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ๋ฅผ ์ค„์—ฌ์„œ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ธ๋‹ค. 

 

  • ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ํŠน์ง•์„ ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ๋ฌผ๋ ค๋ฐ›๋Š” ๊ฒƒ
  • ์ฆ‰, ๊ธฐ๋ณธ ํด๋ž˜์Šค(base class)์˜ ํŠน์ง•์„ ํŒŒ์ƒ ํด๋ž˜์Šค(derived class)๊ฐ€ ์ƒ์†๋ฐ›๋Š”๋‹ค. 

 

 

4. Polymorphism (๋‹คํ˜•์„ฑ) // ๋™์ผํ•œ ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•ด if ์กฐ๊ฑด๋ฌธ ๋Œ€์‹  ๊ฐ์ฒด์˜ ํŠน์„ฑ์— ๋งž๊ฒŒ ๋‹ฌ๋ฆฌ ์ž‘์„ฑํ•˜๋Š” ๊ฒŒ ๊ฐ€๋Šฅํ•˜๋‹ค. 

 

  • ๊ฐ™์€ ์ด๋ฆ„์„ ๊ฐ€์ง„ ๋ฉ”์„œ๋“œ์—ฌ๋„ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„๋  ์ˆ˜ ์žˆ๋‹ค. 
  • ์˜ˆ๋ฅผ๋“ค๋ฉด ์•„๊ณ ๋ผ์Šคํ…Œ์ด์ธ  ๋งŒ๋“ค๊ธฐ์—์„œ render๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ์กฐ๊ธˆ์”ฉ ๋‹ค๋ฅด๊ฒŒ ์ž‘๋™ํ–ˆ๋‹ค.