Search
πŸ“¦

Object

Object을 μ•Œμ•„μ•Ό ν•˜λŠ” 이유

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ 객체λ₯Ό μ€‘μš”ν•˜κ²Œ μ‚¬μš©ν•˜λŠ” 이유λ₯Ό λͺ¨λ₯Έλ‹€λ©΄

이 λ¬Έμ„œλ₯Ό 보고 λ‚˜λ©΄

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ 객체가 κ°€μ§€λŠ” νŠΉμ§•μ„ λ³΅μŠ΅ν•˜κ³ , λͺ¨λ₯΄λŠ” 뢀뢄을 μ°Ύμ•„λ‚˜μ„€ 수 μžˆλ‹€.

Object

κ°μ²΄λΌλŠ” 말은 ν”„λ‘œκ·Έλž˜λ°ν•˜λ©΄μ„œ 많이 듀어보고 κ΅¬ν˜„ 및 μ‚¬μš© λ˜ν•œ 해봀을 ν…λ°μš”. κ°μ²΄λž€ κ³Όμ—° λ¬΄μ—‡μΌκΉŒμš”? κ°μ²΄λž€ 물리적으둜 μ‘΄μž¬ν•˜κ±°λ‚˜ μΆ”μƒμ μœΌλ‘œ 생각할 수 μžˆλŠ” 것 μ€‘μ—μ„œΒ μžμ‹ μ˜ 속성을 가지고 있고 λ‹€λ₯Έ 것과 식별 κ°€λŠ₯ν•œ 것을 μ˜λ―Έν•©λ‹ˆλ‹€. κ°μ²΄λŠ” 속성과 λ™μž‘(λ©”μ†Œλ“œ)으둜 κ΅¬μ„±λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ μ†Œν”„νŠΈμ›¨μ–΄μ—μ„œ 객체λ₯Ό λ§Œλ“ λ‹€λŠ” 것은 물리적 μ‘΄μž¬λ‚˜, 좔상적 μƒκ°μ˜ κ΅¬ν˜„λ¬Όλ“€μ„ 속성과 λ©”μ†Œλ“œλ‘œ μ •μ˜ν•˜λŠ” 과정이라고 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œμ˜ Object

μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 데이터 μ €μž₯을 μœ„ν•΄ μ›μ‹œ μžλ£Œν˜•κ³Ό 객체 이 2가지 μ’…λ₯˜μ˜ μžλ£Œν˜•μ„ μ‚¬μš©ν•©λ‹ˆλ‹€. μˆ«μžλ‚˜ λ¬Έμžμ—΄ 같은 λ‹¨μΌν•œ 데이터λ₯Ό μ €μž₯ν•˜λŠ” μ›μ‹œ μžλ£Œν˜•μ€ μžλ°”μŠ€ν¬λ¦½νŠΈ μ•ˆμ—μ„œ μ‚¬μš©ν•˜λŠ” 기본적인 데이터 μ €μž₯ ν˜•νƒœμž…λ‹ˆλ‹€. ν•˜μ§€λ§Œ μ‹€μ œ μš°λ¦¬κ°€ μ‚΄μ•„κ°€λŠ” μ„Έμƒμ˜ 데이터듀은 이런 μ›μ‹œ μžλ£Œν˜•μœΌλ‘œλŠ” λ‹€ 담을 μˆ˜κ°€ μ—†μŠ΅λ‹ˆλ‹€. λΆˆκ°€λŠ₯ν•œ 것은 μ•„λ‹ˆμ§€λ§Œ, 수 백개의 λ³€μˆ˜λ₯Ό μ„ μ–Έν•΄μ•Ό ν•˜λŠ” λ“± 맀우 λΉ„νš¨μœ¨μ μΌ 수 있죠.
그리고 μžλ°”μŠ€ν¬λ¦½νŠΈκ°€ μ£Ό λ¬΄λŒ€λ‘œ ν™œλ™ν•˜λŠ” μ›Ήμ—μ„œλŠ” λ‹€μ–‘ν•œ 데이터듀이 JSON λ˜λŠ” XML λ“±μ˜ ν˜•νƒœλ‘œ ν‘œν˜„λ˜μ–΄ μ „μ†‘λ˜λ©°, μ—¬λŸ¬ νƒ€μž…μ˜ 데이터가 λ„˜μ–΄μ˜΅λ‹ˆλ‹€. 이런 데이터λ₯Ό 일일이 ꡬ뢄해 μ €μž₯ν•œλ‹€λ©΄ λ§Žμ€ 처리 μ§€μ—°μ‹œκ°„μ„ λ°œμƒμ‹œν‚€κ³ , λΉ„νš¨μœ¨μ μΈ μ—°μ‚° μž‘μš©μ΄ 많이 ν•„μš”ν•©λ‹ˆλ‹€. 이런 λ³΅μž‘μ„±μ€ μ„œλΉ„μŠ€ μ‚¬μš©μžμ—κ²Œ λŒ€κΈ°μ‹œκ°„μ„ λ°œμƒμ‹œν‚€κ³  μ΄νƒˆμ„ μ•ΌκΈ°ν•  μˆ˜λ„ 있죠. κ°μ²΄λŠ” μ΄λŸ¬ν•œ 데이터듀을 ν•˜λ‚˜μ˜ μ»¨ν…Œμ΄λ„ˆμ— λ‹΄μ•„ μ €μž₯ν•˜κ³ , 데이터에 μ ‘κ·Όν•  수 있게 λ„μ™€μ€λ‹ˆλ‹€.
μ•„λž˜λŠ” 객체에 λŒ€ν•΄ μ΄ν•΄ν•˜κ³  μžˆλŠ”μ§€ 체크해볼 수 μžˆλŠ” λ‚΄μš©μΈλ°μš”. μ•„λž˜μ˜ λ‚΄μš© 쀑 μ•Œκ³  μžˆλŠ” 것과 λͺ¨λ₯΄λŠ” 뢀뢄을 체크해보고, ν•™μŠ΅ν•΄λ³΄λ©΄ 쒋을 것 κ°™μ•„μš”!

