0. 들어가며...
물리학에서 물질은 중성자, 양성자,전자 3개로 되어있습니다.(물론 이거말고도 더있는것으로 알고있습니다만..) 3가지 요소는 각각의 속성을 가지고있습니다.
이중에서 중성자는 주로 질량에 관여는하는 요소이고 나머지 두개는 물질의 성질을 결정하는 역활을 한다고합니다.(양성자와 전자 갯수에의해 원자가 결정됨, 단 중성자만 질량에 관여하지는 않습니다.)
사실 갑자기 소프트웨어개발 관련글쓰면서 웬 물리? 할수도있겠지만..
우리가 많이 쓰는 MVC 패턴을 보면 이것들과 많이 닮아있다는것을 알수있습니다.
Model은 중성자 ,View는 양성자, Controller는 전자가 하는 역활이 비슷합니다.
학생들을 교육하다가 느끼는점은 프로그래밍언어를 배울때 어떤 언어가 배우기 쉬운것인가 하는 부분인데...
Model요소가 가장 배우기 어렵고(사실 너무 무겁죠..) 그다음이 Controll 그리고 제일 쉬운것이 View입니다.
사실 모델에 비해 상대적으로 배우기쉬운 VC만으로 코드를짤수도있으나 그런 코드는 마치 반물질처럼 코드가 만들어 지면서 부식이되어 더이상 쓸모없어지는 코드가 되어져 버림니다. 매우 불안정한 상태의 코드가 만들어 집니다. 그래서 아주 유지보수는 생각도 못하는 소모적인 코딩이 됩니다.
그러나 게임프로그램밍처럼 아주 에너지가 넘치는 작업을 하기 위해서는 무턱대고 중성자로 무질서를 제어 한다는것도 방법은 아닙니다.
현재 물리학에서 반물질을 연구하는것처럼 소프트웨어 개발에서도 코루틴같은 반물질을 도입해서 그것을 마음대로 제어만 할수있다면 엄청난 생산성의 향상을 가져올수도 있습니다.
이번에 kgc강연에서 코루틴관련해서 발표를 했었는데 가장 많이 나왔던 질문이 이것 도대체 어따쓰냐는 질문이 많았던거같습니다.(실제 사용예가 궁금해 하시는 분들이 많았습니다^^)
1. 빗나간 탄도의 정리 문제
슈팅게임같은 데서 목표물을 명중시키지못한 총알들은 화면밖으로 사라지게되는데요. 이런것들을 정리하기 위해서 일정시간이되면 메모리상에서 객체를 지워버리는 처리가 필요합니다.
가장 쉽게 생각할수있는 코드가 다음과 같습니다.
델타타임값을 계속 누적시켜서 일정시간이 경과 됐는지를 판단하여 시간이 넘었으면 객체를 지워버리는 코드입니다.
발사후 2초동안 별일이 없으면 무조건 삭제가되도록 하는 코드입니다.
비록 이정도는 간단한 코드이지만 우리가 요구했던 일에 비하면 매우 번잡스러운 코드가됩니다. 일단 함수 두개에서 하나의 전역 변수(엄밀히 말하면 전역은 아니지만...)에 접근해서 양쪽에서 서로 읽고 쓰기등을 수행합니다.
2. 코루틴으로 문제 해결하기
이것을 코루틴을 써서 구현 해보면 다음과 같습니다.
놀랍지 않습니까? 단 2줄로 똑같은 기능을 구현했습니다. 전역변수를 쓴것도 없으며 따로 두개 이상의 함수에 따로 처리 해줄일도 없고 오직 Start함수에서 그흔한 제어 구문없이 단지 선언식으로 지정을 해준것입니다.
또한 마치 쓰레드를 쓴것처럼 어떠한 블럭킹도 없습니다.
단, 이것은 실용적인 예는 아니고 Destroy(오브잭트,딜래이시간) 으로도 같은 일을 할수있습니다.
3. 결론
사실 코루틴을 쓰고 안쓰고가 중요한것은 아닙니다. 소프트웨어 개발은 문제 해결의 연속된 고된 작업입니다. 세상에 한가지 해법만 존재하는 문제는 없습니다. 해답에 집중하기 보다는 해법에 집중할수록 좀더 완벽한 소프트웨어가 나오지 않을까 생각합니다.
'프로그래밍' 카테고리의 다른 글
유니티4의 애니메이션 시스템의 모바일 활용 (5) | 2012.11.23 |
---|---|
cocos2d-x 스프라이트 애니메이션 ( cocos2d-x sprite animation ) (4) | 2012.11.18 |
[KGC2012] Coroutine 과 FSM 비동기식 게임프로그래밍 패턴 (0) | 2012.10.29 |
[KGC2012] 렐릭의 FX 시스템.. (물론 영문..) (4) | 2012.10.29 |
[KGC 2012] 스크린 스페이스 데칼 (0) | 2012.10.20 |