게임을 제작하다보니 여러 클래스에서 데이터를 공유할 필요가 생기더라구요.
그래서 싱글톤으로 데이터 관리 클래스를 만들었습니다.
근데 멤버 변수를 만들어놓고 접근하려다보니 함수를 변수가 생길 때마다
2개씩 만들어 줘야 하더군요.
그래서 아주 고심을 했는데 편리하게 해줄 방법이 없었습니다.
대충 포인터로 때운 상태인데 역시 안정성이 걱정됩니다.
어떻게 효율적인 방법이 없을까요?
변수 하나 생길때마다 함수 두개씩 생기는 상황이라면, 따지고보면 변수를 직접 접근하는것과 별로 다를 게 없습니다
사람 몸통에는 위, 소장, 대장, 십이지장 등등 박혀있지만 결국 하는짓은 먹는다와 싼다로 귀결되는 걸 생각해보면
함수는 굳이 그렇게 많이 안만드셔도 됩니다
질문이 Getter / Setter 말씀 하시는건가요?
C++ 에서는 피해 갈 수 없을 텐데요 ... C#의 Properties를 흉내내서 하지 않는 이상 ...
근데 윗분 말씀대로 모든 변수에 다 접근을 한다는 것은 캡슐화가 덜 되었다는 징조이니,
설계를 다시 하셔야 할 것 같습니다.
getter / setter 는 어쩔 수 없어보입니다.
obj-c에서는 @synthesize로 자동으로 겟/세터를 만들어줍니다.
결국엔 똑같이 함수 2개가 만들어지는거죠..
#define DECLARE_VAR_GET_SET( type, name ) \
type name; \
inline type get_##name() { return name;}\
inline void set_##name( type var ) { name = var; }
class any_singleton
{
public:
DECLARE_VAR_GET_SET( int, any_number )
};
끗.
getter와 setter는 어쩔 수 없는 것이 아니라 어쩔 수 없는 경우에만 쓰는 것이고, 질문자님 말씀하신 대로 남용되어지고 있다고 생각되신다면 jindog님 말씀처럼 설계에 문제가 있는 것입니다.
어떤 멤버 변수를 다루는 로직을 그 멤버 변수가 속한 클래스가 아니라 밖에서 구현하고 있다던가 식으로 설계가 잘못되어 있다면 그런 상황이 필연적으로 생깁니다.
다시 말해서 클래스를 사용했지만 구현은 절차지향적으로 이뤄진 것이지요.
저도 지금 구현중인 프로젝트에서(게임은 아니고요) 싱글톤으로 데이터를 공유 중인데,
변수가 추가 될 때마다 답답해집니다.
분명 예전에 설계 패턴을 공부할 때 배웠던 거 같긴한데, 뒤져보니 패턴 책도 어디 갔는 지 안 보이고...
저도 같이 효과적인 방법에 대한 조언을 부탁드리겠습니다.