μ…€ν”„ 체크리슀트

1) 객체의 μ •μ˜

κ°μ²΄λŠ” 값을 μ €μž₯ν•˜λŠ”, 이름이 뢙은 μ†μ„±μœΌλ‘œ κ΅¬μ„±λœλ‹€..
μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ 거의 λͺ¨λ“  것듀은 객체와 같이 λ™μž‘ν•œλ‹€. 볡합 κ°μ²΄λŠ” λ¬Όλ‘ , 객체와 μ›μ‹œκ°’ μ—­μ‹œ 객체처럼 μ·¨κΈ‰ν•  수 μžˆλ‹€. 이 λ•Œλ¬Έμ— μΌλΆ€μ—μ„œλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” λͺ¨λ“  것이 객체라고도 ν•œλ‹€.
κ°μ²΄λŠ” new ν‚€μ›Œλ“œμ™€ ν•¨κ»˜ μƒμ„±μž ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜μ—¬ λ§Œλ“€ 수 μžˆλ‹€. λ˜λŠ” literal μ΄λΌλŠ” 약식 ν‘œν˜„μ„ μ‚¬μš©ν•΄μ„œ λ§Œλ“€ μˆ˜λ„ μžˆλ‹€.

2) 객체와 μ›μ‹œ κ°’

null, undefined, "string", 10, true, falseλŠ” λͺ¨λ‘ 객체처럼 닀루지 μ•ŠμœΌλ©΄ 객체의 νŠΉμ„±μ„ 갖지 μ•ŠλŠ” μ›μ‹œκ°’μ΄λ‹€.
μ›μ‹œκ°’μ€ κ°’μœΌλ‘œ μ €μž₯되고, μ›μ‹œκ°’μ„ λ³΅μ‚¬ν•˜λ©΄ κ·ΈλŒ€λ‘œ 볡사가 λœλ‹€. 반면 κ°μ²΄λŠ” μ°Έμ‘°κ°€ μ €μž₯λ˜λ―€λ‘œ 객체λ₯Ό λ³΅μ‚¬ν•˜λ©΄ 참쑰만 λ³΅μ‚¬λœλ‹€.
μ›μ‹œκ°’μ€ λ‹€λ₯Έ μ›μ‹œκ°’κ³Ό 비ꡐ할 λ•Œ 값이 같은지 λΉ„κ΅ν•œλ‹€. 반면 κ°μ²΄λŠ” λ‹€λ₯Έ 객체와 비ꡐ할 λ•Œ μ„œλ‘œ λ˜‘κ°™μ€ 객체λ₯Ό μ°Έμ‘°ν•˜κ³  μžˆλŠ”μ§€ ν™•μΈν•œλ‹€. 즉 κ°μ²΄λŠ” μ„œλ‘œ λ™μΌν•œ 객체λ₯Ό μ°Έμ‘°ν•˜κ³  μžˆμ„ λ•Œλ§Œ 같은 κ²ƒμœΌλ‘œ λ³Έλ‹€.

