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

조회수 2794회

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

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

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

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

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

2 답변

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

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

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

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)