싱글톤 클래스의 단점 및 오버헤드는?


안녕하세요. C++, DirectX로 게임 개발하고있는 초보 개발자입니다.

저의 질문은 게임 뿐만아니라 소프트웨어 개발시에 여러가지 디자인 패턴이 적용되는데 그 중 Singleton은 전역변수 대신하여 어느 소스파일에서나 쉽게 접근하는 장점이 있는데 편하게 사용하는 만큼 단점은 별로 없는 것 같아요.

제가 아는 단점이라함은 인스턴스가 하나만 존재할 때 사용하여야 하는 정도. 제가 실제 게임에 적용하는 부분은 SceneManager나 BulletManager 등(이 외에도 여러 곳에서 사용 중입니다.)으로 주로 'Manager'라고 불리오는 객체? 로 사용하고 있습니다. 이는 하나의 인스턴스로 사용하기만 한다면 아무런 문제가 없는 것 같습니다.

어느 소스파일에서나 exturn 없이 GetInstance를 매크로로 정의하여 쉽게 접근하여 사용하는데 이때 발생하는 오버헤드는 클래스 멤버변수로 존재하는 것보다는 상식적으로 더 크다고는 생각합니다. 하지만 그 오버헤드가 미미할정도로 작다면 계속 사용할 예정인데 게임의 생명은 FPS다보니 이것 조차 무시할 수 없을 것 같네요.

무튼 결론은 싱글톤 패턴으로 사용하는 것의 단점이 뭐가있을까요? 또 이때 발생하는 오버헤드는 신경쓸만큼 존재하나요? 게임 개발 및 소프트웨어 개발시 싱글톤이 많이 사용되는지?

  • 2016년 04월 06일에 작성됨

조회수 372


2 답변


좋아요
2
싫어요
채택취소하기

멤버함수 호출하는 것 정도의 오버헤드를 걱정하시는 거라면
함수라는거 자체를 걱정하셔야 될겁니다.
미미의 수준도 아니고 없다의 수준이라고 보시는게 맞을 것 같네요.

굳이 단점이라고 한다면 그런 프로그램적인 문제가 아니라
해당 디자인 패턴의 단점을 찾아보시는게 빠를 것 같습니다.
예를 들면 싱글톤 객체간의 소멸 순서를 정할 수 없다거나.
(사실 방법이 없는건 아니지만...)
단위 테스트에 어려움이 있다는 것 정도?

  • 2016년 06월 01일에 수정됨
    AI, Game, Simulation 코드작성을 좋아합니다.
  • 2016년 04월 06일에 작성됨
    AI, Game, Simulation 코드작성을 좋아합니다.


마지막 문장에 대해서만 답변해드리자면 싱글톤은 특별한게 아닙니다. 객체지향 프로그래밍에서 유별나 보이는 것 뿐이지 가장 기본적인 패턴이에요. API에선 싱글톤이 가장 많이 쓰이는 패턴이기도 하구요.


로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close