3) 객체와 Prototype

객체의 속성을 μ°Έμ‘°ν•˜λ©΄ λ¨Όμ € ν•΄λ‹Ή 객체에 속성이 μ°Έμ‘°λ˜μ–΄ μžˆλŠ”μ§€ ν™•μΈν•˜κ³ , μ°Έμ‘°λ˜μ–΄μžˆμ§€ μ•ŠμœΌλ©΄ μƒμ„±μž ν•¨μˆ˜μ˜ prototype μ†μ„±μ—μ„œ μ°ΎλŠ”λ‹€. μ—¬κΈ°μ„œλ„ 찾을 수 μ—†μœΌλ©΄ prototype은 객체이고, κ°μ²΄λŠ” Object() μƒμ„±μžλ‘œλΆ€ν„° λ§Œλ“€μ–΄μ§€λ―€λ‘œ Object() μƒμ„±μžμ˜ prototype 속성(Object.prototype)μ—μ„œ 속성을 μ°ΎλŠ”λ‹€. μ—¬κΈ°μ„œλ„ 속성을 찾을 수 μ—†μœΌλ©΄ 이 속성은 μ •μ˜λ˜μ§€ μ•Šμ•˜λ‹€(undefined)κ³  νŒλ‹¨ν•œλ‹€.
μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” ν”„λ‘œν† νƒ€μž… 체인 검색을 μ‚¬μš©ν•΄ 상속을 κ΅¬ν˜„ν•œλ‹€(이λ₯Ό ν”„λ‘œν† νƒ€μž… 상속이라고 λΆ€λ₯Έλ‹€,)
prototype 속성은 Object() κ°μ²΄λΌλŠ” 사싀과 객체 속성 검색 체인(=ν”„λ‘œν† νƒ€μž… 상속) 덕뢄에 λͺ¨λ“  κ°μ²΄λŠ” Object()λ₯Ό μƒμ†λ°›λŠ”λ‹€.

4) ν•¨μˆ˜μ™€ κ°μ²΄μ—μ„œμ˜ μŠ€μ½”ν”„

μžλ°”μŠ€ν¬λ¦½νŠΈ ν•¨μˆ˜λŠ” 1κΈ‰ 객체닀. ν•¨μˆ˜λŠ” 속성과 값을 μ§€λ‹Œ 객체닀.
ν•¨μˆ˜ μ•ˆμ—μ„œ μ‚¬μš©ν•˜λŠ” this ν‚€μ›Œλ“œλŠ” ν•¨μˆ˜λ₯Ό ν¬ν•¨ν•œ 객체λ₯Ό μ°Έμ‘°ν•œλ‹€.
this의 값은 ν•¨μˆ˜κ°€ ν˜ΈμΆœλ˜λŠ” μ»¨ν…μŠ€νŠΈμ— 따라 κ²°μ •λœλ‹€.
μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” κ³ μœ ν•œ μŠ€μ½”ν”„λ₯Ό λ§Œλ“€κΈ° μœ„ν•΄ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•œλ‹€.
ν•¨μˆ˜λŠ” μŠ€μ½”ν”„ 체인을 톡해 λ³€μˆ˜λ₯Ό μ°ΎλŠ”λ‹€.
μŠ€μ½”ν”„ 체인은 μ½”λ“œκ°€ μž‘μ„±λœ μœ„μΉ˜μ— 따라 λ§Œλ“€μ–΄μ§€λ―€λ‘œ ν•¨μˆ˜κ°€ 호좜된 μ»¨ν…μŠ€νŠΈμ—λŠ” 영ν–₯을 받지 μ•ŠλŠ”λ‹€. 이 덕뢄에 ν•œ 번 μž‘μ„±λœ ν•¨μˆ˜λŠ” λ‹€λ₯Έ μ»¨ν…μŠ€νŠΈ μ—μ„œ μ‹€ν–‰λ˜λ”λΌλ„ μ›λž˜μ˜ μŠ€μ½”ν”„μ— μ ‘κ·Όν•  수 μžˆλ‹€. 이런 νŠΉμ„±μœΌλ‘œ 인해 ν΄λ‘œμ €κ°€ λ§Œλ“€μ–΄μ§„λ‹€.

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œμ˜ OOP(Object Oriented Programming)

