2011년 5월 25일 수요일

Double Descent(이중 하향 참조)

* 패턴이름 : 이중 하향 구조
* 증상 : 데이터 구조에 대해 재귀적으로 하향 참조하면서 ClassCastException이 발생한다.
* 원인 : 메소드 호출당 두 단계의 하향 참조가 일어나면 두번째 참조에 대해서는 적절하게 디스패치 하지 못한다.
* 해결책과 예방책 : 캐스팅 대신 별도의 메소드를 추가한다. 모든 경우에 대해서 캐스트가 제대로 될 수 있는지 생각해본다.

컴포지트된 데이터 구조가 있을때 보통 하나의 재귀적 호출에 대해 한 단계 이상의 하향 참조가 일어나서 발생하곤 한다.
이런식의 하향 참조에는 캐스트 연산을 하는 부분이 있기 마련이다. 하지만 이 캐스트 연산을 하는 곳에서 진짜로 이 캐스트 연산을 해도
되는지 검사하는 것을 잊어서는 안된다.
- 캐스팅을 없애는 데에는 각 클래스에 별도의 메소드를 추가해 넣는 방식을 사용할 수 있다.
- 각 캐스트 마다 instanceof연산자를 사용해서 문제를 해결할 수도 있다. 하지만 이 방법은 Tree의 모든 자식 클래스에 대해 검사를
해줘야 한다는 단점이 있으므로 별로 권하고 싶지 않다.
- instanceof를 사용하지 않으려면 별도의 메소드를 추가해 넣어 각 자식 클래스에서 자신에 맞는 동작을 취할 수 있도록 하면 된다.
이러한 방식은 객체 지향 언어의 주요한 장점 중 하나인 다형성을 이용한 것이다.

댓글 없음:

댓글 쓰기

ETL 솔루션 환경

ETL 솔루션 환경 하둡은 대용량 데이터를 값싸고 빠르게 분석할 수 있는 길을 만들어줬다. 통계분석 엔진인 “R”역시 하둡 못지 않게 관심을 받고 있다. 빅데이터 역시 데이터라는 점을 볼때 분산처리와 분석 그 이전에 데이터 품질 등 데이...