πŸ€” ν”„λ‘œν† νƒ€μž…μ˜ μž₯점은 λ¬΄μ—‡μΌκΉŒ?

thumb_hyeokΒ·2022λ…„ 12μ›” 30일
1

🟑 JavaScript

λͺ©λ‘ 보기
15/15
post-thumbnail

πŸš€ λ“€μ–΄κ°€λ©°

μ–Όλ§ˆ μ „, μš°μ•„ν•œν˜•μ œλ“€ κΈ°μˆ λ©΄μ ‘μ—μ„œ β€œν”„λ‘œν† νƒ€μž…μ˜ μž₯점은 λ¬΄μ—‡μΈκ°€μš”?” λΌλŠ” μ§ˆλ¬Έμ„ λ°›μ•˜λ‹€. λ‚˜μ˜ 닡변이 λΆ€μ‘±ν•œ 뢀뢄이 λ§Žμ•˜λ˜ 것 κ°™μ•„κ³  μ•„λ¬΄λž˜λ„ μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ μ½”μ–΄ν•œ κ°œλ…μ΄κΈ°λ„ ν•œλ§ŒνΌ λ‹€μ‹œ 깊게 파보렀고 이 글을 μ“°κ²Œ λ˜μ—ˆλ‹€.

ν”„λ‘œν† νƒ€μž…μ„ μž₯단점을 μ‚΄νŽ΄λ³΄κΈ° μœ„ν•΄ 총 μ„Έ 가지 파트둜 λ‚˜λˆ„μ–΄μ„œ μ§„ν–‰ν•˜λ €κ³  ν•œλ‹€.

  • Prototype vs Class, on OOP
  • Prototype in JavaScript
  • Prototype, Merits and Demerits

OOPμ—μ„œμ˜ 두가지 μ»¨μ…‰μ˜ κ°œλ…κ³Ό 지ν–₯ν•˜λŠ” μ² ν•™λΆ€ν„°, μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œμ˜ ν”„λ‘œν† νƒ€μž…μ„ κ°€λ³κ²Œ ν•œ 번 μ‚΄νŽ΄λ³΄κ³  그리고 λ§ˆμ§€λ§‰μœΌλ‘œ 핡심인 β€œν”„λ‘œν† νƒ€μž…μ˜ μž₯단점은 무엇인지”λ₯Ό λ‹€μ‹œ λŒ€λ‹΅ν•΄λ³΄λ„λ‘ ν•˜κ² λ‹€.


πŸ₯Š Prototype vs Class, on OOP

μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ ν”„λ‘œν† νƒ€μž…μ€ 1987년에 λ“±μž₯ν•œ 졜초의 ν”„λ‘œν† νƒ€μž… 객체 지ν–₯ 언어인 β€œSelfβ€μ—μ„œ κ°€μ Έμ˜¨ κ°œλ…μ΄λ‹€. β€œSelf”λ₯Ό 톡해 기쑴의 클래슀 기반 ν”„λ‘œκ·Έλž˜λ°κ³Ό λΉ„κ΅λ˜λŠ” β€œν”„λ‘œν† νƒ€μž… 기반 ν”„λ‘œκ·Έλž˜λ°β€μ΄λΌλŠ” νŒ¨λŸ¬λ‹€μž„μ— λŒ€ν•΄μ„œ μ•Œμ•„λ³΄μž.

Class-based Programing

λ¨Όμ €, 클래슀 기반 객체 지ν–₯ μ–Έμ–΄λ“€μ˜ 문제λ₯Ό μ‚΄νŽ΄λ³΄μž.

클래슀 기반 객체 지ν–₯ μ–Έμ–΄λŠ” 뿌리 κΉŠμ€ 이쀑성을 기반으둜 ν•œλ‹€.

  1. ν΄λž˜μŠ€λŠ” 객체의 κΈ°λ³Έ β€œνŠΉμ§•β€κ³Ό β€œν–‰λ™β€μ„ μ •μ˜ν•œλ‹€.
  2. 객체 μΈμŠ€ν„΄μŠ€λŠ” 클래슀의 νŠΉμ • ν‘œν˜„μ΄λ‹€.