OOP의 κΈ°λ³Έ 컨셉은 ν”„λ‘œκ·Έλž¨ λ‚΄μ—μ„œ ν‘œν˜„ν•˜κ³ μž ν•˜λŠ” μ‹€ 세계(real world)의 일듀을 객체λ₯Ό μ‚¬μš©ν•΄μ„œ λͺ¨λΈλ§ν•˜κ³ , 객체λ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©΄ λΆˆκ°€λŠ₯ ν˜Ήμ€ μ•„μ£Ό 어렀웠을 일듀을 μ‰½κ²Œ μ²˜λ¦¬ν•˜λŠ” 방법을 μ œκ³΅ν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. -MDN-
Plain Text
볡사
μžλ°”μŠ€ν¬λ¦½νŠΈμ—λŠ” Object, Function, Array λ“±κ³Ό 같이 λ‹€μ–‘ν•œ κΈ°λ³Έ 객체듀이 있고, λͺ¨λ“  κ°μ²΄λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ κΈ°λ³Έ 객체인 Objectλ₯Ό ν™•μž₯ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 클래슀 기반이 μ•„λ‹ˆλΌ ν”„λ‘œν†  νƒ€μž…μ„ 기반으둜 ν•˜λŠ” 객체 기반의 μ–Έμ–΄μž…λ‹ˆλ‹€. μ΄λ ‡κ²Œ 기반이 λ‹€λ₯΄κΈ° λ•Œλ¬Έμ— μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό μ‚¬μš©ν•˜μ—¬ 객체의 계측 ꡬ쑰λ₯Ό λ§Œλ“€κ³  μƒμ†ν•˜λŠ” 방법은 λͺ…ν™•ν•˜μ§€ μ•Šμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.
μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” ν•¨μˆ˜ 기반 언어인 Scheme을 기반으둜 λ§Œλ“€μ–΄μ§„ λ’€ μžλ°”μ—μ„œ λ‹€μ–‘ν•œ ν”„λ‘œκ·Έλž˜λ° κ°œλ…λ“€μ„ κ°€μ Έμ™”λŠ”λ°μš”. λ”°λΌμ„œ 객체지ν–₯ μ–Έμ–΄λŠ” μ•„λ‹ˆμ§€λ§Œ 객체지ν–₯κ³Ό λΉ„μŠ·ν•œ νŠΉμ§•λ“€μ„ μ§€μ›ν•©λ‹ˆλ‹€. 이λ₯Ό κ°€λŠ₯ν•˜κ²Œ ν•˜λŠ” κ°œλ…μ΄ λ°”λ‘œΒ ν”„λ‘œν† νƒ€μž…(prototype)Β μž…λ‹ˆλ‹€.
사싀 OOP와 객체지ν–₯의 ν΄λž˜μŠ€λΌλŠ” μ£Όμ œλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 핡심을 κ΄€ν†΅ν•˜λŠ” λ‚΄μš©μ΄λΌκ³  λ³΄κΈ°λŠ” μ–΄λ ΅μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ ν”„λ‘œκ·Έλž˜λ° 세계λ₯Ό μ΄ν•΄ν•˜λŠ”λ° μžˆμ–΄ μ€‘μš”ν•œ κ°œλ…μ΄κ³ , μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ λ°μ΄ν„°νƒ€μž…, μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ, this, ν΄λ‘œμ €, ν”„λ‘œν† νƒ€μž… 등을 μ΄ν•΄ν•˜λŠ” 데 큰 도움이 λ©λ‹ˆλ‹€.

참고 링크

β€’