[HandTris] #3. TypeError: Cannot read properties of undefined - (์ ๋์์ผ๋ก ํ๋ ์จ๋ผ์ธ ์น ํ ํธ๋ฆฌ์ค ๊ฒ์ ๋ง๋ค๊ธฐ)
[HandTris] #2. ํ๋กํ ํ์ ํต์ ํ ์คํธ - (์ ๋์์ผ๋ก ํ๋ ์จ๋ผ์ธ ์น ํ ํธ๋ฆฌ์ค ๊ฒ์ ๋ง๋ค๊ธฐ)
2024.06.20 - [SEUNGWOO + ENGINEER] - [HandTris] #1. ๋ชจ๋ธ ์ ์ ๋ฐ ํ๋กํ ํ์ ์ ์ - (์ ๋์์ผ๋ก ํ๋ ์จ๋ผ์ธ ์น ํ ํธ๋ฆฌ์ค ๊ฒ์ ๋ง๋ค๊ธฐ) [HandTris] #1. ๋ชจ๋ธ ์ ์ ๋ฐ ํ๋กํ ํ์ ์ ์ - (์ ๋์์ผ๋ก ํ๋ ์จ๋ผ
seungineer.tistory.com
socket์ url์ ๊ฐ์ ธ์ฌ ์ ์๋ค.
soccket ๋ณ์์ ๋ด๊ฒจ ์๋ url ์์ฑ์ ๊ฐ์ ธ์ sessionId๋ฅผ parsing ํ๊ณ ์ ํ๋ ์ค ๋ง๋ฌ๋ ์๋ฌ ์ค ์์ธ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ์ง ์์ ๋ฐ์ํ ์๋ฌ์ ๋ํด ์ ๋ฆฌํ๊ณ ์ ํ๋ค. ์ ๋ชฉ์ 'TypeError'๋ผ๊ณ ๋์ด ์์ง๋ง type์ ๋ฌธ์ ๋ ์๋๊ณ , ๊ฐ์ฒด๊ฐ ์์ฑ๋๊ธฐ ์ ์ ๊ฐ์ฒด์ ์์ฑ์ ์ฝ๋ ๋ก์ง์ด ์์น๋์ด ์์ด ๋ฐ์ํ๋ ๋ฌธ์ ๋ก ๊ฐ์ฒด ์์ฑ ์ ์๋ ์ด ๋ก์ง์ ๋์ด๊ฐ๋๋ก ์์ธ์ฒ๋ฆฌํ์ฌ ํด๊ฒฐํ ์ ์๋ค.
๐ ๋ฒ๊ทธ๋ฅผ ์ก๊ธฐ ์ํ ๊ฐ์ค
1. _transport ์์ฑ์๋ ์ ๊ทผํ ์ ์๋?
์ฒ์ ์ด ์๋ฌ๋ฅผ ๋ดค์ ๋, stompClient ๊ฐ์ฒด๋ ๋น์ฐํ ์ ์๋์ด ์๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ '_transport'๋ผ๋ ์์ฑ๋ช ์์ ์ธ๋๋ฐ๊ฐ ๋ถ์ด ์ ๊ทผ ๋ถ๊ฐ๋ฅํ ๊ฒ์ธ์ง ์์ฌํ์๋ค. Typescript๋ก ํ ์คํธํด ๋ณธ ๊ฒฐ๊ณผ ๋น์ฐํ ์ ๊ทผ์ด ๊ฐ๋ฅํ์ฌ ์ด ๊ฐ์ค์ ๊ธฐ๊ฐ๋์๋ค.
2. undefiend๋ ์ด๋ค ์ํฉ์ ๋ฐ์ํ๋๊ฐ
์ ์๋์ง ์์ ๊ฒ์ ์์ฑ์ ์ฝ์ผ๋ฉฐ ๋ฐ์ํ ์๋ฌ์ด๊ธฐ ๋๋ฌธ์ ์ธ์ ์ ์๋์ง ์๋์ง ์์๋ณผ ํ์๊ฐ ์์๋ค. ์ ์ํฉ์ ๊ฒฝ์ฐ 'stompClient'๊ฐ ์์ฑ๋์ง ์์๊ฑฐ๋, 'stompClient.ws'์ด ์์ฑ๋์ง ์์๊ฑฐ๋, 'stompClient.ws._transport'๊ฐ ์์ฑ๋์ง ์์๊ฑฐ๋, ํ๋ ์ธ ๊ฐ์ง ๊ฒฝ์ฐ๊ฐ ์์๋ค.
let socket = new SockJS('https://example.com/ws');
let stompClient = Stomp.over(socket);
์ ์ฝ๋์ ๊ฐ์ด stompClient๋ Stomp.over(socket);์ ์ํด ์ด๊ธฐํ๋๋๋ฐ ์ด ๊ณผ์ ์ ์คํจํ์ ์๋ ์๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์๋ค. ์๋ํ๋ฉด SockJS(URL); ํจ์๋ก WebSocket ์ฐ๊ฒฐ์ ์คํจํ๋ฉด socket์ด 'undefiend'๋ ์ ์์๊ธฐ ๋๋ฌธ์ด๋ค. ์ด undefiend๋ฅผ ์ด์ฉํด Stomp.over()๋ฅผ ํ๋ฉด ๋น์ฐํ stompClient๋ ์ด๊ธฐํ๋์ง ์์ ๊ฒ์ด๋ค!
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์กฐ๊ฑด๋ฌธ์ ์ฌ์ฉํ์ฌ stompClient ๊ด๋ จ ๋ณ์๋ค์ด ์ ์ธ๋์ด ์์ ๋๋ง ๋ก์ง์ด ์คํ๋๋๋ก ์์ ํ์๋ค.
ํ ํธ๋ฆฌ์ค ๊ฒ์ ํ๋ฉด์ ์ด์ํ๊ฒ(?) ๋ธ๋ญ์ด ์์ฑ๋๋ค.
์ด ์๋ฌ๋ ์์ ๋ง๋ฌ๋ ์๋ฌ์ ์ ์ฌํ ์๋ฌ ๋ฉ์์ง์ด์ง๋ง, ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ๋ฌ๋๋ค. Cannot set properties of undefined ๋ฉ์์ง๋ก ๊ฐ์ฒด๊ฐ undefined์ผ ๋ ์์ฑ์ set ํ๊ณ ์ ํด์ ๋ฐ์ํ ์๋ฌ์๋ค. ์๋ฌ๋ฅผ ๋ง๋ ์์๋ ์๋์ ๊ฐ๋ค.
1. ๋ธ๋ญ์ด (n, n) ์ ์ ๊ธฐ์ค์ผ๋ก ๋์นญ์ผ๋ก ๊ณ ์ ๋๋ค.....๐ค
์ ์ด๋ฏธ์ง์ ๊ฐ์ด ๋ธ๋ญ์ด ํ ํธ๋ฆฌ์ค ๋ธ๋ญ ํ๋ฉด์ ๋ด๋ ค์ค๋ฉด์ ํน์ ์์ ์ (n, n) ์ ์ ๊ธฐ์ค์ผ๋ก ๋์นญ๋์ด ์ ์ฅ๋๋ค. ์ดํ ๋ค์ ๋ธ๋ญ์ด ๋ด๋ ค์ค๊ณ ๋ค์ ๋ธ๋ญ์ด fix ๋๋ฉด ๋ (n, n) ์ ์ ๊ธฐ์ค์ผ๋ก ๋์นญ๋์ด ์ ์ฅ๋๋ค. ์ด๋ ํด๋จผ์๋ฌ๋ก ๋ฐ์ํ๋ค. ์๋ฌ๋ฅผ ๋ฐ์์ํจ ์ฝ๋๋ ์๋์ ๊ฐ๋ค.
Piece.prototype.fill = function (this: any, color: string) {
for (let r = 0; r < this.activeTetromino.length; r++) {
for (let c = 0; c < this.activeTetromino[r].length; c++) {
if (this.activeTetromino[r][c]) {
drawSquare(this.x + c, this.y + r, color);
board[this.x + c][this.y + r] = color;
}
}
}
}
board ๋ณ์๊ฐ ๊ธฐ๋ณธ "grey" color, 20X10 size๋ก ์ ์๋์ด ์๋ ๊ฐ์ด๋ค. ์ฌ๊ธฐ์ 'this.x+c, this.y+r'์ด ๊ฐ๊ฐ ์ด๊ณผ ํ์ ๋ํ๋ด๋๋ฐ ํ๊ณผ ์ด์ ์์น์์ผ์ ์์ ๊ฐ์ด ๋์นญ๋์ด ์ ์ฅ๋๋ ์ด์๊ฐ ๋ฐ์ํ๋ค. ๋ฐ๋ก ์์ drawSquare() ํจ์ Parameter ์์๊ฐ x๋ถํฐ ๋์ด ์์ด ์ฐฉ๊ฐํ๊ณ ์ฝ๋๋ฅผ ์์ฑํ ๊ฒ์ด๋ค๐ซฃ.
๊ทธ๋ ๋ค๋ฉด ์ด ์์๋ฅผ ๋ฐ๊ฟ์ฃผ๋ฉด ๋๋?!
2. undefined์ setํ ์ ์๋ค!
๋ถ๋ช board๋ ์๋๋ฐ undefined๋ผ๊ณ ํ๋ฉฐ, setting ํ ์ ์๋ค๊ณ ํ๋ค. ์ง๊ธ์ ๋๋ฒ๊น ํ๋ผ ๋งค์ฐ ์ฝ๊ฒ ๋๊ปด์ง๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด์ง๋ง ๋น์์๋ ์ด ์๋ฌ๋ก ๋๋ ์์๋ค.. ๊ฒฐ๋ก ์ ์ผ๋ก 'this.y + r'์ ๊ฐ์ด ์์๊ฐ ๋ ์ ์์ด์ board์ ์ธ๋ฑ์ค์ ์์๋ก ์ ๊ทผํ์ฌ undefined ๋๊ณ , undefined์ 'this.x + c' ์ธ๋ฑ์ค์ ์ธํ ํ๊ณ ์ ํ์ฌ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒ์ด์๋ค.
์ Piece ๊ฐ์ฒด์ 'this.y'๋ ์ด๊ธฐ -2๋ก ์ค์ ๋์ด ์๋ค. ์ฆ, this.y+r์ด ์์์ธ ๊ฒฝ์ฐ๊ฐ ํํ ๋ฐ์ํ๊ฒ ๋๋ค! ์์์ผ ๋๋ ์๋ ๋ก์ง์ด ์๋ํ์ง ์๋๋ก ํ ์๋ ์์๋ค. ์๋ํ๋ฉด board๋ณ์๊ฐ collision์ checkํ๋ ๋ก์ง๊ณผ ์ฐ๊ด๋์ด ์์ด, ๋ธ๋ญ์ด ๊ฝ ์ฐจ์ collision์ด ์ผ์ด๋๋ ์ํฉ์ board ๋ณ์๊ฐ ๋ง๋ค์ด์ค์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค. ์ฌ๊ธฐ์ ์์ธ์ฒ๋ฆฌ๋ฅผ ํด๋ฒ๋ฆฌ๋ฉด board ๋ณ์๋ ๋ธ๋ญ์ด ๊ฝ ์ฐจ๋ ์ํฉ์ ๋ง๋ค์ง ๋ชปํ๋ค!
3. ์๋ก์ด ๋ณ์์ ์์ฑ
drawSquare() ํจ์์์ canvas์ block์ coloringํด์ค์๋ ๋ถ๊ตฌํ๊ณ board ๋ณ์๋ฅผ ์ง์ ์ ๋ฐ์ดํธํ๊ณ ์ ํ๋ ์๋๋ ์ด board ๊ฐ์ฒด๋ฅผ STOMP๋ก ์๋๋ฐฉ ๊ฒ์ํ๋ฉด์ ์ ์กํ๊ณ ์ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
์์ ๊ฐ์ด board ๋ณ์๋ฅผ ์ ์กํ๋ ๋ก์ง์ผ๋ก ๊ตฌ์ฑํ๋ฉด ์ค์๊ฐ์ผ๋ก ๋จ์ด์ง๋ ๋ธ๋ญ์ ์ ์กํ ์ ์๊ณ , ๋ธ๋ญ์ด ๊ณ ์ ๋ ํ์์ผ board ๋ณ์๊ฐ ์ ๋ฐ์ดํธ๋์ด ์๋๋ฐฉ ํ๋ฉด์ ํ์๋๋ค.
๊ฒฐ๊ตญ ์๋ก์ด ๋ณ์(board_forsend)๋ฅผ ๋ง๋ค์ด 'undefined๋ฅผ ํผํ๊ธฐ ์ํ ์์ธ์ฒ๋ฆฌ ๋ฐ ๋ธ๋ญ์ด ๋จ์ด์ง ๋๋ง๋ค ์ค์๊ฐ ์ ๋ฐ์ดํธ'๋ฅผ ํ ์ ์์๋ค.
์ข์ธก์ ์ฝ๋์ ๊ฐ์ด board_forsend๋ฅผ ์๋ก ๋ง๋ฆ์ผ๋ก์จ ์ฐ์ธก ์ฝ๋์ฒ๋ผ ์์ธ์ฒ๋ฆฌ๋ฅผ ํ ์ ์๊ฒ ๋์๋ค. undefined์ setting ํ๋ ๋ฌธ์ ์ ์ค์๊ฐ์ผ๋ก ์ ๋ณด๋ฅผ ์ ๋ฌํ ์ ์๋ ๊ธฐ๋ฅ์ ๋์์ ๊ตฌํํ ์ ์์๋ค.
์ฝ๋๋ ์ ์ญํ ์ ์ถฉ์คํ๋ค.
์๋ฌ๋ ์ฌ๋์ด ๋ง๋๋ ๊ฒ.
๐
[HandTris] #4. ์น์บ ํ๋ฉด์ ๊ฐ๋ ค ๋ณด์ - (์ ๋์์ผ๋ก ํ๋ ์จ๋ผ์ธ ์น ํ ํธ๋ฆฌ์ค ๊ฒ์ ๋ง๋ค๊ธฐ)
2024.06.24 - [๐งญ KAIST JUNGLE/HandTris] - [HandTris] #3. TypeError: Cannot read properties of undefined - (์ ๋์์ผ๋ก ํ๋ ์จ๋ผ์ธ ์น ํ ํธ๋ฆฌ์ค ๊ฒ์ ๋ง๋ค๊ธฐ) [HandTris] #3. TypeError: Cannot read properties of undefined - (์ ๋์
seungineer.tistory.com