Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Latest commit

Β 

History

History
154 lines (106 loc) Β· 7.41 KB

File metadata and controls

154 lines (106 loc) Β· 7.41 KB

πŸ’» JavaScript & 일급 객체 & 컴파일/인터프리터 μ–Έμ–΄


πŸ‘¨πŸ»β€πŸ’» μžλ°”μŠ€ν¬λ¦½νŠΈλž€?

  • μžλ°”μŠ€ν¬λ¦½νŠΈ(JavaScript)λŠ” 객체(Object) 기반의 슀크립트 언어이닀.
  • HTMLλ‘œλŠ” μ›Ήμ˜ λ‚΄μš©μ„ μž‘μ„±ν•˜κ³ , CSSλ‘œλŠ” 웹을 λ””μžμΈν•˜λ©°, μžλ°”μŠ€ν¬λ¦½νŠΈλ‘œλŠ” μ›Ήμ˜ λ™μž‘μ„ κ΅¬ν˜„ν•  수 μžˆλ‹€.
  • μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 주둜 μ›Ή λΈŒλΌμš°μ €μ—μ„œ μ‚¬μš©λ˜κ±°λ‚˜, Node.js와 같은 ν”„λ ˆμž„μ›Œν¬λ₯Ό μ‚¬μš©ν•˜λ©΄ μ„œλ²„ μΈ‘ ν”„λ‘œκ·Έλž˜λ°μ–Έμ–΄μ—μ„œλ„ μ‚¬μš©ν•  수 μžˆλ‹€.
  • ν˜„μž¬ μ»΄ν“¨ν„°λ‚˜ 슀마트폰 등에 ν¬ν•¨λœ λŒ€λΆ€λΆ„μ˜ μ›Ή λΈŒλΌμš°μ €μ—λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ 인터프리터가 λ‚΄μž₯λ˜μ–΄ μžˆλ‹€.

πŸ‘¨πŸ»β€πŸ’» μžλ°”μŠ€ν¬λ¦½νŠΈ νŠΉμ§•

  • μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 객체 기반의 슀크립트 언어이닀.
  • μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 동적 νƒ€μž… 언어이며, νƒ€μž…μ„ λͺ…μ‹œν•  ν•„μš”κ°€ μ—†λŠ” 인터프리터 언어이닀. λ”°λΌμ„œ ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•˜λŠ” 도쀑에 λ³€μˆ˜μ— μ €μž₯λ˜λŠ” 데이터 νƒ€μž…μ΄ λ™μ μœΌλ‘œ λ°”λ€” 수 μžˆλ‹€.
  • μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 객체 μ§€ν–₯ν˜• ν”„λ‘œκ·Έλž˜λ°κ³Ό ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ„ λͺ¨λ‘ ν‘œν˜„ν•  수 μžˆλ‹€.
  • 일반적인 객체 μ§€ν–₯ 언어듀은 클래슀λ₯Ό 톡해 객체 μ§€ν–₯ μ–Έμ–΄μ—μ„œ λ‚˜νƒ€λ‚˜λŠ” 상속 λ“±μ˜ νŠΉμ§•μ„ κ΅¬ν˜„ν•œλ‹€.
  • μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” ν”„λ‘œν† νƒ€μž…(prototype)μ΄λΌλŠ” κ°œλ…μ„ 톡해 객체 μ§€ν–₯ μ–Έμ–΄λ“€μ˜ νŠΉμ§•μ„ κ΅¬ν˜„ν•œλ‹€. λ”°λΌμ„œ μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 클래슀 기반이 μ•„λ‹Œ ν”„λ‘œν† νƒ€μž… 기반의 객체 μ§€ν–₯ 언어인 것이닀.
  • μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œμ˜ ν•¨μˆ˜λŠ” 객체이며, ν•¨μˆ˜κ°€ 일급 객체이닀.
  • ν•¨μˆ˜κ°€ ν΄λ‘œμ €λ₯Ό μ •μ˜ν•œλ‹€.

πŸ‘¨πŸ»β€πŸ’» 일급 κ°μ²΄λž€?

  • 일급 κ°μ²΄λž€, 컴퓨터 ν”„λ‘œκ·Έλž˜λ°μ—μ„œ 일반적으둜 λ‹€λ₯Έ 객체듀에 적용 κ°€λŠ₯ν•œ 연산을 λͺ¨λ‘ μ§€μ›ν•˜λŠ” 객체
  • μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ ν•¨μˆ˜κ°€ 이 일급 객체이닀.

πŸƒ 일급 객체의 쑰건

  • λ³€μˆ˜(Variable)에 담을 수 μžˆλ‹€.
