[java] Java에서 더 이상 사용되지 않는 메소드 또는 클래스를 사용하는 것이 잘못 되었습니까?

웹 응용 프로그램을 개발하기 위해 이클립스를 사용하고 있습니다. 바로 오늘 JAR 파일을 변경하여 struts 버전을 업데이트했습니다. 메소드가 더 이상 사용되지 않는다는 경고가 표시되지만 코드는 제대로 작동합니다.

몇 가지를 알고 싶습니다

  1. Java에서 더 이상 사용되지 않는 메소드 또는 클래스를 사용하는 것이 잘못 되었습니까?

  2. 방법을 변경하지 않고 경고 메시지와 함께 응용 프로그램을 실행하면 성능 문제가 발생합니까?



답변

1. Java에서 더 이상 사용되지 않는 메소드 또는 클래스를 사용하는 것이 잘못 되었습니까?

에서 사용되지 않는의 정의 :

@Deprecated로 주석이 달린 프로그램 요소는 일반적으로 위험하거나 더 나은 대안이 있기 때문에 프로그래머가 사용하지 않는 것이 좋습니다.

이 방법은 지정되지 않은 기간 동안 이전 버전과의 호환성을 위해 API에 유지되며 향후 릴리스에서 제거 될 수 있습니다. 즉, 그것은 틀린 것이 아니지만 API를 변경하는 데 더 강력한 방법이 있습니다.

2. 메소드를 변경하지 않고 경고 메시지와 함께 애플리케이션을 실행하면 성능 문제가 발생합니까?

아마도 아닙니다. 지원 중단 전과 같이 계속 작동합니다. API 방법의 계약은 변경되지 않습니다. 일부 내부 데이터 구조가 새롭고 더 나은 방법으로 변경되면 성능에 영향을 줄 수 있지만 그럴 가능성은 거의 없습니다.


재미있는의 중단 자바 API에서는,이 IMO입니다 FontMetrics.getMaxDecent. 지원 중단 사유 : 맞춤법 오류

더 이상 사용되지 않습니다. JDK 버전 1.1.1부터 getMaxDescent ()로 대체되었습니다.


답변

성능이 변경되지 않고 더 이상 사용되지 않는 코드를 계속 사용할 수 있지만 메소드 / 클래스를 더 이상 사용하지 않는 요점은 사용자에게 더 나은 사용 방법이 있음을 알리고 향후 릴리스에서 더 이상 사용되지 않는 코드가 제거 될 수 있다는 것입니다.


답변

술어

공식 Sun 용어집에서 :

deprecation : 더 이상 권장되지 않으며 향후 버전에서 더 이상 존재하지 않을 수있는 클래스, 인터페이스, 생성자, 메소드 또는 필드를 나타냅니다.

사용 방법과 사용 중단 시점에 이르기까지 :

“자기 폐지 유머”또는 화자의 중요성을 최소화하는 유머라는 용어를 들어 보셨을 것입니다. 더 이상 사용되지 않는 클래스 또는 메소드는 이와 같습니다. 더 이상 중요하지 않습니다. 실제로 중요하지 않으므로 더 이상 사용하지 않아야합니다. 대체되지 않았으며 앞으로는 더 이상 존재하지 않을 수 있습니다.

@Deprecated주석이 한 단계 더 가서 위험을 경고 :

주석 @Deprecated이 달린 프로그램 요소 는 일반적으로 위험 하거나 더 나은 대안이 있기 때문에 프로그래머가 사용하지 않는 것입니다 .

참고 문헌


옳고 그름?

더 이상 사용되지 않는 방법을 사용하는 것이 옳고 그른지에 대한 질문은 개별적으로 검사해야합니다. Effective Java 2nd Edition 에서 “deprecated” 라는 단어가 나오는 모든 인용문 은 다음과 같습니다 .

항목 7 : 피니셔를 피하십시오 : 피니셔를 보장한다고 주장하는 유일한 방법 System.runFinalizersOnExit은 악한 쌍둥이 Runtime.runFinalizersOnExit입니다. 이 방법은 치명적인 결함이 있으며 더 이상 사용되지 않습니다.

항목 66 : 변경 가능한 공유 데이터에 대한 액세스 동기화 : 라이브러리가 Thread.stop메소드를 제공 하지만이 메소드는 본질적으로 안전하지 않기 때문에 더 이상 사용되지 않습니다. 사용하면 데이터가 손상 될 수 있습니다.

항목 70 : 문서 스레드 안전성 :이 System.runFinalizersOnExit메소드는 스레드에 적대적이며 더 이상 사용되지 않습니다.

항목 73 : 쓰레드 그룹 피하기 : 특정 Thread프리미티브를 한 번에 여러 쓰레드에 적용 할 수 있습니다 . 이러한 기본 요소 중 일부는 더 이상 사용되지 않으며 나머지는 자주 사용되지 않습니다. […] 스레드 그룹은 더 이상 사용되지 않습니다.

따라서 적어도 위의 모든 방법을 사용하면 적어도 Josh Bloch에 따르면이 방법을 사용하는 것은 분명히 잘못되었습니다.

다른 방법을 사용하면 문제를 개별적으로 고려하고 더 이상 사용되지 않는 이유 를 이해해야 하지만 일반적으로 더 이상 사용하지 않기로 한 결정이 정당화되면 계속해서 사용하는 것이 옳은 것보다 잘못되는 경향이 있습니다.

관련 질문


답변

위의 모든 훌륭한 응답 외에도 더 이상 사용되지 않는 API 호출을 제거 해야하는 또 다른 이유가 있습니다.

호출이 더 이상 사용되지 않는 이유를 조사 해보면 Java / API / Framework에 대해 흥미로운 것을 배우는 경우가 많습니다. 메소드가 더 이상 사용되지 않는 이유가 종종 있으며 이러한 이유를 이해하면 더 깊은 통찰력을 얻을 수 있습니다.

따라서 학습 / 성장 관점에서 볼 때 그것은 또한 가치있는 노력입니다


답변

확실히 성능 문제를 일으키지 않습니다. 더 이상 사용되지 않으므로 향후 함수가 더 이상 라이브러리의 일부가 아닐 가능성이 있으므로 새 코드에서 사용하지 말고 사용을 중지하도록 이전 코드를 변경해야합니다. 스트럿을 업그레이드 할 때 언젠가 문제가 발생하지 않고 기능이 더 이상 존재하지 않음을 발견했습니다.


답변

그것은 잘못이 아니며 권장하지 않습니다. 그것은 일반적으로이 시점에서 더 나은 일을하는 방법이 있다는 것을 의미하며, 새로운 개선 된 방법을 사용한다면 좋은 일을 할 것입니다. 더 이상 사용되지 않는 일부 항목은 실제로 위험하므로 완전히 피해야합니다. 새로운 방식은 더 이상 사용되지 않는 방식보다 더 나은 성능을 제공 할 수 있지만 항상 그런 것은 아닙니다.


답변

“자기 폐지 유머”라는 용어를 들어 보셨을 것입니다. 그것은 당신의 중요성을 최소화하는 유머입니다. 더 이상 사용되지 않는 클래스 또는 메소드는 이와 같습니다. 더 이상 중요하지 않습니다. 실제로는 더 이상 중요하지 않으므로 앞으로는 더 이상 존재하지 않을 것입니다.

그것을 피하십시오