요즘의 삽질 #1

이론을 하다보니 코딩을 손에 놓게되고, 프로그래머로서 죽어가고 있다는 생각이 들었습니다. 뭐라도 짜야겠다 싶어서 세틀러를 흉낸 작은 게임을 만들기로 했습니다. 문뜩 세틀러를 하고 싶을 때가 있는데 맥에서 작동하는 세틀러가 없더라는거죠.

Ocaml을 쓰고 싶지만 상태가 있는 언어가 필요할듯 하여 Java를 선택했습니다. (Ocaml에도 reference가 있고 OO를 지원하지만, 불편합니다) 그런데 Ocaml을 버리고 보니 패턴매칭이 이만저만 쓰고 싶은게 아닙니다. 만들고자 하는 프로그램의 대략적인 구조는 다음과 같습니다. 


서버가 있고 클라이언트가 있고, 클라이언트 안에만 4개의 컴포너트가 있어요. 컴포넌트들끼리는 정보를 주고 받죠. 굵은글씨로 표시된 놈들이 문제가 됩니다. 메세지는 종류가 많고, 컴포넌트는 상황에 따라 동일한 메세지에 대해 다르게 반응해야합니다. 

(메세지의 종류, 컴포넌트의 상태) -> 적당한 동작

각 컴포넌트의 로직은 위와 같은 꼴의 테이블일 텐데, if then else를 쓰려니 갑자기 죄짓는것 같은 생각이 들더군요. ML이나 Haskell의 패턴매팅을 사용하면 로직을 거의 그댈 쓰면 되거늘... 지금은 같은 채널을 사용하는 메세지의 공통 부모를 만들고, 부모가 정수형의 "type" 필드를 가지도록 한 다음 type의 값을 메세지마다 다르게 설정하여 switch-case를 쓰려고 합니다. 썩 마음에 들지는 않습니다. 

Java나 C++에서 이런 문제를 깔끔하게 해결하는 좋은 방법이 없을까요?

P.S 연구실 선배 말로는 패턴매칭을 지원하는 실험용 자바 구현체가 있다는군요.

Posted by 발당


Trackback URL : http://jbdmk1.upnl.org/tt/trackback/451

Trackbacks List

  1. 패킷 직렬화/핸들링 라이브러리

    Tracked from Rica의 가짜블로그 2009/10/07 16:31 Delete

    컴포넌트의 현재 상태에 대한 다형성은 주류 OO 언어에서 State Pattern 구현하는 방법이 많이들 나와 있으니 그걸 쓰면 될 거고, 각 메세지에 대한 처리 방법이 여러 상태에 걸쳐 중복될 것 같으면 if-then-else 로 바르는 게 낫겠고요. 직렬화랑 메세지의 종류에 대한 다형성이 문제겠는데 회사에서는 이렇게 해결했었습니다. (코드 안 보고 새로 작성하는 중 :p) SomeHandler.h: class SomeHan..

  2. 메시지 처리기

    Tracked from ::: Digitzetre 다섯번째 - 유入經로 ::: 2009/10/08 22:22 Delete

    결국 메시지 처리를 하되 switch~case를 없앨 수 있는 방법을 찾는 거군요. @_@ Ocaml은 안 봐서 모르겠지만.. Ocaml은 어떻게 처리하나요. 저 같은 경우는.. map을 통해서 각각 키와 함수포인터를 연결했지요. 그리고 함수포인터를 찾아가서 실행해주는 함수를 만듭니다. 예를들면 이런겁니다. struct FuncLine { string key; Func* pFunc; }; typedef map<string, FuncLine> Func..

  3. 패킷 직렬화 / 핸들링 라이브러리

    Tracked from rein&#039;s world 2009/10/09 00:39 Delete

    What a Wontaeful World: 요즘의 삽질 #1 에서 트랙백 리카넷: 가짜블로그 &#8211; 패킷 직렬화/핸들링 라이브러리에서 트랙백 + IRC 에서도 몇 가지 사항을 논의 했던걸 덤프. 일단 발당군이 IRC에서 말했던, 각 메시지 타입 별로 비지터 패턴(visitor pattern)을 쓰는 것의 문제 각각의 패킷 핸들러마다 클래스를 정의 해줘야하는 문제 &#8212; 익명 클래스로 약간 단순화는 할 수 있음 패킷 구조(메시지에 담긴...

Comments List

  1. 피앙 2009/10/06 19:27 # M/D Reply Permalink

    저거 무슨 툴로 그린 거야?

    1. 발당 2009/10/06 22:14 # M/D Permalink

      키노트

  2. 워니 2009/10/07 10:29 # M/D Reply Permalink

    컴포넌트가 쓸 메세지 콜백 함수 등록해서 메세지 콜되었을때 등록된 녀석들만 불러주면 되지 않을까? 그럼 컴포넌트 안에서 자기 상태 정도야 알테고ㅋ

  3. 디지츠 2009/10/08 22:23 # M/D Reply Permalink

    세틀러 베타테스터 지원합니다 !

  4. soon 2009/10/22 14:12 # M/D Reply Permalink

    이걸 보고 방금 든 생각인데, 왠지 dk님께서 이것도 보고 계신 것이 아닐까?

    지난번 이메일의 원인?

  5. 비밀방문자 2009/10/30 00:31 # M/D Reply Permalink

    관리자만 볼 수 있는 댓글입니다.

Leave a comment
« Previous : 1 : ... 8 : 9 : 10 : 11 : 12 : 13 : 14 : 15 : 16 : ... 341 : Next »