Notice
Recent Posts
Recent Comments
Link
관리 메뉴

λͺ©λ‘λ”₯λ‹€μ΄λΈŒ (16)

JDevBlog

18. ν•¨μˆ˜μ™€ 일급 객체

18.1 일급 객체 λ‹€μŒκ³Ό 같은 쑰건을 λ§Œμ‘±ν•˜λŠ” 객체λ₯Ό 일급 객체라 ν•œλ‹€. 무λͺ…μ˜ λ¦¬ν„°λŸ΄λ‘œ 생성할 수 μžˆλ‹€. 즉, λŸ°νƒ€μž„μ— 생성이 κ°€λŠ₯ν•˜λ‹€. λ³€μˆ˜λ‚˜ 자료ꡬ쑰(객체, λ°°μ—΄ λ“±)에 μ €μž₯ν•  수 μžˆλ‹€. ν•¨μˆ˜μ˜ λ§€κ°œλ³€μˆ˜μ— 전달할 수 μžˆλ‹€. ν•¨μˆ˜μ˜ λ°˜ν™˜κ°’μœΌλ‘œ μ‚¬μš©ν•  수 μžˆλ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ ν•¨μˆ˜λŠ” λ‹€μŒ μ˜ˆμ œμ™€ 같이 μœ„μ˜ 쑰건을 λͺ¨λ‘ λ§Œμ‘±ν•˜λ―€λ‘œ 일급 객체닀. ν•¨μˆ˜κ°€ 일급 κ°μ²΄λΌλŠ” 것은 ν•¨μˆ˜λ₯Ό 객체와 λ™μΌν•˜κ²Œ μ‚¬μš©ν•  수 μžˆλ‹€λŠ” μ˜λ―Έλ‹€. κ°μ²΄λŠ” κ°’μ΄λ―€λ‘œ ν•¨μˆ˜λŠ” κ°’κ³Ό λ™μΌν•˜κ²Œ μ·¨κΈ‰ν•  수 μžˆλ‹€. λ”°λΌμ„œ ν•¨μˆ˜λŠ” 값을 μ‚¬μš©ν•  수 μžˆλŠ” κ³³(λ³€μˆ˜ ν• λ‹Ήλ¬Έ, 객체의 ν”„λ‘œνΌν‹° κ°’, λ°°μ—΄μ˜ μš”μ†Œ, ν•¨μˆ˜ 호좜의 인수, ν•¨μˆ˜ λ°˜ν™˜λ¬Έ)이라면 μ–΄λ””μ„œλ“ μ§€ λ¦¬ν„°λŸ΄λ‘œ μ •μ˜ν•  수 있으며 λŸ°νƒ€μž„(runtime)에 ν•¨μˆ˜ 객체둜 ν‰κ°€λœλ‹€. 18.2 ν•¨μˆ˜ 객..

17. μƒμ„±μž ν•¨μˆ˜μ— μ˜ν•œ 객체 생성

17.1 Object μƒμ„±μž ν•¨μˆ˜ new μ—°μ‚°μžμ™€ ν•¨κ»˜ Object μƒμ„±μž ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λ©΄ 빈 객체λ₯Ό μƒμ„±ν•˜μ—¬ λ°˜ν™˜ν•œλ‹€. 빈 객체λ₯Ό μƒμ„±ν•œ 이후 ν”„λ‘œνΌν‹° λ˜λŠ” λ©”μ„œλ“œλ₯Ό μΆ”κ°€ν•˜μ—¬ 객체λ₯Ό μ™„μ„±ν•  수 μžˆλ‹€. μƒμ„±μž ν•¨μˆ˜(constructor)λž€ new μ—°μ‚°μžμ™€ ν•¨κ»˜ ν˜ΈμΆœν•˜μ—¬ 객체(μΈμŠ€ν„΄μŠ€)λ₯Ό μƒμ„±ν•˜λŠ” ν•¨μˆ˜λ₯Ό λ§ν•œλ‹€. μƒμ„±μž ν•¨μˆ˜μ— μ˜ν•΄ μƒμ„±λœ 객체λ₯Ό μΈμŠ€ν„΄μŠ€(instance)라 ν•œλ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” Object μƒμ„±μž ν•¨μˆ˜ 이외에도, String, Number, Boolean, Function, Array, Date, RegExp, Promise λ“±μ˜ 빌트인(built-in) μƒμ„±μž ν•¨μˆ˜λ₯Ό μ œκ³΅ν•œλ‹€. λ°˜λ“œμ‹œ Object μƒμ„±μž ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄ 빈 객체λ₯Ό 생성해야 ν•˜λŠ” 것은 μ•„λ‹ˆλ‹€. 객체λ₯Ό μƒμ„±ν•˜λŠ” 방법은 객체 ..

