우리가 RTTI와 Down Casting을 쓰지 말아야 하는 이유.

머 다들 알고 있겠지만, 오늘 수업중에 나와서 간단히 적어 두려고 한다.

요런 관계일때
class Child extends Parents{...}
...

클라이언트 코드가 아래와 같다면
Parent p = new Child();
...


이제 자식이 새로 생기더라도
class GoodChild extends Parents{..}

클라이언트 코드는 변함 없이 계속 쓸수 있다.

그런데 만약 클라이언트 코드에서 RTTI나 Down Casting을 사용한다면,
Parent p = new Child();
...
if( p instanceof Child) {..} //RTTI
...
Child c = (Child)p; //Down Casting
...
이런 짓을 하면 이 클라이언트 코드는 GoddChild가 왔을때,
사용 불가능 하기 때문이다!
머 아는 사람들은 다 아는 기초적인 내용이지만 정리 차원에서...쿨럭


by bada | 2005/04/27 15:23 | 개발 관련 | 트랙백 | 덧글(3)

트랙백 주소 : http://finl.egloos.com/tb/983429
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by 이민 at 2005/04/27 18:33
그렇삼....OOP는 OOP답게 쓰자...는.. lesson인가!
흠!! OOP써본지 넘 오래됬다..oTL
Commented by 멍뭉 at 2005/04/28 11:22
제발 안써줬음 좋겠어. 도대체 먼소린지 알아야 말이지!! -_ㅜ
Commented by 1stpasa at 2008/08/12 03:12
안녕하세요~ 다른자료를 찾다가 들르게 되었네요ㅋ
혹시나 해서 사족을 좀 달아볼까 하구요 ^^

우선 위같은 경우는 try~ catch 문으로 처리가 가능합니다.

Down Casting의 경우 포인터 타입으로 dynamic casting 할때는 NULL 포인터를
반환받아서 체크할수 있기 때문에 실제 캐스팅이 가능한 타입인지 여부를
알수있어서 유용하지요.

다만 포인터가 아닌경우에 Casting이 불가능하다면 일반적으로 뻗어버리게 되는데요
try~ catch를 사용하여 exception handling을 해주면 안전하게 처리할수 있습니다.

:         :

:

비공개 덧글

◀ 이전 페이지          다음 페이지 ▶