μœ„μ— λŒ€ν•œ μ˜ˆμ‹œλ₯Ό 보자. Vehicle μ΄λΌλŠ” ν΄λž˜μŠ€κ°€ μžˆλ‹€. Vehicle ν΄λž˜μŠ€λŠ” β€œμ§μž₯κΉŒμ§€ μš΄μ „β€, β€œκ±΄μΆ• 자재 배달” κ³Ό 같은 λ‹€μ–‘ν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆλŠ” κΈ°λŠ₯이 μžˆλ‹€.

그리고, ν•΄λ¦¬μ˜ μ°¨λ₯Ό μœ„ν•΄ Vehicle 클래슀의 ferrari λΌλŠ” 이름을 가진 객체 μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν–ˆλ‹€. 그런데 μ•Œκ³  λ³΄λ‹ˆ ferrari λŠ” μŠ€ν¬μΈ μΉ΄μ˜€λ‹€. Vehicle 클래슀의 μΈμŠ€ν„΄μŠ€μΈ ferrari λŠ” β€œκ±΄μΆ• 자재 배달”을 μˆ˜ν–‰ν•  수 μžˆμ–΄μ•Ό ν•˜μ§€λ§Œ, μ‹€μ œλ‘  ν•  수 μ—†λ‹€.

이 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄μ„œλŠ” Vehicle 의 μ„œλΈŒν΄λž˜μŠ€λ₯Ό μ‚¬μš©ν•΄ μ „λ¬Έν™”ν•  수 μžˆλ‹€.

Vehicle 이 μ„œλΈŒν΄λž˜μŠ€λ‘œ SportsCar , Truck λ₯Ό 갖도둝 λͺ¨λΈλ§ν•œλ‹€. 그리고, β€œκ±΄μΆ• 자재 배달”은 Truck 으둜 μƒμ„±λœ μΈμŠ€ν„΄μŠ€κ°€ ν•  수 μžˆλ„λ‘, β€œκ³ μ† 주행”은 SportsCar 둜 μƒμ„±λœ μΈμŠ€ν„΄μŠ€κ°€ ν•  수 μžˆλ„λ‘ λ§Œλ“€μ–΄μ•Όν•œλ‹€.

κ·ΈλŸ¬λ‚˜, μ΄λŸ¬ν•œ 심측 λͺ¨λΈμ€ 클래슀 섀계 μ‹œ 더 λ§Žμ€ 톡찰λ ₯이 ν•„μš”ν•˜λ‹€. λ¨Ό λ―Έλž˜μ— 객체와 ν΄λž˜μŠ€κ°€ μ–΄λ–€ νŠΉμ„±μ„ κ°–κ²Œ 될지 ν™•μ‹€ν•˜κ²Œ μ˜ˆμΈ‘ν•  수 μ—†λ‹€λ©΄ 클래슀 계측 ꡬ쑰λ₯Ό μ œλŒ€λ‘œ 섀계할 수 μ—†λ‹€.

λ˜ν•œ 클래슀λ₯Ό λ³€κ²½ν•˜λ©΄ 클래슀λ₯Ό 기반으둜 ν•˜λŠ” 객체의 λ™μž‘μ΄ λ³€κ²½λœλ‹€. μ΄λŸ¬ν•œ 변경은 ν•΄λ‹Ή 클래슀λ₯Ό 기반으둜 ν•˜λŠ” λ‹€λ₯Έ 객체에 μ˜ˆμƒμΉ˜ λͺ»ν•œ λ¬Έμ œκ°€ λ°œμƒν•  수 있기 λ•Œλ¬Έμ— 맀우 μ‹ μ€‘ν•˜κ²Œ μ‹€μ‹œν•΄μ•Όν•œλ‹€.

μ΄λŸ¬ν•œ λ¬Έμ œκ°€ ν”„λ‘œν† νƒ€μž…μ„ λ§Œλ“œλŠ” 동기 μš”μΈ 쀑 ν•˜λ‚˜μ΄λ‹€.


Prototype-based Programing

Selfμ—μ„œλŠ” β€œν΄λž˜μŠ€β€λ₯Ό 기반으둜 ν•˜λŠ” 객체의 β€œμΈμŠ€ν„΄μŠ€β€λ₯Ό κ°–λŠ” λŒ€μ‹  κΈ°μ‘΄ 객체의 볡사본을 λ§Œλ“€κ³  λ³€κ²½ν•œλ‹€. λ”°λΌμ„œ μœ„μ˜ μ˜ˆμ‹œμ—μ„œ Vehicle 객체의 볡사본을 λ§Œλ“  λ‹€μŒ β€œκ³ μ† 주행” λ™μž‘μ„ μΆ”κ°€ν•˜μ—¬ ferrari 둜써 λͺ¨λΈλ§λœλ‹€. μ„œλΈŒν΄λž˜μŠ€λ₯Ό λ§Œλ“œλŠ” 과정이 ν•„μš”μ—†λŠ” 것이닀.

