[Project Name 아직 미정.] 인벤토리 시스템(수정) Work Book

[Project Name 아직 미정.] 인벤토리 시스템

설계해놓앗던 프레임웤 부분을 수정했다.
검토를 하다보니 약간 뭔가 이상하단생각에 바꾸었다.

CCharacter->useItem( item ) ;
을 호출하면
수정 이전에는 item으로부터 정보를 얻어내서
그 정보를 가지고 분기(아이템타입,아이템이펙트에 의해)를 해서
맞는 코드가 실행되게 되었는데
이는 객체지향적인 면에서 논리적인 문제가 있다

우리가 알약을 먹을때를 생각해보자-

수정 이전의 논리는
우리 몸에 알약이 들어오면 우리 몸이 스스로 알약 정보를 알아내고
그 알약의 정보대로 몸이 스스로 효과를 내는 시스템이었다.
맞는거 갖기도 하지만 '우리 몸이 스스로 알약의 정보를 알아내고' 부분부터 문제가 된다.

알약은 우리몸에 들어와서 흡수가 되어 혈관을 타고 몸에 퍼져 화학작용(?)에 의해 효과가 발생하는 것이지
몸이 알약을 분석해서 어느 효과를 몸이 내야겟다 이런 내용은 맞지가 않다.

뭐 이전대로 해도 똑같이 돌아 가기는 하지만
앞으로 계속 발전해야 하기에 논리를 뒤엎어버렷다.

수정한것은

CCharacter->useItem( item ) ;                     // 몸에 알약 투입
을 하면 item->useTo( this ) ; 가 호출되고      // 알약이 몸에 사용됨
인자로 들어가는 this(CCharacter)에 아이템의 효과를 적용시키는것이다.
이렇게 하니 분기하는 코드를 만들어낼 필요도 없고
좀더 논리적인 코드가 되었다.
그리고 이전 코드분량이 10이엇으면 지금은 1이면 된다. 이 얼마나 간단한가..
CItem을 상속받아서 useTo( CCharacter )만 재정의 해주면 된다. // 사용시 효과 부분


----------------------------------------------------------------------------

나중에 한 1~2년만 지나도 지금 글을 보면 수많은 논리적인 결함이나
잘못된 것들이 보이겟지..

만물을 객체화 시킬수 있는, 마법을 부리는, C++에 매료된 상민-

트랙백

이 글과 관련된 글 쓰기 (트랙백 보내기)
TrackbackURL : http://eve8110.egloos.com/tb/3205293 [도움말]
  • 리팩토링 2008/09/18 22:02 #

    [Project Name 아직 미정.] 인벤토리 시스템(수정)최근 생각된건데.아주 늅늅일때 나.. 아주 기특한 생각을 했었구나..리팩토링이 뭔지도 모를때 행했던 리팩토링..그때 이 포스트를 보고 주성이형이 칭찬했었는데 그 이유를 알았다.... more

덧글

  • 라인슬링 2007/06/01 17:57 # 답글

    만물을 객체화....
  • 소노반 2007/06/02 02:26 # 답글

    유체의것 뿐만 아니라 무체의것들도 객체화 한다는 논리는..
    비프로그래머에겐 어려운 내용이겟죠..
덧글 입력 영역