🍝 λ¦¬μ•‘νŠΈμ—μ„œ μŠ€νŒŒκ²Œν‹° WebRTC μ½”λ“œ Class둜 μΆ”μƒν™”ν•˜κΈ° 🍝

modiΒ·2023λ…„ 7μ›” 24일
2

Javascript

λͺ©λ‘ 보기
1/1
post-thumbnail

μΊ‘μŠ€ν†€ ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λ©° 화상톡화λ₯Ό μœ„ν•΄ WebRTCλ₯Ό μ‚¬μš©ν•˜κ²Œ λ˜μ—ˆλ‹€. λ‚˜λŠ” κ΄€λ ¨ κ°•μ˜λŠ” λ“€μ–΄λ΄€μ§€λ§Œ WebRTCλ₯Ό ν”„λ‘œμ νŠΈμ— μ μš©ν•˜λŠ” 것은 μ²˜μŒμ΄μ—ˆμ§€λ§Œ, κ°•μ˜μ™€ κ΅¬κΈ€λ§μ˜ λ„μ›€μœΌλ‘œ 화상톡화 κΈ°λŠ₯ κ΅¬ν˜„μ— μ„±κ³΅ν–ˆλ‹€. κ·ΈλŸ¬λ‚˜...

μ•„λ‹ˆ μ½”λ“œκ°€ μ™œμΌ€ κΈΈμ–΄?!? 정말 λͺ» 봐주겠넀!!!!!

λ¦¬μ•‘νŠΈλ₯Ό μ‚¬μš©ν•˜λ©΄μ„œ μž¬μ‚¬μš©μ„±μ€ 0이고 심지어 읽기도 μ–΄λ €μš΄ λ”ν‹°μ½”λ“œλŠ” 참을 수 μ—†μ–΄μ„œ, WebRTC κ΄€λ ¨ λ‘œμ§μ„ μ–΄λ–»κ²Œ λΆ„λ¦¬ν• κΉŒ κ³ λ―Όν–ˆλ‹€. 일단 μ•„λž˜λŠ” 기쑴의 μ½”λ“œλ‹€. 참고둜 이 ν¬μŠ€νŒ…μ—μ„œ μ½”λ“œλŠ” κ·Έλ‹₯ μ€‘μš”ν•˜μ§€ μ•ŠμœΌλ‹ˆ ꡳ이 λ‹€ 읽을 ν•„μš” μ—†λ‹€.

λ‹Ήμ‹œ ν•„μš”ν•œ λ¦¬νŒ©ν† λ§μ€ 두 κ°€μ§€μ˜€λ‹€.

  1. let μ‚¬μš©μ„ μ§€μ–‘ν•˜μž
  2. WebRTC κ΄€λ ¨ μ½”λ“œμ™€ socket의 이벀트 λ¦¬μŠ€λ„ˆλ₯Ό λΆ„λ¦¬ν•˜μž

이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ Classλ₯Ό μ΄μš©ν•˜κΈ°λ‘œ ν–ˆλ‹€.

클래슀

ν΄λž˜μŠ€λŠ” 객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—μ„œ νŠΉμ • 객체λ₯Ό μƒμ„±ν•˜κΈ° μœ„ν•΄ λ³€μˆ˜μ™€ λ©”μ†Œλ“œλ₯Ό μ •μ˜ν•˜λŠ” μΌμ’…μ˜ ν‹€λ‘œ, 객체λ₯Ό μ •μ˜ν•˜κΈ° μœ„ν•œ μƒνƒœ(멀버 λ³€μˆ˜)와 λ©”μ„œλ“œ(ν•¨μˆ˜)둜 κ΅¬μ„±λœλ‹€.

μ²˜μŒμ— 클래슀의 constructor둜 peerConnection, socket, roomIdλ₯Ό μ΄ˆκΈ°ν™”ν•˜κ³ , 기쑴의 λ‘œμ§μ„ λ©”μ„œλ“œλ‘œ λ§Œλ“€μ—ˆλ‹€. κ²°κ³ΌλŠ” λ‹€μŒκ³Ό κ°™λ‹€.

이제 됐닀!! 클래슀λ₯Ό μ΄μš©ν•΄ λ‘œμ§μ„ λΆ„λ¦¬ν–ˆμœΌλ‹ˆ μ½”λ“œλ„ κΉ”λ”ν•΄μ‘Œκ³ , κΈ°λŠ₯도 잘 λŒμ•„κ°€κ² μ§€? 라고 μƒκ°ν–ˆμ„ λ•Œ this = undefinedλΌλŠ” μ—λŸ¬κ°€ λ°œμƒν–ˆλ‹€.

객체 λ©”μ„œλ“œκ°€ 객체 λ‚΄λΆ€κ°€ μ•„λ‹Œ λ‹€λ₯Έ 곳에 전달 ν›„ ν˜ΈμΆœλ˜μ–΄ thisκ°€ 사라진 것이닀. μ»¨νƒμŠ€νŠΈλ₯Ό μžƒμ–΄λ²„λ¦° thisλŠ” λ‹Ήμ—°ν•˜κ²Œλ„ undefinedκ°€ λ˜μ—ˆλ‹€.

ν•¨μˆ˜ 바인딩

μ»¨νƒμŠ€νŠΈλ₯Ό μœ μ§€ν•˜κΈ° μœ„ν•΄μ„œ ν•¨μˆ˜ 바인딩을 ν•΄μ•Ό ν•œλ‹€.