μ΄λ ‡κ²Œ 객체의 볡사본을 λ§Œλ“€ λ•Œμ˜ κΈ°μ‘΄ 객체λ₯Ό β€œν”„λ‘œν† νƒ€μž…β€μ΄λΌ ν•œλ‹€.

ν”„λ‘œν† νƒ€μž…μ„ μ‚¬μš©ν•˜λ©΄, κΈ°μ‘΄ 객체가 λΆ€μ μ ˆν•œ λͺ¨λΈμΈ 것인 판λͺ…λ˜μ—ˆμ„ λ•Œ, μ˜¬λ°”λ₯Έ λ™μž‘μ„ κ°€μ§€λŠ” λ³€κ²½λœ 객체λ₯Ό μž‘μ„±ν•΄ 그것을 λŒ€μ‹  μ‚¬μš©ν•  수 μžˆλ‹€. κΈ°μ‘΄ 객체λ₯Ό μ‚¬μš©ν•˜λŠ” μ½”λ“œκ°€ λ³€κ²½λ˜λŠ” λ¬Έμ œλ„ λ°œμƒν•˜μ§€ μ•ŠλŠ”λ‹€.


πŸ•πŸ© Prototype in JavaScript

μœ„μ—μ„œ β€œν”„λ‘œν† νƒ€μž… 기반 ν”„λ‘œκ·Έλž˜λ°β€κ³Ό β€œν΄λž˜μŠ€ 기반 ν”„λ‘œκ·Έλž˜λ°β€μ„ λΉ„κ΅ν•΄λ΄€μœΌλ‹ˆ, μ‹€μ œλ‘œ μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ ν”„λ‘œν† νƒ€μž…μ€ μ–΄λ–€ 것인지λ₯Ό μ‚΄νŽ΄λ³΄μž.

ν”„λ‘œν† νƒ€μž… 객체λ₯Ό λ§Œλ“  λ‹€μŒ μƒˆ μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“­λ‹ˆλ‹€. κ°μ²΄λŠ” JavaScriptμ—μ„œ λ³€κ²½ κ°€λŠ₯ν•˜λ―€λ‘œ μƒˆ μΈμŠ€ν„΄μŠ€λ₯Ό λ³΄κ°•ν•˜μ—¬ μƒˆ ν•„λ“œμ™€ λ©”μ„œλ“œλ₯Ό μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 그런 λ‹€μŒ 이듀은 더 μƒˆλ‘œμš΄ 객체의 ν”„λ‘œν† νƒ€μž… 역할을 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.Β μœ μ‚¬ν•œ 객체λ₯Ό 많이 λ§Œλ“€κΈ° μœ„ν•΄ ν΄λž˜μŠ€κ°€ ν•„μš”ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. κ°μ²΄λŠ” κ°μ²΄μ—μ„œ μƒμ†λ©λ‹ˆλ‹€. 그보닀 더 객체지ν–₯적인 것이 μžˆμ„κΉŒμš”?

μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ ν”„λ‘œν† νƒ€μž… 상속에 κ΄€ν•œ λ”κΈ€λΌμŠ€ ν¬λ½ν¬λ“œμ˜ μ„€λͺ…이닀.
초기의 μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” ν”„λ‘œν† νƒ€μž…μ„ μ±„νƒν•˜λ©΄μ„œλ„, μžλ°”μ²˜λŸΌ 보이기 μœ„ν•΄μ„œ β€œμƒμ„±μž ν•¨μˆ˜β€μ™€ β€œnew ν‚€μ›Œλ“œβ€λ₯Ό μ‚¬μš©ν–ˆμ§€λ§Œ 클래슀 기반 OOP둜 λ³΄μ΄μ§€λ§Œ 사싀상 ν”„λ‘œν† νƒ€μž… 기반이기 λ•Œλ¬Έμ— 더 큰 ν˜Όλž€μ„ μ΄ˆλž˜ν–ˆλ‹€.

