λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

Javascript

(5)
Class 클래슀 Class μžλ°”μŠ€ν¬νŒνŠΈλŠ” ν”„λ‘œν† νƒ€μž… 기반의 객체지ν–₯ μ–Έμ–΄μž…λ‹ˆλ‹€. static method or static properties ν”„λ‘œν„°νƒ€μž…μ— ν• λ‹Ήλ˜μ§€ μ•Šκ³  μƒμ„±μž ν•¨μˆ˜ 객체에 직접 ν• λ‹Ήλ˜μ–΄μžˆλŠ” ν”„λ‘œνΌν‹°μ™€ λ©”μ†Œλ“œλ₯Ό static method, static properties라고 ν•©λ‹ˆλ‹€. μƒμ„±μž ν•¨μˆ˜λ₯Ό new μ—°μ‚°μž 없이 ν•¨μˆ˜λ‘œμ¨ ν˜ΈμΆœν•  λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€. μΈμŠ€ν„΄μŠ€κ°€ μ§μ ‘μ μœΌλ‘œ μ ‘κ·Όν•  수 μ—†μŠ΅λ‹ˆλ‹€. prototype method μƒμ„±μž ν•¨μˆ˜ ν”„λ‘œν† νƒ€μž… 내뢀에 ν• λ‹Ήλœ λ©”μ†Œλ“œλ“€μ„ prototype method라고 ν•©λ‹ˆλ‹€. μΈμŠ€ν„΄μŠ€κ°€ μ§μ ‘μ μœΌλ‘œ μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€. 상속 상속을 μ‚¬μš©ν•˜μ—¬ μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±μ„ 높일 수 μžˆμŠ΅λ‹ˆλ‹€. ES5 μƒμ„±μž ν•¨μˆ˜μ™€ ν”„λ‘œν† νƒ€μž…, ν΄λ‘œμ €λ₯Ό μ‚¬μš©ν•˜μ—¬ 객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°μ„ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. ..
객체 μ§€ν–₯ Prototype 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ° OOP(Object Oriented Programming) μ΄λž€? μ„œλ‘œ κ΄€λ ¨ μžˆλŠ” 데이터와 ν•¨μˆ˜λ₯Ό 객체(ν•˜λ‚˜μ˜ 역할을 μˆ˜ν–‰ν•˜λŠ” λ©”μ†Œλ“œμ™€ λ³€μˆ˜μ˜ 묢음)둜 μ •μ˜ν•΄μ„œ μ„œλ‘œ μƒν˜Έμž‘μš©ν•  수 μžˆλ„λ‘ ν”„λ‘œκ·Έλž˜λ°ν•΄λ‚˜κ°€λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€. 각 κ°μ²΄λŠ” λ©”μ‹œμ§€λ₯Ό 받을 수 있고, 데이터λ₯Ό μ²˜λ¦¬ν•  μˆ˜λ„ 있으며, 또 λ‹€λ₯Έ κ°μ²΄μ—κ²Œ λ©”μ‹œμ§€λ₯Ό 전달할 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” prototype을 기반으둜 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ„ ν•΄λ‚˜κ°ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. 객체지ν–₯을 μ‚¬μš©ν•˜λ©΄ μ€‘λ³΅λ˜λŠ” κ΄€λ ¨ 객체λ₯Ό μž¬μ‚¬μš©ν•  수 μžˆμ–΄ 쀑볡을 μ–΄λŠ 정도 쀄일 수 있고, κ΄€λ ¨ μžˆλŠ” κ°μ²΄λ“€μ˜ μ—­ν•  뢄담을 μ’€ 더 ν™•μ‹€ν•˜κ²Œ ν•  수 μžˆμ–΄ 가독성이 λ†’μ•„μ§€κ³  생산성과 μœ μ§€λ³΄μˆ˜ 및 ν™•μž₯성이 λ†’μ•„μ§‘λ‹ˆλ‹€. μƒμ„±μž ν•¨μˆ˜μ™€ μΈμŠ€ν„΄μŠ€ 생성 μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” new μ—°..
Javascript This μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ thisλŠ” μ‹€ν–‰ μ»¨ν…μŠ€νŠΈκ°€ 생성될 λ•Œ λ°”μΈλ”©λ©λ‹ˆλ‹€. 즉, ν•¨μˆ˜κ°€ 호좜될 λ•Œ thisκ°€ κ²°μ •λœλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. μ•„λž˜ μ†ŒμŠ€λ₯Ό 보면 μ–΄λ–»κ²Œ ν˜ΈμΆœν–ˆλŠλƒμ— 따라 thisκ°€ λ‹¬λΌμ§‘λ‹ˆλ‹€. var student = { name: "jennie", myName: function () { console.log(this.name); }, }; var myName = student.myName; myName(); // undefined student.myName(); // jennie κ²°κ³Όκ°€ λ‹€λ₯Έ μ΄μœ λŠ” myName()은 ν•¨μˆ˜λ‘œ ν˜ΈμΆœμ„ ν–ˆκ³  student.myName()λŠ” λ©”μ†Œλ“œλ‘œ ν˜ΈμΆœν–ˆκΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. ν•¨μˆ˜ 호좜 μ‹œ λͺ¨λ“  κ°μ²΄λŠ” μ „μ—­ 객체의 ν”„λ‘œνΌν‹°μž…λ‹ˆλ‹€ μ „μ—­ μ»¨ν…μŠ€νŠΈλ₯Ό μ‹€ν–‰ν•˜λŠ” μ£Όμ²΄λŠ” μ „μ—­ κ°μ²΄μž…λ‹ˆλ‹€. λͺ¨λ“  ..
μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλž€? μžλ°”μŠ€ν¬λ¦½νŠΈκ°€ μ‹€ν–‰λ˜λŠ” ν™˜κ²½μœΌλ‘œ ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•  λ•Œ ν•„μš”ν•œ 쑰건, ν™˜κ²½μ •λ³΄λ₯Ό μ œκ³΅ν•˜λŠ” κ°μ²΄μž…λ‹ˆλ‹€. μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλ₯Ό μ΄ν•΄ν•˜λ©΄ Scope, hoisting, closure, this와 같은 μ€‘μš”ν•œ λ™μž‘μ„ 이해할 수 μžˆμŠ΅λ‹ˆλ‹€. μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ˜ λ‚΄λΆ€ var a = 1; function outer() { console.log(a); // μ‹€ν–‰ μˆœμ„œ(1): 1좜λ ₯ function inner() { // var a; --> undefined (ν˜Έμ΄μŠ€νŒ…) console.log(a); // μ‹€ν–‰ μˆœμ„œ(2): 1좜λ ₯ var a = 3; } inner(); console.log(a); // μ‹€ν–‰ μˆœμ„œ(3): 1좜λ ₯ } outer(); console.log(a); // μ‹€ν–‰ μˆœμ„œ(4): 1좜λ ₯μ•„λž˜λŠ” μœ„ μ½”λ“œλ₯Ό..
데이터 νƒ€μž…(μ›μ‹œν˜• vs μ°Έμ‘°ν˜•) μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ 데이터 νƒ€μž…μ—λŠ” μ•„λž˜μ™€ 같이 μ›μ‹œν˜•κ³Ό μ°Έμ‘°ν˜•μœΌλ‘œ λ‚˜λ‰©λ‹ˆλ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈ λ©”λͺ¨λ¦¬ κ΅¬μ‘°λŠ” μŠ€νƒ λ©”λͺ¨λ¦¬(정적 ν• λ‹Ή, λ³€μˆ˜, μ›μ‹œν˜• 데이터 μ €μž₯)와 νž™ λ©”λͺ¨λ¦¬(동적 ν• λ‹Ή, μ°Έμ‘°ν˜• 데이터, μ €μž₯) μ˜μ—­μœΌλ‘œ λ‚˜λ‰˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. μ›μ‹œν˜•(Primitive Type) 객체λ₯Ό μ œμ™Έν•œ λͺ¨λ“  νƒ€μž…μ€ μ›μ‹œ κ°’(λΆˆλ³€ κ°’)으둜 값을 κ·ΈλŒ€λ‘œ ν• λ‹Ήν•©λ‹ˆλ‹€. boolen null undefined number string symbol (ES6) μ•„λž˜μ™€ 같이 newName에 name을 ν• λ‹Ήν•˜κ³  λ‹€μ‹œ "jennie"둜 값을 μž¬ν• λ‹Ή ν•œ ν›„ nameκ³Ό newName을 확인해 보면 λ°μ΄ν„°μ˜ λΆˆλ³€μ„±(newName의 값을 μž¬ν• λ‹Ή 해도 name의 값이 λ³€ν•˜μ§€ μ•ŠμŒ)을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. let name = "sara"; let newN..