πŸ“Œ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λŠ” λ©”μ„œλ“œκ°€ μ‘°κΈˆμ”© λ‹€λ₯΄κ²Œ μž‘λ™ν–ˆλ‹€. 

 

 

λ°˜μ‘ν˜•