안드로이드 개발 질문/답변
(글 수 45,052)
현재 HttpURLConnection을 보고 있습니다.
그런데 그냥 URLConnection 객체를 쓰려면
URLConnection urlConnection = url.openConnection();
을 하면 얻을 수 있더군요..
그런데 HttpURLConnection을 얻으려면
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
이렇게 얻어야되는데..
분명
url.openConnection();은 URLConnection 객체를 리턴해주는거 같은데..
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
이렇게
HttpURLConnection 으로 강제 형 변환하면 어떤점이 달라지게 되는건가요?
그냥 URLConnection의 객체로 HttpURLConnection의 기능들을 다 사용할수 있지 않나요?
URLConnection이 HttpURLConnection의 부모이기 때문에 가능하지 않나요?
뭣하러 HttpURLConnection으로 형변환을 해서 쓰는지 갑자기 헷갈립니다.
그냥 HttpURLConnection의 기능도 URLConnection의 객체를 이용하여 사용하면 안되나요?
2012.10.16 23:14:48
HttpURLConnection은 URLConnection을 상속받았고 http관련 처리를 추가한 객체입니다.
예를들어서 URLConnection을 동물이라고 하고 HttpURLConnection을 사람이라고 한다면
동물은 움직이기, 소리내기 등의 기능이 있습니다.
하지만 사람은 동물의 특성인 움직이기와 소리내기 뿐만 아니라 말하기, 공부하기 등의 추가 기능이 있습니다.
그렇다면 사람은 동물을 상속받아서
움직이기를 사용할 수 있게 되고,
소리내기를 재정의하여 말하기를 할 수 있게 할 수 있으며
사람만의 특성인 공부하기 기능을 추가할 수 있습니다.
즉 동물 객채는 동물.움직이기, 동물.소리내기 이지만
사람 객체는 사람.움직이기, 사람.소리내기(말하는 기능으로 재정의 된), 사람.공부하기
와 같이 객체가 접근할 수 있는 범위가 다른 것인거죠.
( (동물)사람객체 ) << 이와 같이 타입캐스트 된 객체는 동물 객체가 사용할 수 있는 기능만 사용할 수 있으며
( (사람) 동물객체 ) << 이와 같이 타입캐스트 된 객체는 사람 객체가 사용할 수 있는 메소드에 접근하는 방법을 알지만(코드상으로) 에러가 나겠죠.
부모는 자식의 메쏘드에 접근할 수 없습니다.
자식만이 부모의 메쏘드에 접근할 수 있어요.
메모리 관점으로 보면 부모의 메모리 크기는 부모에서 선언한 크기만큼만 되고 자식은 부모의 메모리크기에 +@ 로 몇개의 메쏘드만큼의 메모리를 할당한 것입니다. 따라서 부모는 자식만큼의 메모리를 가지고 있지 않기 때문에 자식의 메쏘드에 접근할 수 없지요..
라고 어떤 책에서 이렇게 설명했는데 전 이게 제일 이해하기 쉬운 설명이더라고요.