16. ν”„λ‘œνΌν‹° μ–΄νŠΈλ¦¬λ·°νŠΈ

16.1 λ‚΄λΆ€ 슬둯과 λ‚΄λΆ€ λ©”μ„œλ“œ λ‚΄λΆ€ 슬둯과 λ‚΄λΆ€ λ©”μ„œλ“œλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ μ—”μ§„μ˜ κ΅¬ν˜„ μ•Œκ³ λ¦¬μ¦˜μ„ μ„€λͺ…ν•˜κΈ° μœ„ν•΄ ECMAScript μ‚¬μ–‘μ—μ„œ μ‚¬μš©ν•˜λŠ” μ˜μ‚¬ ν”„λ‘œνΌν‹°(pseudo property) 와 μ˜μ‚¬ λ©”μ„œλ“œ(pseudo method) λ‹€. ECMAScript 사양에 λ“±μž₯ν•˜λŠ” 이쀑 λŒ€κ΄„ν˜Έλ‘œ 감싼 이름듀이 λ‚΄λΆ€ 슬둯과 λ‚΄λΆ€ λ©”μ„œλ“œλ‹€. λ‚΄λΆ€ 슬둯과 λ‚΄λΆ€ λ©”μ„œλ“œλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ μ—”μ§„μ˜ λ‚΄λΆ€ λ‘œμ§μ΄λ―€λ‘œ μ›μΉ™μ μœΌλ‘œ μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” λ‚΄λΆ€ 슬둯과 λ‚΄λΆ€ λ©”μ„œλ“œμ— μ§μ ‘μ μœΌλ‘œ μ ‘κ·Όν•˜κ±°λ‚˜ ν˜ΈμΆœν•  수 μžˆλŠ” 방법을 μ œκ³΅ν•˜μ§€ μ•ŠλŠ”λ‹€. 단, 일뢀 λ‚΄λΆ€ 슬둯과 λ‚΄λΆ€ λ©”μ„œλ“œμ— ν•œν•˜μ—¬ κ°„μ ‘μ μœΌλ‘œ μ ‘κ·Όν•  수 μžˆλŠ” μˆ˜λ‹¨μ„ μ œκ³΅ν•œλ‹€. λͺ¨λ“  κ°μ²΄λŠ” [[Prototype]] μ΄λΌλŠ” λ‚΄λΆ€ μŠ¬λ‘―μ„ κ°–λŠ”λ‹€. 이 λ‚΄λΆ€ μŠ¬λ‘―μ€ μžλ°”μŠ€ν¬λ¦½νŠΈ μ—”μ§„μ˜ λ‚΄λΆ€ 둜직..

15. let, const ν‚€μ›Œλ“œμ™€ 블둝 레벨 μŠ€μ½”ν”„

