MIR Engine
미래 지향 설계에 초점을 맞춘 자체 제작 게임 엔진
로딩중...
검색중...
일치하는것 없음
MIR::ServiceLocator 클래스 참조

다양한 서비스(인터페이스 구현체)를 등록하고 조회하는 Service Locator 클래스 더 자세히 ...

#include <ServiceLocater.hpp>

Public 멤버 함수

template<typename ServiceType >
void RegisterService (std::shared_ptr< ServiceType > service)
 특정 타입의 서비스를 등록하는 템플릿 메서드
 
template<typename ServiceType >
std::shared_ptr< ServiceType > GetService ()
 특정 타입의 서비스를 조회하는 템플릿 메서드
 
template<typename ServiceType >
bool HasService () const
 특정 타입의 서비스 등록 여부를 확인하는 템플릿 메서드
 

정적 Public 멤버 함수

static ServiceLocatorInstance ()
 ServiceLocator 인스턴스를 전역적으로 접근하기 위한 정적 메서드
 

상세한 설명

다양한 서비스(인터페이스 구현체)를 등록하고 조회하는 Service Locator 클래스

ServiceLocator는 싱글턴 패턴으로 생성, 필요에 따라 여러 타입의 서비스를 동적으로 등록하고, 다른 곳에서 쉽게 조회할 수 있도록 함.

이 클래스를 통해 서비스 의존성을 간단히 해결할 수 있으나, 의존성 역전 원리나 의존성 주입 방식에 비해 의존 관계가 명확히 드러나지 않을 수 있으므로 주의.

멤버 함수 문서화

◆ GetService()

template<typename ServiceType >
std::shared_ptr< ServiceType > MIR::ServiceLocator::GetService ( )
inline

특정 타입의 서비스를 조회하는 템플릿 메서드

템플릿 파라메터
ServiceType조회할 서비스 타입
반환값
std::shared_ptr<ServiceType> 요청한 서비스에 대한 공유 포인터
예외
std::runtime_error서비스가 등록되어 있지 않을 경우 예외 발생

서비스 존재시 정적 캐스팅하여 반환, 없으면 예외 던짐.

83 {
84 auto it = services.find(typeid(ServiceType));
85
86 if (it != services.end())
87 return std::static_pointer_cast<ServiceType>(it->second);
88 else
89 throw std::runtime_error("Service not found!");
90 }

◆ HasService()

template<typename ServiceType >
bool MIR::ServiceLocator::HasService ( ) const
inline

특정 타입의 서비스 등록 여부를 확인하는 템플릿 메서드

템플릿 파라메터
ServiceType확인할 서비스 타입
반환값
true 서비스가 등록되어 있음
false 서비스가 등록되어 있지 않음

services 맵을 조회하여 ServiceType 키가 존재하는지 확인.

103 {
104 return services.find(typeid(ServiceType)) != services.end();
105 }

◆ Instance()

static ServiceLocator & MIR::ServiceLocator::Instance ( )
inlinestatic

ServiceLocator 인스턴스를 전역적으로 접근하기 위한 정적 메서드

싱글턴 패턴을 사용하여 전역에 유일한 ServiceLocator 인스턴스 제공.

반환값
ServiceLocator& 전역적으로 접근 가능한 ServiceLocator 참조
52 {
53 static ServiceLocator instance;
54 return instance;
55 }

◆ RegisterService()

template<typename ServiceType >
void MIR::ServiceLocator::RegisterService ( std::shared_ptr< ServiceType > service)
inline

특정 타입의 서비스를 등록하는 템플릿 메서드

템플릿 파라메터
ServiceType등록할 서비스 타입
매개변수
service공유 포인터 형태로 제공되는 서비스 구현체

typeid(ServiceType)를 키로 하는 맵에 service 저장. 이후 다른 곳에서 GetService<ServiceType>()를 통해 서비스 조회 가능.

68 {
69 services[typeid(ServiceType)] = service;
70 }

이 클래스에 대한 문서화 페이지는 다음의 파일로부터 생성되었습니다.: