Monday, February 4, 2013

Inner class를 이용해 Attribute와 변수를 구분하기

게임에서 사용되는 유닛이나 무기 정보들은 보통 DB에 저장하고 게임에서는 이를 참고해서 로직을 작성하게 됩니다. 이때 클래스 내부에 DB정보를 저장하고 이를 로직에서 사용할 때 private로 변수를 선언하게 되더라도 이를 로직에서 사용할 때 변경이 되어도 되는 변수인지 아닌지 헷갈릴 때가 많은데요.

가령 mFireRate와 같은 변수가 DB에서 얻은 값이고 이 값을 이용해서 다음과 같은 로직이 있다고 칩니다.

mCount++;

if ( mCount >= mFireRate )
{
then fire it.
}

문제는 mFireRate가 DB변수값인지 아닌지 변수명 자체로는 구분하기가 힘들다는 점입니다. 이것을 해결하기 위해서 mFireRateDB와 같이 변수명에 구분을 하기 위한 접두어나 접미사를 써주는 경우가 있는데 이것 역시 마음에 드는 방식은 아닙니다. 해서... 저는 보통 Inner struct, class를 사용해서 다음과 같이 사용합니다.

class Attribute
{
    int mFireRate;
} mAttrib;

이렇게 하면 앞서 살펴본 코드가 다음과 같이

mCount++;

if ( mCount >= mAttrib.mFireRate )
{
then fire it
}

구분할 수 있게 됩니다. 그렇게 되면 저는 mCount보다는 다음과 같이 변수명을 바꿀 것입니다.


mFireRate++;

if ( mFireRate >= mAttrib.mFireRate )
{
fire it
}

Attribute안에 들어간 값은 읽기 전용이라고 생각하면 코드를 볼 때 더 이해하기가 쉽습니다. 물론 메소드로 표현하면 더 괜찮겠지만 코드 작성하는게 좀 귀찮긴 하지요 :)


mFireRate++;

if ( mFireRate >= mAttrib.GetFireRate() )
{
fire it
}


No comments:

Post a Comment

Task in UnrealEngine

 https://www.youtube.com/watch?v=1lBadANnJaw