본문 바로가기
공부/TIL•기타

Deprecated

by svcbn 2025. 11. 7.

11/18

 

개발을 하면서 함수에 function() 이렇게 줄이 그어져있는 경우를 본 적 있을 것이다. 이는 더 이상 사용을 지양하도록 안내하는 것으로, 다양한 것들의 더 이상 사용을 권장하지 않는 deprecation 의 분사형으로 시작되었기 때문에 사실 마땅히 번역이 일치하는 단어는 존재하지 않는다. 적당히 요약하면, 더 이상 사용되지 않음

Deprecated 처리를 하는 이유는 다양하다. 버그가 있거나, 보안 취약점이 발견되거나, 최신 버전에서 설계의 변화가 생겼거나, 해당 기능이 이미 Deprecated 된 다른 기능과 연관되어 있다거나 등등.. 으로,
다음 버전에서 지원이 삭제되거나 할 수 있으므로 사용하지 않도록 안내 하는 역할인 것이다.

왜 바로 삭제해버리지 않나.. 하는 의문이 있을 수도 있는데, 이미 stable 한 상태의 배포 버전에 사용되었을 경우, 일괄 변경이 오히려 호환되고 있는 다른 곳들에서 문제를 일으킬 수 있기 때문에 임시방편적인 조치라서 그렇다. deprecated 를 작성하면서 새로 변경이 된 기능 쪽으로 안내하여 작성하도록 권장한다.

정리하자면,
1. 당장은 지우지는 않으나, 변경이 생길 예정이니 사용을 비권장하는 것.
2. 해당 기능이 사용된 모든 곳을 직접 수정하기 곤란할 때, 안내의 용도.


언어별로 사용하는 방법들도 조금씩은 다른데, 몇 가지만 알아보면

C++[[deprecated]] 로 사용한다.

// 변수 deprecate하기
[[deprecated]]
int deprecated_variable;

// 함수 deprecate하기
[[deprecated]]
void deprecated_function([[deprecated]] int deprecated_parameter) {} // 함수 파라미터 deprecate하기

// 타입 정의 deprecate하기
[[deprecated]]
typedef int deprecated_typedef;

// 클래스, 구조체, enum 등 deprecate하기
class [[deprecated]] deprecated_class {
	public:
		// 멤버 및 메서드 deprecate하기
		[[deprecated]] int deprecated_member;
};

// deprecate 사유 추가하기
[[deprecated("본 함수는 다음과 같은 이유로 사용이 권장되지 않습니다.")]]
void deprecated_function2() {}
// warning: 'deprecated_function2' is deprecated: 본 함수는 다음과 같은 이유로 사용이 권장되지 않습니다.

 

JavaScript 는 언어에서 지원하지 않아, jsDoc 을 사용

/**
 * @deprecated 'newVariable'을 사용하세요.
 */
const deprecatedVariable = "사용되지 않는 변수";
const newVariable = "새로운 변수";

/**
 * @deprecated 'newFunction'을 사용하세요. 이 함수는 v2.0.0에서 제거될 예정입니다.
 */
function oldFunction() {
  console.log("사용되지 않는 메서드");
}

function newFunction() {
  console.log("새로운 메서드");
}

/**
 * @deprecated 'NewClass'를 사용하세요.
 */
class OldClass {
  constructor() {
    console.warn("사용되지 않는 클래스");
  }
}

class NewClass {
  newMethod() {
    console.log("새로운 클래스");
  }
}

 

번외로, 예전에 공부했던 C#[Obsolete], ObsoleteAttribute 클래스 를 사용한다. 쓸모없게 된 이라는 뜻.

// Mark OldProperty As Obsolete.
   [ObsoleteAttribute("This property is obsolete. Use NewProperty instead.", false)]
   public static string OldProperty
   { get { return "The old property value."; } }

   public static string NewProperty
   { get { return "The new property value."; } }

   // Mark CallOldMethod As Obsolete.
   [ObsoleteAttribute("This method is obsolete. Call CallNewMethod instead.", true)]
   public static string CallOldMethod()
   {
      return "You have called CallOldMethod.";
   }

   public static string CallNewMethod()
   {
      return "You have called CallNewMethod.";
   }
   
// The attempt to compile this example produces output like the following output:
//    Example.cs(31,25): error CS0619: 'Example.CallOldMethod()' is obsolete:
//            'This method is obsolete. Call CallNewMethod instead.'
//    Example.cs(29,25): warning CS0618: 'Example.OldProperty' is obsolete:
//            'This property is obsolete. Use NewProperty instead.'

 

이렇게 Deprecated 된 기능들은 가운데줄도 그어지고, 경고 로그가 뜨기도 하고, 컴파일러가 경고하기도 하고 하지만 기본적으로는 기능상으로 기존과 전혀 다름 없이 동작한다. 계속 사용은 할 수 있으나, 언젠가는 무조건 사라질 예정이니 확실하게 체크해서 대응하도록 하자. 반대로 사라질 것을 안내해주는 착한 개발자가 되거나??

'공부 > TIL•기타' 카테고리의 다른 글

편한 유지보수를 위한 방법론  (0) 2025.11.13
문서 객체 모델(DOM)  (0) 2025.11.10
SRMD  (0) 2025.11.06
개발 반성회  (1) 2025.11.05
SQL  (0) 2025.01.05