안드로이드 개발 질문/답변
(글 수 45,052)
private ConnectivityManager mgr = null;
mgr = (ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE);
위의 코드는 커넥티비티매니저를 얻는 코드입니다. 맞져?
그런데 2번재 줄에서 보시면
형변환을 해서 받고 있습니다.
그래서 getSystemService메서드를 보니 String값을 파라미터로 넘기고
해당되는 객체를 Object형태로 리턴해주더라구요.
근데 여기서 궁금한게 왜 하필 오브젝트 형태로 리턴해줘서 번거롭게 형변환하게 만드는거죠?
그냥 바로 쓸수있게 ConnectivityManager 객체를 생성해서 리턴해주면 편하지 않을까요?
제가 아직 자바의 드넓은 심해를 이해하지 못한것 같습니다.
가르침을 주십시오.
2012.10.16 09:53:53
바로 ConnectvitiyManger 객체를 리턴 하도록 되어 있으면, 사용하는 입장에서는 편할 수도 있지만, 관리하는 입장에서는 유지 보수가 번거로울 것 같아요. getSystemService()가 호출 될 때마다 문자열 검사를 해야 하구요. if else 문이 많이 들어가게 되고, 새로운 서비스가 추가되면 else if문도 하나 추가해야하는 번거로움도 있구요.
하지만 현재처럼 관리를 하면 관리하는 쪽에서는 if else문도 필요가 없을 뿐더러, 새로운 서비스가 추가되더라도 getSystemService() 함수 내용은 새로 추가되는 부분이 없어서 확장할 때도 편할 것 같아요.
도움말을 보시면 이유를 추정할 수 있습니다.
인수 자리에 CONNECTIVITY_SERVICE 일때만 ConnectivityManager 형을 반환 하는것이고 다른 인수면 다른 class 를 반환합니다.
getConnectivityManager () 라는 함수가 있다면 형변환 없이 사용할 수 있겠지만
그러자면 getWindowManager, getLayoutInflater, getPowerManager 등등 수십개의 유사한 함수를 제공해야 합니다.