JavaScript의 μƒμ„±μž νŒ¨ν„΄μ€ 고전적인 κ΅°μ€‘μ—κ²Œ ν˜Έμ†Œλ ₯이 μ—†μ—ˆμŠ΅λ‹ˆλ‹€.Β λ˜ν•œ JavaScript의 μ§„μ •ν•œ ν”„λ‘œν† νƒ€μž… νŠΉμ„±μ„ λͺ¨ν˜Έν•˜κ²Œ λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€. 결과적으둜 μ–Έμ–΄λ₯Ό 효과적으둜 μ‚¬μš©ν•˜λŠ” 방법을 μ•„λŠ” ν”„λ‘œκ·Έλž˜λ¨ΈλŠ” 거의 μ—†μŠ΅λ‹ˆλ‹€.

μœ„λŠ” μƒμ„±μž νŒ¨ν„΄μ— λŒ€ν•œ λ”κΈ€λΌμŠ€ ν¬λ½ν¬λ“œμ˜ μ˜κ²¬μ΄λ‹€. 이후 Object.create() λ₯Ό ECMAScript5 λΆ€ν„° μ§€μ›ν•˜λ©΄μ„œ 기쑴의 λ¬Έμ œμ μ„ ν•΄κ²°ν•  수 있게 λ˜μ—ˆλ‹€.

μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ ν”„λ‘œν† νƒ€μž…μ„ 톡해 객체λ₯Ό μƒμ„±ν•˜κ³  ν”„λ‘œν† νƒ€μž…μ„ ν™œμš©ν•˜λŠ” 것을 κ°„λ‹¨ν•˜κ²Œλ§Œ μ‚΄νŽ΄λ³΄μž.

μœ„ μ½”λ“œλŠ” μ•„κΉŒμ˜ μ˜ˆμ‹œλ‘œ λ“  Vehicle κ³Ό SportsCar λ₯Ό μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ ν”„λ‘œν† νƒ€μž…μ„ 톡해 μƒμ„±ν•œ μ½”λ“œμ΄λ‹€. ferrari λŠ” λ”°λ‘œ μ„œλΈŒν΄λž˜μŠ€λ₯Ό λ§Œλ“€ ν•„μš” 없이 Vehicle λ₯Ό ν”„λ‘œν† νƒ€μž…μœΌλ‘œ μ§€μ •ν•˜μ—¬ driveToCompony λ©”μ„œλ“œλ₯Ό μœ„μž„ν•  수 있고, λͺ©μ μ— 맞게 μ‚¬μš©ν•  수 μžˆλ„λ‘ ferrari 객체에 λ”°λ‘œ speedDrive λΌλŠ” λ©”μ„œλ“œλ„ μΆ”κ°€ν•΄μ£Όμ—ˆλ‹€.

사싀 μ—¬κΈ°μ„œ Vehicle 직접 μ‚¬μš©λ˜λŠ” 객체라기보닀 ν”„λ‘œν† νƒ€μž…μœΌλ‘œμ¨μ˜ μ—­ν• λ§Œ ν•˜λŠ” 것 κ°™μ•„μ„œ 쒋은 λ°©μ‹μ΄λΌλŠ” 생각이 λ“€μ§€λŠ” μ•ŠλŠ”λ‹€. 이건 μ•„λž˜μ—μ„œ 더 μ‚΄νŽ΄λ³΄μž.

이 글을 μ½λŠ” λŒ€μƒμ€ ν”„λ‘œν† νƒ€μž…μ— λŒ€ν•œ μ–΄λŠ μ •λ„μ˜ 이해가 μžˆλ‹€κ³  μƒκ°ν•˜κ³  __proto__ , prototype λ“±λ“± 내뢀적인 λΆ€λΆ„μ΄λ‚˜ μžμ„Έν•œ μ‚¬ν•­κΉŒμ§€λŠ” 닀루지 μ•Šκ² λ‹€.

이제 λ§ˆμ§€λ§‰μœΌλ‘œ λ„˜μ–΄κ°€μ„œ ν”„λ‘œν† νƒ€μž…μ˜ μž₯단점을 μ‚΄νŽ΄λ³΄μž!


πŸ‘ Merits

1️⃣ 점진적 ν•™μŠ΅

