승자를 판단하는 부분과 무승부를 판단하는 부분, 차례를 넘기는 부분이 중복되므로 이 부분을 함수로 빼면 좋습니다.
const checkWinnerAndDraw = (target) => {
const hasWinner = checkWinner(target);
if (hasWinner) { // 승자가 있으면
$result.textContent = `${turn}님이승리!`;
$table.removeEventListener('click', callback);
return;
}
// 승자가 없으면
const draw = rows.flat().every((cell) => cell.textContent);
if (draw) {
$result.textContent = '무승부';
return;
}
turn = turn === 'X' ? 'O' : 'X';
};
const callback = (event) => {
(중략)
event.target.textContent = turn;
checkWinnerAndDraw(event.target);