TIL - 21.07.03πŸ‘¨β€πŸ’» - Js

μ„±ν›ˆΒ·2021λ…„ 7μ›” 3일
0

TIL

λͺ©λ‘ 보기
19/59
post-thumbnail

TIL - 21.07.03 πŸ‘¨β€πŸ’»

가비지 μ»¬λ ‰μ…˜

가비지 μ»¬λ ‰μ…˜μ€ μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό λΉ„λ‘―ν•œ μ—¬λŸ¬ ν”„λ‘œκ·Έλž˜λ° 언어듀이 λ©”λͺ¨λ¦¬λ₯Ό κ΄€λ¦¬ν•˜λŠ” 방법을 뜻 ν•œλ‹€.

let user = {
  name: 'sunghoon',
  job: 'dev',
}
// { name: 'sunghoon', job: 'dev' } 인 객체가 
// userλΌλŠ” λ³€μˆ˜μ— ν• λ‹Ήλ˜μ–΄μ„œ userλ₯Ό 톡해 μ ‘κ·Ό κ°€λŠ₯ν•˜κ²Œ 됨.

user = null;
// user에 null이 ν• λ‹Ήλ˜λ©΄μ„œ { name: 'sunghoon', job: 'dev' } λΌλŠ” κ°μ²΄λŠ” 도달 λΆˆκ°€λŠ₯ν•˜κ²Œ λ˜μ—ˆκ³  
//ν•΄λ‹Ή 값은 가비지 μ»¬λ ‰μ…˜μ— μ˜ν•΄ μ‚­μ œλ¨.

κΈ°μ€€

가비지 μ»¬λ ‰μ…˜μ΄ μž‘λ™ν•˜λŠ” 기쀀은 도달 κ°€λŠ₯μ„±(reachability)이며 도달 κ°€λŠ₯ν•œ κ°’μ΄λž€ μ–΄λ–»κ²Œλ“  μ ‘κ·Όκ°€λŠ₯ν•˜κ±°λ‚˜ μ‚¬μš© κ°€λŠ₯ν•œ 값을 뜻 ν•œλ‹€.

μ „μ—­ λ³€μˆ˜μ™€ 같이 μ–΄λ””μ„œλ“ μ§€ 도달가λŠ₯ν•˜κΈ°μ— νŠΉλ³„ν•œ μ΄μœ κ°€ μ—†λ‹€λ©΄ μ‚­μ œ λΆˆκ°€λŠ₯ν•œ 것듀은 νŠΉλ³„ν•œ μ΄μœ κ°€ μ—†μœΌλ©΄ μ‚­μ œλ˜μ§€ μ•ŠλŠ”λ‹€.

μ‚­μ œ μ•Œκ³ λ¦¬μ¦˜

μ—¬λŸ¬ μ•Œκ³ λ¦¬μ¦˜μ΄ μžˆμ§€λ§Œ κ°€μž₯ 기본적인 μ•Œκ³ λ¦¬μ¦˜μ€ mark and sweep 방식이라고 λΆˆλ¦¬λŠ” μ•Œκ³ λ¦¬μ¦˜μ΄λ‹€.
mark and sweep 방식은 μ „μ—­ λ³€μˆ˜μ™€ 같은 λ£¨νŠΈμ •λ³΄μ— ν‘œμ‹(mark)λ₯Ό 남기고, κ·Έ λ‹€μŒμœΌλ‘œ λ£¨νŠΈκ°€ μ°Έμ‘°ν•˜λŠ” κ°μ²΄κΉŒμ§€ λ°©λ¬Έν•΄ μ „λΆ€ ν‘œμ‹μ„ 남긴닀.
λ£¨νŠΈμ—μ„œ 도달할 수 μžˆλŠ” λͺ¨λ“  객체에 λ°©λ¬Έν• λ•ŒκΉŒμ§€ ν•΄λ‹Ή 과정을 λ°˜λ³΅ν•˜λ‹€κ°€ 더 이상 도달 κ°€λŠ₯ν•œ 객체가 μ—†μ„λ•Œ ν‘œμ‹μ΄ μ—†λŠ” 데이터λ₯Ό λͺ¨λ‘ μ‚­μ œν•œλ‹€.

new μ—°μ‚°μžμ™€ μƒμ„±μž ν•¨μˆ˜