ν΄λž˜μŠ€μ™€ 상속, ν”„λ‘œν† νƒ€μž…κ³Ό μœ„μž„μ€ β€œκ΅¬μ²΄μ μΈ μƒν™©μ—μ„œ 얻은 지식을 μΌλ°˜ν™”ν•˜λŠ” λ°©μ‹β€μ˜ 두 가지 λ©”μ»€λ‹ˆμ¦˜μ΄λ‹€. ν•˜λ‚˜μ˜ μ˜ˆμ‹œλ₯Ό 톡해 두 가지λ₯Ό λΉ„κ΅ν•΄λ³΄μž.

μœ„μ— Vehicle κ΄€λ ¨ μ˜ˆμ‹œλ₯Ό 가져와보겠닀. λ‚˜μ—κ²Œ ferrari λΌλŠ” μžλ™μ°¨κ°€ μžˆλ‹€. μ΄λŠ” μƒˆλ‘œμš΄ μžλ™μ°¨μΈ volvo 을 λ§Œλ‚¬μ„ λ•Œ ferrari 에 λŒ€ν•œ 지식을 ν™œμš©ν•  수 μžˆλ‹€. λ‘˜μ€ λͺ¨λ‘ μžλ™μ°¨μ΄κΈ° λ•Œλ¬Έμ— 곡톡점을 가지고 μžˆμ„ 것이고 이λ₯Ό μΌλ°˜ν™”μ‹œν‚¬ 수 μžˆμ„ 것이닀.

클래슀

이λ₯Ό μ–΄λ–»κ²Œ ν•˜λŠ”μ§€, λ¨Όμ € 클래슀λ₯Ό μ‚΄νŽ΄λ³΄μž.

ν΄λž˜μŠ€μ—μ„œλŠ” Vehicle μ΄λΌλŠ” 클래슀(집합)을 생성할 수 μžˆλ‹€. μ΄λŸ¬ν•œ Vehicle ν΄λž˜μŠ€λŠ” λ‚˜μ—κ²Œ μžˆλŠ” ferrari 와 μΆ©λΆ„νžˆ μœ μ‚¬ν•œ λͺ¨λ“  μžλ™μ°¨μ— λŒ€ν•΄ 사싀이라고 λ―ΏλŠ” 것을 μΆ”μƒν™”ν•œ 집합이닀. ferrari λŠ” Vehicle 의 μΈμŠ€ν„΄μŠ€(ꡬ성원)으둜 λ³Ό 수 μžˆλ‹€.

클래슀(집합)λŠ” λͺ¨λ“  μΈμŠ€ν„΄μŠ€(ꡬ성원)에 λŒ€ν•΄ 사싀을 λ‚˜νƒ€λ‚΄λ―€λ‘œ 이후에 μžλ™μ°¨μΈ volvo 을 λ§Œλ‚˜λ©΄ Vehicle 을 톡해 volvo λ₯Ό μ„€λͺ…ν•  수 μžˆλ‹€.

그리고 κ°μžκ°€ λ‹€λ₯Έ Vehicle κ³Ό κ³΅μœ ν•˜μ§€ μ•ŠλŠ” νŠΉμ„±μ„ 가지고 μžˆλ‹€λ©΄ SportsCar , Truck κ³Ό 같은 μ„œλΈŒν΄λž˜μŠ€λ₯Ό 톡해 κ΅¬ν˜„ν•  수 μžˆλ‹€.


ν”„λ‘œν† νƒ€μž…

λ‹€μŒμ€, ν”„λ‘œν† νƒ€μž…μ€ μ§€μ‹μ˜ μΌλ°˜ν™”λ‹€.

ν”„λ‘œν† νƒ€μž…μ—μ„œλŠ” ferrari λ₯Ό μžλ™μ°¨μ˜ ν”„λ‘œν† νƒ€μž…(μ›ν˜•)을 λ‚˜νƒ€λ‚΄λŠ” κ²ƒμœΌλ‘œ κ°„μ£Όν•  수 μžˆλ‹€. λ‚˜μ—κ²Œ κ°€μž₯ μΉœμˆ™ν•œ μžλ™μ°¨κ°€ ferrari 라면, μžλ™μ°¨λŠ” ferrari 자체의 이미지일 수 μžˆλ‹€.

