다음을 통해 공유


배포 후 기본 클래스 디자인 변경 사항

업데이트: 2007년 11월

클래스 계층 구조를 약간만 변경해도 의도하지 않던 결과가 발생할 수 있으므로 클래스 계층 구조를 배포한 후에는 변경하지 않는 것이 좋습니다. 그러나 실제로는 이러한 변경이 불가피할 때도 있습니다. 즉, 제품 요구 사항이 달라질 수 있으며 디자인 사양에 핵심 요소가 빠지는 경우도 있습니다. 상속 문제의 여러 범주 중 하나가 손상되기 쉬운 기본 클래스 문제입니다.

손상되기 쉬운 기본 클래스 문제

상속 계층 구조를 사용할 때 나타나는 주요 문제점은 손상되기 쉬운 기본 클래스 문제입니다. 기본 클래스를 변경하면 경우에 따라 기본 클래스 및 파생 클래스의 모든 코드를 변경하고, 다시 컴파일하고, 다시 배포해야 합니다. 이러한 문제점은 여러 개발자가 기본 클래스 및 파생 클래스를 작성할 때 더욱 두드러집니다. 왜냐하면 각 개발자가 자신의 소스 코드에 대한 액세스를 거부할 수 있기 때문입니다. 최악의 경우, 고객이 실수로 파생 클래스의 원본 및 호환되지 않는 이진 버전과 업데이트된 기본 클래스의 컴파일된 이진 형식을 함께 사용할 수도 있습니다.

파생 클래스를 손상시킬 수 있는 기본 클래스 변경 작업에는 기본 클래스 멤버의 데이터 형식을 재정의하거나 변경하는 경우가 포함됩니다.

손상되기 쉬운 기본 클래스 문제 최소화하기

손상되기 쉬운 기본 클래스 문제를 피하는 가장 좋은 방법은 파생 클래스만 변경하는 것입니다. 그러나 기본 클래스가 먼저 릴리스될 경우에는 모든 가능성을 고려해야 하므로 이와 같이 파생 클래스만 변경하는 방법이 항상 가능한 것은 아닙니다. 불가피하게 기본 클래스를 갑자기 변경해야 하는 경우도 발생할 수 있기 때문입니다.

MustInherit 클래스와 MustOverride 메서드를 사용하면 구현 세부 사항이 파생 클래스로 이동하게 되고 기본 클래스를 변경해야 할 필요가 줄어들기 때문에 손상되기 쉬운 기본 클래스 문제를 줄이는 데 도움이 됩니다. 그러나 완벽하게 계획된 경우라 할지라도 항상 이렇게 할 수 있는 것은 아닙니다.

파생 클래스에 숨겨진 데이터 멤버도 기본 클래스 멤버와의 이름 충돌을 줄여 주므로 도움이 됩니다.

기본 클래스의 기능을 확장하는 가장 안전한 방법은 새 멤버를 추가하는 것입니다. 새로운 멤버로 인해 기본 클래스가 손상될 수 있는 유일한 경우는 파생 클래스가 Overloads 키워드를 사용하여 기본 클래스에서 메서드를 상속하고 같은 이름의 새 메서드를 추가하는 경우입니다. 기본 클래스에서 상속하려는 기본 클래스 메서드를 파생 클래스에서 명시적으로 지정한 다음 해당 클래스에 위임하면 이러한 문제를 피할 수 있습니다.

모든 기본 클래스는 어느 정도 손상될 가능성이 있습니다. 그러므로 손상되기 쉬운 기본 클래스 문제를 제거할 수는 없지만 기본 클래스를 변경할 필요를 줄이도록 클래스 계층 구조를 신중하게 디자인하고 이러한 변경이 불가피할 경우에는 철저한 테스트를 수행하여 문제를 최소화할 수 있습니다.

참고 항목

참조

Shadows

기타 리소스

상속 계층 구조 디자인