15.1 var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜μ˜ 문제점 15.1.2 ν•¨μˆ˜ 레벨 μŠ€μ½”ν”„ var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” μ˜€λ‘œμ§€ ν•¨μˆ˜μ˜ μ½”λ“œ λΈ”λ‘λ§Œμ„ 지역 μŠ€μ½”ν”„λ‘œ μΈμ •ν•œλ‹€. λ”°λΌμ„œ ν•¨μˆ˜ μ™ΈλΆ€μ—μ„œ var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” μ½”λ“œ 블둝 λ‚΄μ—μ„œ 선언해도 λͺ¨λ‘ μ „μ—­ λ³€μˆ˜κ°€ λœλ‹€. 15.2 let ν‚€μ›Œλ“œ 15.2.2 블둝 레벨 μŠ€μ½”ν”„ let ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” λͺ¨λ“  μ½”λ“œ 블둝(ν•¨μˆ˜ ,ifλ¬Έ, forλ¬Έ, whileλ¬Έ, try/catchλ¬Έ λ“±) 을 지역 μŠ€μ½”ν”„λ‘œ μΈμ •ν•˜λŠ” 블둝 레벨 μŠ€μ½”ν”„(block-level scope) λ₯Ό λ”°λ₯Έλ‹€. ν•¨μˆ˜λ„ μ½”λ“œ λΈ”λ‘μ΄λ―€λ‘œ μ•„λž˜μ™€ 같이 μŠ€μ½”ν”„λ₯Ό λ§Œλ“ λ‹€. μ΄λ•Œ ν•¨μˆ˜ λ‚΄μ˜ μ½”λ“œ 블둝은 ν•¨μˆ˜ 레벨 μŠ€μ½”ν”„μ— μ€‘μ²©λœλ‹€. 15.2.4 λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ… var var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” λŸ°νƒ€μž„ 이전에..

14. μ „μ—­ λ³€μˆ˜μ˜ 문제점

14.1 λ³€μˆ˜μ˜ 생λͺ… μ£ΌκΈ° 14.1.1 지역 λ³€μˆ˜μ˜ 생λͺ… μ£ΌκΈ° λ³€μˆ˜λŠ” 선언에 μ˜ν•΄ μƒμ„±λ˜κ³  할당을 톡해 값을 κ°–λŠ”λ‹€. 그리고 μ–Έμ  κ°€ μ†Œλ©Έν•œλ‹€. 즉, λ³€μˆ˜λŠ” 생물과 μœ μ‚¬ν•˜κ²Œ μƒμ„±λ˜κ³  μ†Œλ©Έλ˜λŠ” 생λͺ… μ£ΌκΈ°(Life cycle) κ°€ μžˆλ‹€. λ³€μˆ˜λŠ” μžμ‹ μ΄ μ„ μ–Έλœ μœ„μΉ˜μ—μ„œ μƒμ„±λ˜κ³  μ†Œλ©Έν•œλ‹€. μ „μ—­ λ³€μˆ˜μ˜ 생λͺ… μ£ΌκΈ°λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 생λͺ… 주기와 κ°™λ‹€. ν•˜μ§€λ§Œ ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ μ„ μ–Έλœ 지역 λ³€μˆ˜λŠ” ν•¨μˆ˜κ°€ 호좜되면 μƒμ„±λ˜κ³  ν•¨μˆ˜κ°€ μ’…λ£Œν•˜λ©΄ μ†Œλ©Έν•œλ‹€. μ „μ—­ λ³€μˆ˜μ˜ 경우, λ³€μˆ˜ 선언은 μ½”λ“œκ°€ ν•œ 쀄씩 순차적으둜 μ‹€ν–‰λ˜λŠ” μ‹œμ μΈ λŸ°νƒ€μž„μ— μ‹€ν–‰λ˜λŠ” 것이 μ•„λ‹ˆλΌ λŸ°νƒ€μž„ 이전 λ‹¨κ³„μ—μ„œ μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진에 μ˜ν•΄ λ¨Όμ € μ‹€ν–‰λœλ‹€. 지역 λ³€μˆ˜μ˜ 경우, ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” ν•¨μˆ˜κ°€ 호좜된 직후에 ν•¨μˆ˜ λͺΈμ²΄μ˜ μ½”λ“œκ°€ ν•œ 쀄씩 순차적으둜 ..

13. μŠ€μ½”ν”„