β€œμžλ™μ°¨μ˜ 바퀴가 λͺ‡ κ°œμΈκ°€?” λΌλŠ” μ§ˆλ¬Έμ— 달리 생각해야할 νƒ€λ‹Ήν•œ μ΄μœ κ°€ μ—†λŠ” ν•œ μ§ˆλ¬Έμ— λŒ€λ‹΅ν•˜λŠ” 방식은 ferrari 의 바퀴가 λͺ‡ κ°œμΈμ§€μ™€(4개 라고 κ°€μ •) 닡이 κ°™λ‹€κ³  κ°€μ •ν•œλ‹€.

그리고 volvo 에 λŒ€ν•΄ μ„€λͺ…ν•˜κΈ° μœ„ν•΄ ν”„λ‘œν† νƒ€μž…μ—μ„œλŠ” ferrari λ₯Ό volvo 의 ν”„λ‘œν† νƒ€μž…(μ›ν˜•)으둜 지식을 ν™œμš©ν•  수 μžˆλ‹€.

β€œvolvo 의 바퀴가 λͺ‡ κ°œμΈκ°€?” λΌλŠ” μ§ˆλ¬Έμ—λŠ” λ°˜λŒ€ 증거가 μ—†λŠ” 이상 ferrari 와 κ°™λ‹€κ³  λŒ€λ‹΅ν•œλ‹€. κ·ΈλŸ¬λ‚˜, 이후 volvo 의 바퀴가 8κ°œλΌλŠ” 사싀을 μ•Œκ²Œ 되면, μ΄λŠ” volvo 에 λŒ€ν•œ μ§€μ‹μœΌλ‘œ μ €μž₯되고, ν”„λ‘œν† νƒ€μž…μ— λŒ€ν•œ μ°Έμ‘°λ₯Ό ν™•μΈν•˜κΈ° 전에 κ²€μƒ‰λœλ‹€.

λ˜ν•œ 번거둭게 κΈ°μ‘΄ 수퍼클래슀λ₯Ό μˆ˜μ •ν•˜κ±°λ‚˜, μ„œλΈŒν΄λž˜μŠ€λ₯Ό 생성할 ν•„μš”λ„ μ—†λ‹€ .

μ•„κΉŒ β€œPrototype in JavaScript” νŒŒνŠΈμ—μ„œ λ“  μ˜ˆμ‹œλ³΄λ‹€ 이 μ˜ˆμ‹œκ°€ ν”„λ‘œν† νƒ€μž…μ„ μ„€λͺ…ν•˜κΈ°μ—, μ‚¬μš©ν•˜λŠ” λ°©μ‹μœΌλ‘œλ„ 더 μ ν•©ν•˜λ‹€κ³  λ‚˜λŠ” μƒκ°ν•œλ‹€.


πŸ’‘ κ·Έλž˜μ„œ 점진적 ν•™μŠ΅μ΄ 뭔데?

μœ„μ—μ„œ μ‚΄νŽ΄λ³Έ 바에 μ˜ν•˜λ©΄, ν”„λ‘œν† νƒ€μž… μ ‘κ·Ό 방식은 μ–΄λ–€ λ©΄μ—μ„œ μ‚¬λžŒλ“€μ΄ ꡬ체적인 μƒν™©μ—μ„œ 지식을 μŠ΅λ“ν•˜λŠ” κ²ƒμ²˜λŸΌ λ³΄μ΄λŠ” 방식에 더 가깝닀.

μ‚¬λžŒλ“€μ€ 일반적인 좔상 원리λ₯Ό λ¨Όμ € ν‘μˆ˜ν•˜κ³  λ‚˜μ€‘μ— νŠΉμ • 사둀에 μ μš©ν•˜λŠ” 것보닀 ꡬ체적인 예λ₯Ό λ¨Όμ € 닀룬 λ‹€μŒ κ·Έλ‘œλΆ€ν„° μΌλ°˜ν™”ν•˜λŠ” 것을 훨씬 더 μž˜ν•˜λŠ” 것 κ°™λ‹€.

κ·ΈλŸ¬λ‚˜, 클래슀(집합)μ—μ„œλŠ” κ°œλ³„ μΈμŠ€ν„΄μŠ€(ꡬ성원)을 μƒμ„±ν•˜κΈ° 전에 λ¨Όμ € 집합에 λŒ€ν•œ 좔상화λ₯Ό ν•΄μ•Όν•œλ‹€. μˆ˜ν•™μ—μ„œ 집합은 ꡬ성원을 μ—΄κ±°ν•˜κ±°λ‚˜, μ§‘ν•©μ˜ ꡬ성원을 μ‹λ³„ν•˜λŠ” 톡합 원칙을 μ„€λͺ…ν•΄ μ •μ˜ν•œλ‹€.

