• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

커맨드 패턴의 이해

23.09.11 03:56 작성 조회수 206

0

커맨드 패턴을 정확히 이해하고 싶은 학생입니다. 강의를 정말 많이 돌려보고 구글링도 해본 결과 저는 다음과 같이 커맨드 패턴을 이해했고 적용해봤습니다.

기존의 방식은 클라이언트에서 요청이 들어오면 서버의 쓰레드들이 일을 처리하기 위해 쓰레드들이 락에 의한 대기를 함으로써 대기 시간이 길어져 메모리 낭비가 됐지만

커맨드 패턴을 활용하여 클라이언트의 요청을 캡슐화하여 서버에 전해줌으로써 기존에 락에 의해 대기만 하던 쓰레드들이 대기하는 시간이 줄어들게 됩니다.

단점으로는 2가지가 있습니다.

플레이어의 죽음과 종료가 거의 동시에 일어났다고 가정해보겠습니다. 종료가 됨으로써 플레이어의 room이 null로 밀렸는데 잡큐에서 실행된 죽음 함수에서 플레이어의 room에 관한 정보로 접근하려 하니 null 크래쉬가 나게됩니다. 따라서 null 체크를 꼼꼼히 해줘야 합니다.

또 다른 문제는 로직 동작 순서의 불명확함입니다..

코드의 순서가

1번. 잡큐로 밀어넣은 함수 1

2번. 잡큐와 상관 없는 코드

3번. 잡큐로 밀어넣은 함수 2

이런 상태에서 로직이 존재한다고 가정할 때

큐에 넣은 일이 바로 실행되는 것이 아니기 때문에 1번과 3번이 밀려 2번이 먼저 실행되는 일이 발생될 수도 있습니다. 따라서 이런 문제를 해결하기 위해선 잡큐에 넣는 커맨드 패턴 방식이 아닌 기존의 락으로 잡아가던 방식으로 함수를 사용하는 것이 좋습니다.

이 정도로 정리해봤는데 혹시 다른 점 있을까요? 커맨드 패턴 부분의 이해가 정말 안됐어서 질문 드립니다!

답변 1

답변을 작성해보세요.

0

[제가 이해한 것이 맞나요?] 와 같은 질문을 하는 분을이 최근 들어 너무 많아진 것 같네요.
늘 말씀드리지만 이런 질문은 할 필요가 없습니다.
스스로 생각한 바를 정리해서 이해하고 있다가
그게 잘못 되었으면 언젠가 모순이 발생하여 크게 깨우침을 얻기 때문입니다.

커맨드 패턴 또한 어려운 개념이 아니라서
너무 많은 생각을 할 필요 없습니다.
그냥 어떠한 행동을 캡슐화해서 보관했다가, 나중에 사용할 수 있는 것이고
대표적으로 키보드 매핑이나 서버 Job 등에서 응용이 가능한 것이죠.

자르트님의 프로필

자르트

질문자

2023.09.11

답변 및 일침 감사합니다 루키스님!!