new μ—°μ‚°μžμ™€ μƒμ„±μž ν•¨μˆ˜λŠ” μœ μ‚¬ν•œ 객체λ₯Ό μ—¬λŸ¬κ°œ λ§Œλ“€μ–΄μ•Ό ν• λ•Œ μ‚¬μš©ν•œλ‹€.
μƒμ„±μž ν•¨μˆ˜μ˜ 경우 일반 ν•¨μˆ˜μ™€ 기술적 μ°¨μ΄λŠ” μ—†μœΌλ‚˜ μƒμ„±μž ν•¨μˆ˜μ˜ 경우 두 κ΄€λ‘€λ₯Ό λ”°λ₯Έλ‹€.

  • ν•¨μˆ˜ μ΄λ¦„μ˜ 첫 κΈ€μžλŠ” λŒ€λ¬Έμžλ‘œ μž‘μ„±ν•œλ‹€.
  • 이름 μ•žμ— 'new' μ—°μ‚°μžλ₯Ό κΌ­ λΆ™νžŒλ‹€.
function AddUser(name, job){
  this.name = name;
  this.job = job;
}
const user1 = new AddUser('sunghoon', 'dev');

console.log(user1) // { name: 'sunghoon', job: 'dev' }

new μ—°μ‚°μžμ™€ μƒμ„±μž ν•¨μˆ˜λ₯Ό μ΄μš©ν• λ•Œ λ‹€μŒκ³Ό 같은 μ•Œκ³ λ¦¬μ¦˜μ΄ μž‘λ™ν•œλ‹€.

  1. 빈 객체λ₯Ό 생성해 ν•¨μˆ˜ λ‚΄ this에 ν• λ‹Ήν•œλ‹€.
  2. ν•¨μˆ˜μ˜ 본문을 μ‹€ν–‰ν•˜μ—¬ this에 ν”„λ‘œνΌν‹°λ₯Ό μΆ”κ°€ν•œλ‹€.
  3. 객체 thisλ₯Ό λ°˜ν™˜ν•œλ‹€.

return μ‚¬μš©μ‹œ

μƒμ„±μž ν•¨μˆ˜λŠ” 객체 this에 ν”„λ‘œνΌν‹°λ₯Ό μΆ”κ°€ ν›„ μžλ™μœΌλ‘œ 객체 thisλ₯Ό λ°˜ν™˜ν•˜κΈ°μ— return이 ν•„μš”μ—†λ‹€.
ν•„μš” μ—†μ§€λ§Œ λ§Œμ•½ μƒμ„±μž ν•¨μˆ˜ λ‚΄ return문이 μž‘μ„±λœλ‹€λ©΄, λ°˜ν™˜λ˜λŠ” 것이 객체일 경우 ν•΄λ‹Ή 객체λ₯Ό λ°˜ν™˜ν•˜κ³ , λ§Œμ•½ μ›μ‹œ μžλ£Œν˜•μ΄ λ°˜ν™˜λœλ‹€λ©΄ return문을 λ¬΄μ‹œν•œλ‹€.

GOOD πŸ˜‰

κ³΅λΆ€λŸ‰μ΄ λ§Žμ§€λŠ” μ•Šμ§€λ§Œ κ·Έλž˜λ„ 아침에 일어났을 λ•Œλ³΄λ‹€ 지식이 λŠ˜μ—ˆλ‹€.

BAD πŸ˜₯

λ„ˆλ¬΄ λ†€μ•„μ„œ κ³΅λΆ€λŸ‰ μžμ²΄κ°€ 적닀ㅠ

TO DO πŸ”₯

  • DOM ꡬ쑰
  • 이벀트
  • κ³ μ°¨ν•¨μˆ˜
  • react
  • node.js

Retrospect 🧐

μ–΄μ œ 밀에 μžλ©΄μ„œ λ“œλΌλ§ˆλ₯Ό λͺ‡λ²ˆ 보고 μž€λ”λ‹ˆ 였늘 λŠ¦μž λ„ μžλ²„λ Έκ³ , μΌμ–΄λ‚˜μ„œλ„ μΉ¨λŒ€μ— 빈λ‘₯거리닀가 λ„·ν”Œλ¦­μŠ€λ₯Ό μΌœλ²„λ Έλ‹€.

μžκΈ°λ°˜μ„±μ˜ μ‹œκ°„μ΄ ν•„μš”ν•œ μ‹œμ μΈ λ“― ν•˜λ‹€.

Reference πŸ™‡

λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ - https://ko.javascript.info/

profile
μ–΄λ–»κ²Œ 이걸 ν’€μ–΄λ‚Ό 수 μžˆμ„κΉŒ

0개의 λŒ“κΈ€