κ·ΈλŸ¬λ‚˜ μš°λ¦¬λŠ” λͺ¨λ“  μžλ™μ°¨λ₯Ό μ—΄κ±°ν•  수 μ—†λ‹€. 10μ–΅λ²ˆμ§ΈκΉŒμ§€ μžλ™μ°¨μ˜ λ°”ν€΄λŠ” 4κ°œμ˜€μ§€λ§Œ, 10μ–΅1번째 μžλ™μ°¨μ˜ λ°”ν€΄λŠ” 8개일 μˆ˜λ„ μžˆλ‹€.

ν•˜μ§€λ§Œ 클래슀(집합)의 κ°œλ…μ€ 이와 μœ„λ°°λœλ‹€. 이와 같이 ν”„λ‘œν† νƒ€μž…μ€ μ‚¬λžŒλ“€μ΄ λ”μš± νŽΈν•˜κ²Œ μƒκ°ν•˜λŠ” 방식인 ꡬ체적인 μ˜ˆμ‹œλ“€μ„ 톡해 κ°œλ…μ— λŒ€ν•œ β€œμ μ§„μ  ν•™μŠ΅β€μ„ ν•˜λŠ” 데에 μœ λ¦¬ν•˜λ‹€.


2️⃣ λ©”λͺ¨λ¦¬

ν”„λ‘œν† νƒ€μž…μ€ 클래슀 방식에 λΉ„ν•΄ β€œλ©”λͺ¨λ¦¬β€λ₯Ό μ•„λ‚„ 수 μžˆλ‹€λŠ” μž₯점이 μžˆλ‹€. ν΄λž˜μŠ€λŠ” μƒˆλ‘œμš΄ μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“€ λ•Œ β€œλ³΅μ‚¬β€λ₯Ό ν•˜μ§€λ§Œ, ν”„λ‘œν† νƒ€μž…μ€ 객체와 객체λ₯Ό β€œμ—°κ²°β€ν•œλ‹€.

ν•˜λ‚˜μ˜ ν΄λž˜μŠ€μ—μ„œ 100개 μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“ λ‹€λ©΄, 클래슀의 λ©”μ„œλ“œλ₯Ό 100개 λ³΅μ‚¬ν•œλ‹€. κ·Έλ ‡μ§€λ§Œ ν”„λ‘œν† νƒ€μž…μ—μ„œλŠ” ν”„λ‘œν† νƒ€μž… 객체에 μžˆλŠ” λ©”μ„œλ“œλ₯Ό μ°Έμ‘°ν•˜κ³  μžˆμ„ λΏμž„μœΌλ‘œ, λ©”μ„œλ“œ 1개만 μ‘΄μž¬ν•˜κ²Œ λœλ‹€.

κ·Έλ ‡κΈ° λ•Œλ¬Έμ— μžλ°”μ™€ 같은 클래슀 기반 μ–Έμ–΄μ—μ„œλŠ” λ©”λͺ¨λ¦¬λ₯Ό 아끼기 μœ„ν•΄ ν•˜λ‚˜μ˜ ν΄λž˜μŠ€μ—μ„œ ν•˜λ‚˜μ˜ μΈμŠ€ν„΄μŠ€λ§Œ μƒμ„±ν•˜λŠ” 싱글톀 νŒ¨ν„΄ 등을 μ‚¬μš©ν•œλ‹€κ³  ν•œλ‹€.

λ¬Όλ‘ , μ•„λž˜μ—μ„œ λ‹€λ£¨κ² μ§€λ§Œ 이둜 μΈν•œ ν”„λ‘œν† νƒ€μž…μ˜ 단점도 μ‘΄μž¬ν•œλ‹€.


πŸ‘Ž Demerits

1️⃣ 속도

ν”„λ‘œν† νƒ€μž…μ€ μœ„μž„μ„ ν†΅ν•΄μ„œ 객체λ₯Ό 생성할 λ•Œ μƒμœ„ 객체의 λ©”μ„œλ“œλ₯Ό β€œμ—°κ²°β€ ν•˜λ―€λ‘œ 객체의 크기λ₯Ό 쀄여 λ©”λͺ¨λ¦¬λ₯Ό μ•„λ‚„ 수 μžˆλŠ” λŒ€μ‹ , λ©”μ„œλ“œλ₯Ό κ²€μƒ‰ν•˜κΈ° μœ„ν•΄ μƒμœ„ ν”„λ‘œν† νƒ€μž… 체인을 따라 κ²€μƒ‰ν•΄μ•Όν•œλ‹€.

