Singleton 관련 질문입니다.
12
6 asked
안녕하세요.
먼저는 기억하기 어려울 수도 있는 부분을 잘 정리하시고 전달해주셔서 감사합니다.
명쾌한 설명과 구조 정리 덕분에 명쾌하게 이해할 수 있는 것 같습니다.
구조와 테스트 면에서 제가 잘 몰라서 궁금한 부분에 대해 여쭤보고 싶습니다.
Singleton 구현을 보다가 문득 생각이 드는 부분이 있었습니다.
GameEngine을 만들 때 생성자를 public으로 만드셨는데 이 부분에서
API를 가져다 쓰는 입장을 생각하면 생성자를 private으로 만들고 Get만 공개하는 것이 더 안전하지 않았을까 하는 생각이 들었습니다.
두 번째로는 이런 전역 객체는 어떻게 테스트 하는가 입니다.
테스트도 마땅히 들어가야 할 것으로 알고 있는데 이 부분은 뒤에 나오겠지요?
Answer 2
1
안녕하세요.
좋은 질문 남겨주셔서 감사합니다!
먼저 Engine 생성자 관련해서 답변드리면, 말씀해주신 것처럼 “완전히 통제된 API” 관점에서는 생성자를
private으로 두고Get()만 통해 접근하게 만드는 방식이 더 안전할 수 있습니다.
다만 강의 프로젝트에서는 Engine을 “내부에서 스스로 생성되는 전통적인 싱글톤”보다는, 외부에서 하나 생성하고 전역으로 접근할 수 있게 만든 구조에 가깝게 구현했습니다. 실제로 예제에 따라Engine engine;처럼 직접 생성해서 사용하는 경우도 있고,Game : public Engine처럼 상속해서 확장하는 형태도 함께 사용하고 있습니다.
이런 구조를 단순하게 보여드리려다 보니 생성자를public으로 두었습니다. 대신 생성자 내부에서assert(!instance)로 하나만 생성되도록 방어하고,Get()으로 전역 접근을 제공하는 방식으로 구성했습니다.두 번째로 테스트에 대해서 말씀드리면, 현재 강의 프로젝트에서는 테스트 친화적인 구조까지는 의도적으로 가져가지는 않았습니다.
말씀하신 것처럼 전역 객체나 싱글톤은 테스트가 까다로운 편이고, 실무에서는 보통 이런 전역 의존성을 인터페이스나 일반 객체 단위로 분리해서 테스트 가능한 구조로 가져가는 경우가 많습니다.
다만 강의에서는 테스트, 예외 처리, 의존성 분리까지 모두 반영하면 코드베이스가 빠르게 복잡해질 수 있어서, “게임 엔진 프레임워크의 기본 구조를 이해하는 것”에 집중하는 방향으로 단순화했습니다.
질문 주신 내용에 대해 답변을 드렸는데요.
답변이 부족했거나 더 궁금한 점이 있으시면 편하게 댓글 남겨주세요. 감사합니다!
1
친절하고 자세하게 답변해주셔서 감사합니다.
전문가의 답변은 논리적이고 확실히 일반적인 나열 구조와는 다르네요.
2번 답변은 이해가 되지만 경험을 해보고 싶은 마음이 있어서 후속작에서라도 살짝 경험을 해보면 좋겠네요.
구조를 잘 설명하시고 명확하게 하셔서 개인적으로 되게 좋았습니다. 블로그 글도 많이 작성하신 것 같아 참고하면 공부가 잘 될 것 같습니다.
저는 비록 게임 개발쪽은 아니지만 어떻게 엔진을 작성하는가에 대해서는 궁금증이 있었습니다.
전문가여서 그런지 구조를 훤히 알고 설명해주셔서 감이 빠르게 옵니다.
혹시 테스트, 통신, 또는 소프트웨어 설계의 관점(UML이나 구조도)에서 지금처럼 잘 설명해주시는 강의를 따로 만드실 의향이 있으신지 궁금합니다.
기획과 성능 테스트 등에 대해서 시리즈 강의 잘 만드실 수 있는 분으로 보입니다.
1
좋게 봐주셔서 감사합니다.
지금 강의는 게임 엔진의 핵심 구조를 직접 구현하고 이해하는 데 초점을 둔 강의라서, 테스트나 통신, UML/구조도 중심의 소프트웨어 설계까지는 범위를 넓히지 않았습니다.
말씀해주신 주제들은 저도 중요하다고 생각합니다. 다만 그 영역까지 들어가면 강의 난이도와 복잡도가 꽤 올라가기 때문에, 별도의 주제로 잘 정리해서 다루는 편이 더 적절할 것 같습니다.
아직 구체적으로 계획한 것은 없지만, 이런 방향의 강의 수요가 있다는 점은 의미 있게 보고 있습니다. 후속 강의를 기획하게 된다면 말씀해주신 테스트, 설계 관점, 구조 설명 같은 부분도 함께 고려해보겠습니다.
참고로 커스텀 RTTI의 경우에도 강의 예제는 가능한 선에서 최대한 단순하게 구현을 했습니다. 타입을 비교하는 과정에 집중을 하기 위해서 였습니다. RTTI의 더 고급 내용은 최근 제 블로그에 포스팅으로 연재를 해두었습니다.
첫 질문 남겨주신 점도 개인적으로 감사하게 생각하고 있습니다. 좋은 질문과 의견 남겨주셔서 감사합니다.
코드 자료
0
15
2
2-I) 왜 이 문제가 그래프이론 카테고리에 있는지 잘 모르겠습니다.
0
47
2
AddGameFrameworkComponentReceiver vs AddExtensionHandler
0
22
0
2주차 개념#12 트리 순회
0
24
2
백준 사이트 서비스 종료
0
105
3
질문있습니다
0
25
1
1번 문제 질문입니다.
0
31
1
라우팅 테이블 설정 중 궁금한게 있습니다.
0
34
1
음악플레이어 문제 중 코드질문
0
26
1
user-service jwt
0
31
2
애그리거트 질문있습니다!
0
29
2
프로젝트 질문 문의
0
45
1
문제와 풀이4 문제점
0
40
2
백준사이트가 종료된다고 합니다.
0
270
2
Redlock 알고리즘 관해 궁금한게 있습니다!
0
41
2
문제와 풀이
0
23
1
문제풀이 시간마다 방향성
0
38
2
맵핑부분..
0
32
2
백준 서비스 종료
9
861
1
좋아요/조회수 카운팅 병목현상에 대해서 궁금한점이 있습니다.
0
33
2
Agent Builder 서비스가 보이지 않아요
0
28
1
레이어드 아키텍처에서 도메인 중심 패키지 구조를 적용하거나 변화하는 시점이 있을까요?
1
39
2
LobbyUIController의 백키가 사라졌는데 왜그런건가요?
0
40
2
무조건 타이틀 씬부터 시작해야하나요?
0
39
1

