하기와 같은 코드에서
sp<ICameraService> Camera::mCameraService;
const sp<ICameraService>& Camera::getCameraService()
{
mCameraService = interface_cast<ICameraService>(binder);
}
템플릿 클래스 <ICameraService>가 사용된 곳들을 어떻게 해석하면 되는지요??
답글 부탁드립니다.
또한 템플릿 클래스를 사용하는 이유는 무엇인가요??
sp라는 객체가 템플릿으로 코딩되어 있나보네요.
템플릿의 사용목적은 사용자가 타입에 관계없는 컨테이너를 만들어 사용할 때 타입 안전성을 부여할 수 있도록 하는 것에 있구요..
흔히 템플릿을 사용하여 "일반화" 한다고 표현하는데.. 일반화 라는건 조작할 객체의 타입과 상관없이 코드를 작성하도록 하는 개념, 즉 템플릿의 한 응용 분야로 파생되었다고 보면 되겠습니다.
const sp<ICameraService>& Camera::getCameraService()
{
mCameraService = interface_cast<ICameraService>(binder);
}
이 코드를 보면 interface_cast 라는것을 사용하고 있죠.. 리턴타입이 sp<ICameraService> 인데 return 구문이 없네요..(왜없지-_-)
interface_cast 는 아마 dynamic_cast 가 typedef 된 형태로 생각되네요.. 부모 포인터를 바꿔서 캐스팅 해주는 겁니다. 상속관계일 경우에만 사용이 가능하구요.. 자세한건 dynamic_cast 를 찾아보면 될 것같네요. sp라는 객체가 무엇을 행하는 객체인지는 알 수 없습니다만, 객체가 어떠한 약속에 의해 행하는 내용들을 랩핑해 두고 템플릿 클래스로 활용하곤 하죠..




템플릿...참 이해하기 어려운 문법인데
잘쓰면 막강하지만
많이쓰면 가독성이 한없이 떨어지는..
꼬이고 꼬이고 복잡하게 만드는 주범 ㅋㅋㅋ
템플릿 관련해서는 요약해서 설명해 드리기가 힘드네요... 책을 보시는게.... ㄷㄷ