μ΄λŠ” 속도 μ €ν•˜λ‘œ μ΄μ–΄μ§ˆ 수 μžˆλ‹€λŠ” λ¬Έμ œκ°€ μžˆλ‹€.

λ‹€ν–‰νžˆλ„, 검색 μ‹œκ°„μ„ μ€„μ΄λŠ” λ°©μ‹μœΌλ‘œ 쑰회 κ²°κ³Όλ₯Ό β€œμΊμ‹±β€ν•˜λŠ” 방법이 μžˆλ‹€κ³  ν•œλ‹€. 크둬의 V8 엔진은 β€œνžˆλ“  ν΄λž˜μŠ€β€λΌλŠ” κ°œλ…μ„ 톡해 μ΄λŸ¬ν•œ 속도 문제λ₯Ό ν•΄κ²°ν–ˆλ‹€.


🧐 정리

μ˜€λŠ˜μ€ ν”„λ‘œν† νƒ€μž… λ°©μ‹μ˜ μž₯단점을 μ•Œμ•„λ΄€λ‹€.

  • μž₯점: ꡬ체적 μ˜ˆμ‹œλ₯Ό ν†΅ν•œ κ°œλ…μ˜ 점진적 ν•™μŠ΅, λ©”λͺ¨λ¦¬λ₯Ό 효율적으둜 μ‚¬μš©
  • 단점: 속도가 느림

둜 λλ‚¬μ§€λ§Œ λ‚˜μ—΄λœ μž₯점이 더 λ§Žλ‹€κ³  ν”„λ‘œν† νƒ€μž…μ΄ 무쑰건 ν΄λž˜μŠ€λ³΄λ‹€ μ’‹λ‹€κ±°λ‚˜, κ·Έ λ°˜λŒ€λΌκ±°λ‚˜ ν•œ 것은 μ•„λ‹ˆλ‹€. μ•„μ§κΉŒμ§€λ„ λ…Όμ˜κ°€ ν™œλ°œν•œ κ²ƒμœΌλ‘œ μ•Œκ³  μžˆλ‹€.

μ–΄μ°Œλλ“  μžλ°”μŠ€ν¬λ¦½νŠΈκ°€ ν”„λ‘œν† νƒ€μž… 방식을 μ±„νƒν•œλ§ŒνΌ, ν”„λ‘œν† νƒ€μž…μ„ 잘 ν™œμš©ν•˜κΈ° μœ„ν•΄ ν”„λ‘œν† νƒ€μž…κ³Ό κ·Έ 배경에 λŒ€ν•œ 곡뢀λ₯Ό μ—΄μ‹¬νžˆ ν•˜λŠ” 것이 쒋아보인닀.

사싀 이 글을 μ“°λ©΄μ„œ λ³Έ μžλ£Œμ—μ„œ 더 λ§Žμ€ 비ꡐ와 μž₯단점을 λ΄€μ§€λ§Œ λ„μ €νžˆ 이해λ₯Ό ν–ˆλ‹€λŠ” 생각이 듀지 μ•Šμ•„μ„œ 이 κΈ€μ—λŠ” 포함을 μ‹œν‚€μ§€ λͺ»ν–ˆλ‹€. (μ—¬λŸ¬ μ†ŒμŠ€μ˜ λ™μž‘μ„ κ²°ν•©ν•˜κΈ° μœ„ν•΄ 더 μœ μ—°, 점진적이고 μΈν„°λž™ν‹°λΈŒν•œ κ°œλ°œμ— 유리 λ“±λ“± ...)

μΆ”ν›„ μ—…λ°μ΄νŠΈν•˜κ±°λ‚˜ 토끼꡴에 빠질까봐 λ―Έλ£° 것 κ°™λ‹€.


πŸ“– μ°Έκ³  자료

profile
μš°μ•„ν•œν…Œν¬μ½”μŠ€ 4κΈ° μ›Ή ν”„λ‘ νŠΈμ—”λ“œ

0개의 λŒ“κΈ€