let bar = function () {
  return "Javascript";
};

  • νŒŒλΌλ―Έν„°λ‘œ 전달할 수 μžˆλ‹€.
let number = [1, 2, 3];

number.forEach(function (x) {
  console.log(x * 2);
});

  • λ°˜ν™˜ κ°’μœΌλ‘œ μ‚¬μš©ν•  수 μžˆλ‹€.
function test() {
  return function () {
    console.log("Javascript");
  };
}

let bar = test();

bar();

πŸ‘¨πŸ»β€πŸ’» 동적 νƒ€μž… μ–Έμ–΄?

  • μžλ°”μŠ€ν¬λ¦½νŠΈμ™€ 같은 동적 νƒ€μž… μ–Έμ–΄λŠ” μ–΄λ–€ 데이터 νƒ€μž…μ˜ 값이라도 자유둭게 ν• λ‹Ήν•  수 μžˆλ‹€. 이λ₯Ό 톡해, 데이터 νƒ€μž…μ„ μ‹ κ²½μ“°μ§€ μ•Šκ³  μ‚¬μš©ν•  수 μžˆλ‹€λŠ” νŽΈλ¦¬ν•¨μ΄ μžˆμ§€λ§Œ, μ΄λŸ¬ν•œ νŽΈλ¦¬ν•¨ 속에 μœ„ν—˜λ„ 도사리고 μžˆλ‹€.
  • μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ λ³€μˆ˜ 값은 μ–Έμ œλ“ μ§€ 변경될 수 있기 λ•Œλ¬Έμ— λ³΅μž‘ν•œ ν”„λ‘œκ·Έλž¨μ—μ„œλŠ” λ³€ν™”ν•˜λŠ” λ³€μˆ˜ 값을 μΆ”μ ν•˜κΈ°κ°€ 맀우 μ–΄λ €μ›Œ 질 수 μžˆλ‹€.
  • 뿐만 μ•„λ‹ˆλΌ, λ³€μˆ˜μ˜ νƒ€μž…μ΄ κ³ μ •λ˜μ–΄ μžˆμ§€ μ•Šκ³  λ™μ μœΌλ‘œ λ³€ν•˜λŠ” 동적 νƒ€μž… μ–Έμ–΄μ˜ λ³€μˆ˜λŠ” κ°’μ˜ 변경에 μ˜ν•΄ νƒ€μž…λ„ μ–Έμ œλ“ μ§€ λ³€κ²½ 될 수 μžˆλ‹€.
    • 즉, 동적 νƒ€μž… μ–Έμ–΄λŠ” μœ μ—°μ„±(flexibility)λŠ” λ†’μ§€λ§Œ μ‹ λ’°μ„±(reliability)λŠ” λ–¨μ–΄μ§„λ‹€.
  • μ΄λŸ¬ν•œ 단점을 κ°œμ„ ν•˜κΈ° μœ„ν•΄ constλ₯Ό ν†΅ν•œ μƒμˆ˜ μ‚¬μš©, λ³€μˆ˜μ˜ 유효 λ²”μœ„(μŠ€μ½”ν”„)λ₯Ό μ΅œλŒ€ν•œ 쒁게 λ§Œλ“€κΈ°, μ „μ—­ λ³€μˆ˜ μ‚¬μš© 쀄이기, νƒ€μž… 슀크립트 μ‚¬μš© 등이 μžˆλ‹€.

πŸ‘¨πŸ»β€πŸ’» μžλ°” vs μžλ°”μŠ€ν¬λ¦½νŠΈ

πŸƒ Java(μžλ°”)

  • 컴파일 μ–Έμ–΄
  • νƒ€μž… 검사λ₯Ό μ—„κ²©ν•˜κ²Œ 함
  • 클래슀(Class)기반의 객체 μ§€ν–₯ μ–Έμ–΄

πŸƒ JavaScript(μžλ°”μŠ€ν¬λ¦½νŠΈ)

  • 인터프리터 μ–Έμ–΄
  • νƒ€μž…μ„ λͺ…μ‹œν•˜μ§€ μ•ŠμŒ
  • ν”„λ‘œν† νƒ€μž…(prototype)기반의 객체 μ§€ν–₯ μ–Έμ–΄

πŸ‘¨πŸ»β€πŸ’» 컴파일 언어와 인터프리터 μ–Έμ–΄

πŸƒ 컴파일 μ–Έμ–΄

  • 컴파일: κ³ κΈ‰ μ–Έμ–΄(인간이 κ΅¬λΆ„ν•˜κΈ° μ‰¬μš΄ μ–Έμ–΄)둜 μž‘μ„±λœ ν”„λ‘œκ·Έλž¨μ„ 기계어(컴퓨터 λ“±μ˜ 기계가 이해할 수 μžˆλŠ” μ–Έμ–΄)둜 λ²ˆμ—­ν•˜κ³  기계어 ν”„λ‘œκ·Έλž¨μœΌλ‘œ κ³ μΉ˜λŠ” 과정이닀.
  • 컴파일러: μ»΄νŒŒμΌμ„ μˆ˜ν–‰ν•˜λŠ” μ†Œν”„νŠΈμ›¨μ–΄
  • 컴파일 μ–Έμ–΄: μ†ŒμŠ€ μ½”λ“œ μ—¬λŸ¬ 개λ₯Ό λ¬Άμ–΄μ„œ 컴파일 ν•œ 후에 μ‹€ν–‰λ˜λŠ” ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄(ex. C, Java λ“±)
  • νŠΉμ§•
    • 컴파일 ν•˜λŠ”λ° μ‹œκ°„μ΄ κ±Έλ¦¬μ§€λ§Œ μ‹€ν–‰λ˜λŠ” 속도가 λΉ λ₯΄λ‹€.
    • μ»΄νŒŒμΌμ„ ν•˜κ²Œ 되면 μ‹€ν–‰ κ°€λŠ₯ν•œ 파일(λͺ©μ  ν”„λ‘œκ·Έλž¨)이 μƒμ„±λœλ‹€.

πŸƒ 인터프리터 μ–Έμ–΄

  • 인터프리터: κ³ κΈ‰ μ–Έμ–΄λ‘œ μž‘μ„±λœ ν”„λ‘œκ·Έλž¨μ„ ν•œμ€„ λ‹¨μœ„λ‘œ λ°›μ•„ λ“€μ—¬ λ²ˆμ—­ν•˜κ³ , λ²ˆμ—­κ³Ό λ™μ‹œμ— ν”„λ‘œκ·Έλž¨μ„ ν•œ 쀄 λ‹¨μœ„λ‘œ μ‹€ν–‰μ‹œν‚€λŠ” ν”„λ‘œκ·Έλž¨μ΄λ‹€.
  • 인터프리터 μ–Έμ–΄: μ†ŒμŠ€ μ½”λ“œλ₯Ό λ°”λ‘œ μ‹€ν–‰ν•˜λŠ” 컴퓨터 ν”„λ‘œκ·Έλž¨ λ˜λŠ” ν™˜κ²½μ„ λ§ν•œλ‹€. 즉, μ†ŒμŠ€ μ½”λ“œλ₯Ό ν•œμ€„ ν•œμ€„μ”© μ½μ–΄κ°€λ©΄μ„œ μ‹€ν–‰ν•˜λŠ” ν”„λ‘œκ·Έλž˜λ° 언어이닀.
  • νŠΉμ§•: ν”„λ‘œκ·Έλž¨μ„ λ°”λ‘œ μ‹€ν–‰ν•  수 있고 λ™μž‘μ„ 확인해 κ°€λ©΄μ„œ ν”„λ‘œκ·Έλž¨μ„ κ°œλ°œν•  수 μžˆλ‹€. ν•˜μ§€λ§Œ, ν”„λ‘œκ·Έλž¨ μ½”λ“œλ₯Ό ν•œ 쀄 ν•œ 쀄 λ²ˆμ—­ν•˜λ©΄μ„œ μ‹€ν–‰ν•˜κΈ° λ•Œλ¬Έμ— 컴파일 언어보닀 처리 속도가 λŠλ¦¬λ‹€λŠ” 단점이 μžˆλ‹€.

