2006. 6. 14. 19:39
초기 개발 단계에서는 탄탄하게 구성되어있던 클래스와 함수 들이 시간이 지나고 기능이 추가되면서 코드가 꼬이기 시작하는 현상은 어느 개발자나 겪고 있는 상황일 것이다.
개인적으로 싹 뒤집어 엎고 새로 설계해서 정리하고 메이저 버전을 올리는 것을 좋아하지만.. 불행하게도 대부분의 현실에서는 그런 것을 쉽게 용납하지 않는다. 그래서 클래스의 버전관리에서 유용하게 사용하는 Obsolete 특성을 소개한다.
프로그램 엔티티에 Obsolete 특성을 붙이면 컴파일 시에 오류 혹은 경고 메시지로 알려주게 된다. 아래 이미지는 .NET 버전이 2.0으로 업그레이드되면서 네임스페이스가 변경된 IsClientScriptBlockRegistered 메서드에 대한 경고이다.
혼자 개발을 해도 클래스가 변경된 내용을 모두 확인 하기는 어렵다. 클래스를 여러 명이 사용할 경우 더 혼란스러운 것이 사실이다. 그럼 우리가 만든 클래스를 사용하는 다른 개발자들의 혼란을 제거하기 위해 오래된 함수와 클래스에 더 이상 사용하지 말라는 안내문구와 경고를 함께 보여주는 친절한 개발자로 변해보자.
Obsolete는 ObsoleteAttribute에 대한 별칭으로, 단일 사용 특성이며 특성이 허용되는 임의의 엔티티에 적용할 수 있다. Obsolete 특성은 인수 없이 사용할 수 있지만 해당 항목이 계속 사용되지 않는 이유와 대신 사용할 항목에 대한 정보를 포함하는 것이 좋다. - MSDN에서 이렇게 말한다.
사용법
[System.Obsolete("use class B")]
class A
{
public void Method() { }
}
class B
{
[System.Obsolete("use NewMethod", true)]
public void OldMethod() { }
public void NewMethod() { }
}
Obsolete("보여줄 메시지", 오류여부);
오류여부를 true 로 설정 하면 컴파일 시에 오류가 발생하고, false로 설정하면 경고만 보여준다. 기본값 false
즉, 위 예제에서 A 클래스를 사용하면 경고와 함께 "use class B" 라는 메시지를 출력하게 된다.
그리고 B 클래스의 OldMethod() 를 사용하면 "use NewMethod" 라는 메시지와 함께 오류 메시지를 출력 하게 된다.
이렇게 해서 Ver. 2.x를 구현하고, 다음 Ver. 3.x 정도에서는 해당 클래스와 메서드들을 제거해도, 이미 우리 개발자들은 해당 클래스를 이미 새 클래스로 변경해서 크게 당황하지 않을 것이다.
이로서 우리는 조금 더 친절한 개발자로 거듭나게 되었다. ^^