function.prototype.bind()

bind() λ©”μ†Œλ“œκ°€ 호좜되면 μƒˆλ‘œμš΄ ν•¨μˆ˜λ₯Ό μƒμ„±ν•œλ‹€. λ°›κ²Œλ˜λŠ” 첫 인자의 valueλ‘œλŠ” this ν‚€μ›Œλ“œλ₯Ό μ„€μ •ν•˜κ³ , μ΄μ–΄μ§€λŠ” μΈμžλ“€μ€ λ°”μΈλ“œλœ ν•¨μˆ˜μ˜ μΈμˆ˜μ— μ œκ³΅λœλ‹€.

let user = {
  firstName: "John"
};

function func() {
  alert(this.firstName);
}

let funcUser = func.bind(user);
funcUser(); // John

이λ₯Ό μ΄μš©ν•΄ μƒμ„±μž ν•¨μˆ˜μ—μ„œ λ©”μ„œλ“œλ₯Ό λͺ…μ‹œμ μœΌλ‘œ binding ν•  수 μžˆλ‹€. λ‹€λ§Œ 바인딩이 ν•„μš”ν•œ ν•¨μˆ˜λ₯Ό 맀번 μƒμ„±μž ν•¨μˆ˜μ— μΆ”κ°€ν•΄μ•Ό ν•˜λŠ” 단점이 μžˆλ‹€.

λ˜ν•œ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  λ•Œ binding ν•  수 μžˆλ‹€. 이 방법은 가독성이 λ–¨μ–΄μ§€λŠ” 단점이 μžˆλ‹€.

ν™”μ‚΄ν‘œ ν•¨μˆ˜

ν™”μ‚΄ν‘œ ν•¨μˆ˜μ—λŠ” thisκ°€ μ—†λ‹€

ν™”μ‚΄ν‘œ ν•¨μˆ˜μ—λŠ” thisκ°€ μ—†κΈ° λ•Œλ¬Έμ—, 클래슀 λ‚΄λΆ€ λ©”μ„œλ“œλ₯Ό ν™”μ‚΄ν‘œ ν•¨μˆ˜λ‘œ μ •μ˜ν•œλ‹€λ©΄ μƒμ„±μžμ— λŒ€ν•΄ 관리할 ν•„μš”κ°€ μ—†λ‹€.

λŒ€μ‹  thisκ°€ μ—†κΈ° λ•Œλ¬Έμ— ν™”μ‚΄ν‘œ ν•¨μˆ˜λŠ” μƒμ„±μž ν•¨μˆ˜(new)둜 μ‚¬μš©ν•  수 μ—†λ‹€λŠ” μ œμ•½μ΄ μ—†λ‹€λŠ” 것을 λͺ…μ‹¬ν•˜μž.

μ„Έ κ°€μ§€μ˜ 방법 쀑 λ‚˜λŠ” 클래슀 λ‚΄λΆ€ λ©”μ„œλ“œλ₯Ό ν™”μ‚΄ν‘œ ν•¨μˆ˜λ‘œ μ •μ˜ν•˜κΈ°λ₯Ό μ„ νƒν–ˆλ‹€. μ΅œμ’… μ½”λ“œλŠ” λ‹€μŒκ³Ό κ°™λ‹€.

κ²°λ‘ 

WebRTC κ΄€λ ¨ μ½”λ“œμ™€ socket의 이벀트 λ¦¬μŠ€λ„ˆλ₯Ό Class둜 μΆ”μƒν™”ν•¨μœΌλ‘œμ¨, 기쑴보닀 μ½”λ“œ 가독성이 μ’‹μ•„μ‘Œλ‹€.
ν”„λ‘ νŠΈμ—”λ“œ 곡뢀λ₯Ό λ¦¬μ•‘νŠΈλ‘œ ν”„λ‘œμ νŠΈμ— μ°Έμ—¬ν•˜λŠ” κ²ƒμœΌλ‘œ μ‹œμž‘ν•΄, μžλ°”μŠ€ν¬λ¦½νŠΈλ‘œ ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•œ 적이 μ—†μ—ˆλ‹€. 그렇기에 μžλ°”μŠ€ν¬λ¦½νŠΈ κ³΅λΆ€μ˜ νš¨μš©μ„±μ„ 느끼기 μ–΄λ €μ› λ‹€. λ‘œμ§μ„ 클래슀둜 μΆ”μƒν™”ν•˜λŠ” κ²½ν—˜μ„ ν†΅ν•΄μ„œ 덕뢄에 μžλ°”μŠ€ν¬λ¦½νŠΈμ— λŒ€ν•΄ λ§Žμ€ 관심이 생겼닀. μ•žμœΌλ‘œ μžλ°”μŠ€ν¬λ¦½νŠΈ 곡뢀 μ—΄μ‹¬νžˆ ν•΄μ•Όμ₯~!!

참고자료

λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ νŠœν† λ¦¬μ–Ό

μžμ„Έν•œ μ½”λ“œλŠ” githubμ—μ„œ 확인할 수 μžˆλ‹€

1개의 λŒ“κΈ€

comment-user-thumbnail
2023λ…„ 7μ›” 24일

잘 λ΄€μŠ΅λ‹ˆλ‹€. 쒋은 κΈ€ κ°μ‚¬ν•©λ‹ˆλ‹€.

λ‹΅κΈ€ 달기