πŸƒ 컴파일 vs 인터프리터 차이점

  • μ‹€ν–‰ λ‹¨κ³„μ˜ 차이
    • 컴파일 μ–Έμ–΄λŠ” 컴파일러 단계가 ν•„μš”ν•˜κ³ , 인터프리터 μ–Έμ–΄λŠ” λ³„λ„μ˜ 컴파일러 과정이 ν•„μš”ν•˜μ§€ μ•Šλ‹€.
  • 생산 속도 차이
    • 컴파일 μ–Έμ–΄μ˜ 경우 컴파일러 과정이 λ“€μ–΄κ°€κΈ° λ•Œλ¬Έμ— 인터프리터 언어보닀 생산 속도가 λŠλ¦¬λ‹€. 인터프리터 μ–Έμ–΄λŠ” 과정이 λ‹¨μˆœν•˜κΈ° λ•Œλ¬Έμ— 생산 속도가 λΉ λ₯΄λ‹€.
  • μ†ŒμŠ€ μ½”λ“œ μž‘μ„± μ œμ•½μ‚¬ν•­
    • 컴파일 μ–Έμ–΄λŠ” μ†ŒμŠ€ μ½”λ“œ μž‘μ„±μ„ μœ„ν•œ μ œμ•½μ‚¬ν•­μ΄ 인터프리터 언어보닀 더 λ§Žλ‹€. λ”°λΌμ„œ, 컴파일 μ–Έμ–΄μ—λŠ” μ‚¬μš©ν•΄μ•Ό ν•˜λŠ” λ³€μˆ˜μ˜ μžλ£Œν˜•μ— λŒ€ν•΄μ„œ λͺ…ν™•ν•˜κ²Œ μ•Œμ•„μ•Όν•˜λ©°, 각쒅 문법에 λ”°λ₯Έ μ œμ•½μ‚¬ν•­ 듀도 μ•Œμ•„μ•Ό ν•œλ‹€.
  • 디버깅
    • 인터프리터 μ–Έμ–΄λŠ” κ°„νŽΈν•œ 만큼 μžƒλŠ” 것도 μžˆλ‹€. μ†ŒμŠ€ μ½”λ“œκ°€ μ‹€ν–‰λ˜κΈ° μ „κΉŒμ§€ μ†ŒμŠ€ μ½”λ“œμ˜ 버그λ₯Ό μΈμ§€ν•˜λŠ” 것이 μ–΄λ ΅λ‹€. λ¬Όλ‘ , 인지할 순 μžˆμ§€λ§Œ 컴파일 언어에 λΉ„ν•΄ 였λ₯˜ 인지 μ‹œμ μ΄ λŠ¦λ‹€. λ˜ν•œ, 컴파일 μ–Έμ–΄κ°€ 디버깅 μž‘μ—…μ΄ 훨씬 μˆ˜μ›”ν•˜λ‹€.
  • μ‹€ν–‰ 속도
    • 생산 μ†λ„λŠ” 인터프리터 μ–Έμ–΄κ°€ μ’‹μ§€λ§Œ, μ‹€ν–‰ μ†λ„λŠ” 컴파일 μ–Έμ–΄κ°€ 훨씬 λΉ λ₯΄λ‹€.
    • 컴파일 ν•œ 뒀에 μƒμ„±λœ νŒŒμΌμ— μ˜ν•΄ ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰λ˜κΈ° λ•Œλ¬Έμ— λ²ˆμ—­κΈ°μ— λ²ˆμ—­ 되고 μ‹€ν–‰λ˜λŠ” 인터프리터 언어에 λΉ„ν•΄ 훨씬 λΉ λ₯΄λ‹€.

πŸ‘¨πŸ»β€πŸ’» ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ˜ μœ ν˜•

  • 절차적 μ–Έμ–΄: 절차λ₯Ό μˆœμ„œλŒ€λ‘œ μž‘μ„±ν•΄λ‚˜κ°€λŠ” μ–Έμ–΄
  • 객체 μ§€ν–₯ μ–Έμ–΄: μ²˜λ¦¬μ™€ κ΄€λ ¨λœ 데이터와 절차λ₯Ό ν•˜λ‚˜λ‘œ λ¬Άμ–΄ 객체 λ‹¨μœ„λ‘œ κ΄€λ¦¬ν•˜λŠ” μ–Έμ–΄
  • ν•¨μˆ˜ν˜• μ–Έμ–΄: ν”„λ‘œκ·Έλž¨μ„ ν•¨μˆ˜λ‘œ μ‘°ν•©ν•˜μ—¬ κ΅¬ν˜„ν•΄ λ‚˜κ°€λŠ” μ–Έμ–΄
  • λ…Όλ¦¬ν˜• μ–Έμ–΄: 데이터 μ‚¬μ΄μ˜ 관계와 논리λ₯Ό μ„€λͺ…ν•΄ λ‚˜κ°€λŠ” μ–Έμ–΄

μ°Έκ³ 

https://coding-factory.tistory.com/303 https://hoon26.tistory.com/21 https://velog.io/@emily0_0/%EC%BB%B4%ED%8C%8C%EC%9D%BC-%EC%96%B8%EC%96%B4%EC%99%80-%EC%9D%B8%ED%84%B0%ED%94%84%EB%A6%AC%ED%84%B0-%EC%96%B8%EC%96%B4 https://opentutorials.org/module/3989/26105 https://velog.io/@sparkbosing/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EC%96%B8%EC%96%B4%EC%9D%98-%ED%8A%B9%EC%A7%95 https://codedragon.tistory.com/3443