하지만 (1)과 같은 해결 방법은 좋아요/싫어요를 누를 때마다 예외 객체를 생성하는 문제가 발생한다. 이와 같은 예외 객체는 Stack
과 Heap
에 쌓이게 되는데 다량의 좋아요/싫어요 클릭이 발생할 경우 StackOverflow
가 발생할 수도 있기 떄문에 다음과 같이 변경했다.
public int vote(Integer boardSeq, Integer boardTypeSeq, Integer memberSeq, String isLike) {
// 처음 좋아요/싫어요를 하는 경우
if (boardDao.cntVote(boardSeq, boardTypeSeq, memberSeq) == 0) {
return boardDao.addVote(boardSeq, boardTypeSeq, memberSeq, isLike);
// 좋아요/싫어요가 이미 있는 경우
} else { // boardDao.cntVote(boardSeq, boardTypeSeq, memberSeq) == 1
// 같은 좋아요 또는 싫어요를 한번 더 눌렀을 경우
if (boardDao.cntVote(boardSeq, boardTypeSeq, memberSeq, isLike) == 1) {
boardDao.deleteVote(boardSeq, boardTypeSeq, memberSeq);
return 2;
}
// 좋아요 -> 싫어요 OR 싫어요 -> 좋아요
return boardDao.updateVote(boardSeq, boardTypeSeq, memberSeq, isLike);
}
}