2011년 5월 25일 수요일

Dangling Composite(미결합 컴포지트)

* 패턴 이름 : 미결합 컴포지트
* 증 상 : 재귀적으로 정의된 데이터 타입을 사용하는 코드에서 NullPointerException이 발생한다.
* 원 인 : 데이터 타입이 자기 자신의 데이터 타입을 재귀적으로 정의하고 있을 때
정의부에서 원래 데이터 타입의 인스턴스가 아닌 "null"이 할당되기 때문이다. 이렇게 정의된 데이터 타입을 사용하는 코드는
상황에 따라 제대로 동작할 수도 있지만, 그렇지 않을 수도 있다.
* 해결책과 예방책 : 재귀적으로 데이터 타입을 정의 할때에는 null이 아니라, 자기 자신의 데이터 타입을 참조하도록 코드를 작성 한다.
(미결합 컴포지트 버그 패턴은 컴포지트 패턴을 어설프게 적용한 경우에 발생한다.
컴포지트 패턴을 사용하면 트리와 같은 복잡한 객체를 재귀적으로 정의 할수 있다.
이 패턴을 사용하면 트리안의 모든 객체를 공통된 부모 클래스 혹은 인터페이스를 사용하여 접근 할수 있게 되므로
코드를 일관된 방식으로 사용할 수있다는 장점이 있다.)

@ NOTE
단순해서 좋다고 생각하는 코드가 실제로는 단지 착각에 불과한 경우가 있다.
무엇이 단순한가의 기준은"코드의 양" 무엇이 더 버그를 쉽게 피할 수 있게 해주는가"가 되어야 한다.
빈 리스트를 널 포인터로 표현하는 방식은 빈 리스트에 어떠한 원소도 집어 넣을 수 없게 만들기에 별로 좋은 방법이 아니다.
또한, 빈 리스트에 대해 equals()메쏘드를 사용하면 NullPointerException이 발생하게 되는 문제도 있다.
가장 쉬운 해결책이자 좋은 예방책은 각 상태를 나타내는 클래스를 정의 하는 것이다.
또한 단위 테스트를 적절히 이용한다면 버그의 가능성을 줄일 수 있다.

댓글 없음:

댓글 쓰기

ETL 솔루션 환경

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