2011년 5월 25일 수요일

Dangling Composite(미결합 컴포지트)

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

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

댓글 없음:

댓글 쓰기

블록체인 개요 및 오픈소스 동향

블록체인(block chain) 블록체인은 공공 거래장부이며 가상 화폐로 거래할때 발생할때 발생할 수 있는 해킹을 막는 기술. 분산 데이터베이스의 한 형태로, 지속적으로 성장하는 데이터 기록 리스트로서 분산 노드의 운영자에 의한 임의 조작이 불가...