13.1 μŠ€μ½”ν”„λž€? μŠ€μ½”ν”„(scope, μœ νš¨λ²”μœ„) λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό ν¬ν•¨ν•œ λͺ¨λ“  ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ˜ 기본적이며 μ€‘μš”ν•œ κ°œλ…μ΄λ‹€. λ³€μˆ˜λŠ” μžμ‹ μ΄ μ„ μ–Έλœ μœ„μΉ˜μ— μ˜ν•΄ μžμ‹ μ΄ μœ νš¨ν•œ λ²”μœ„, 즉 λ‹€λ₯Έ μ½”λ“œκ°€ λ³€μˆ˜ μžμ‹ μ„ μ°Έμ‘°ν•  수 μžˆλŠ” λ²”μœ„κ°€ κ²°μ •λœλ‹€. λ³€μˆ˜λΏλ§Œ μ•„λ‹ˆλΌ λͺ¨λ“  μ‹λ³„μžκ°€ κ·Έλ ‡λ‹€. λͺ¨λ“  μ‹λ³„μž(λ³€μˆ˜ 이름, ν•¨μˆ˜ 이름, 클래슀 이름 λ“±) λŠ” μžμ‹ μ΄ μ„ μ–Έλœ μœ„μΉ˜μ— μ˜ν•΄ λ‹€λ₯Έ μ½”λ“œκ°€ μ‹λ³„μž μžμ‹ μ„ μ°Έμ‘°ν•  수 μžˆλŠ” 유효 λ²”μœ„κ°€ κ²°μ •λœλ‹€. 이λ₯Ό μŠ€μ½”ν”„λΌ ν•œλ‹€. 즉, μŠ€μ½”ν”„λŠ” μ‹λ³„μžκ°€ μœ νš¨ν•œ λ²”μœ„λ₯Ό λ§ν•œλ‹€. μŠ€μ½”ν”„λž€ μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진이 μ‹λ³„μžλ₯Ό 검색할 λ•Œ μ‚¬μš©ν•˜λŠ” κ·œμΉ™ 이라고도 ν•  수 μžˆλ‹€. μ‹λ³„μžλŠ” μ–΄λ–€ 값을 ꡬ별할 수 μžˆμ–΄μ•Ό ν•˜λ―€λ‘œ μœ μΌν•΄μ•Ό ν•œλ‹€. λ”°λΌμ„œ μ‹λ³„μžμΈ λ³€μˆ˜ 이름은 쀑볡될 수 μ—†λ‹€. 즉, ν•˜λ‚˜μ˜ κ°’..

12. ν•¨μˆ˜

12.1 ν•¨μˆ˜λž€? ν•¨μˆ˜λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ κ°€μž₯ μ€‘μš”ν•œ 핡심 κ°œλ…μ΄λ‹€. 또 λ‹€λ₯Έ μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 핡심 κ°œλ…λ“€μΈ μŠ€μ½”ν”„, μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ, ν΄λ‘œμ €, μƒμ„±μž ν•¨μˆ˜μ— μ˜ν•œ 객체 생성, λ©”μ„œλ“œ, this, ν”„λ‘œν† νƒ€μž…, λͺ¨λ“ˆν™” 등이 λͺ¨λ‘ ν•¨μˆ˜μ™€ κΉŠμ€ 관련이 μžˆλ‹€. ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ˜ ν•¨μˆ˜λŠ” 일련의 과정을 λ¬Έ(statement) 으둜 κ΅¬ν˜„ν•˜κ³  μ½”λ“œ λΈ”λ‘μœΌλ‘œ κ°μ‹Έμ„œ ν•˜λ‚˜μ˜ μ‹€ν–‰ λ‹¨μœ„λ‘œ μ •μ˜ν•œ 것 이닀. ν•¨μˆ˜ λ‚΄λΆ€λ‘œ μž…λ ₯을 μ „λ‹¬λ°›λŠ” λ³€μˆ˜λ₯Ό λ§€κ°œλ³€μˆ˜(parameter), μž…λ ₯을 인수(argument), 좜λ ₯을 λ°˜ν™˜κ°’(return value) 이라 ν•œλ‹€. λ˜ν•œ ν•¨μˆ˜λŠ” 값이며, μ—¬λŸ¬ 개 μ‘΄μž¬ν•  수 μžˆμœΌλ―€λ‘œ νŠΉμ • ν•¨μˆ˜λ₯Ό κ΅¬λ³„ν•˜κΈ° μœ„ν•΄ μ‹λ³„μžμΈ ν•¨μˆ˜ 이름을 μ‚¬μš©ν•  수 μžˆλ‹€. 12.2 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” 이유 ν•¨μˆ˜λŠ” ν•„μš”ν•  λ•Œ μ—¬λŸ¬ 번 호..