Java에서 사용되지 않는 메서드 또는 클래스를 사용하는 것이 잘못되었습니까?
웹 어플리케이션을 개발하기 위해 이클립스를 사용하고 있습니다.오늘 JAR 파일을 변경하여 struts 버전을 업데이트했습니다.일부 장소에서는 메서드가 권장되지 않는다는 경고가 표시되지만 코드는 정상적으로 작동합니다.
몇 가지 알고 싶은 게 있어
Java에서 사용되지 않는 메서드 또는 클래스를 사용하는 것이 잘못되었습니까?
방법을 변경하지 않고 경고와 함께 응용 프로그램을 실행하면 성능 문제가 발생할 수 있습니다.
1. Java에서 사용되지 않는 메서드 또는 클래스를 사용하는 것이 잘못되었습니까?
의 정의에서 권장되지 않음:
@Depprecated라는 주석이 붙은 프로그램 요소는 일반적으로 위험하거나 더 나은 대안이 존재하기 때문에 프로그래머가 사용을 권장하지 않는 요소입니다.
이 메서드는 이전 버전과의 호환성을 위해 API에 지정된 기간 동안 유지되며 이후 릴리스에서는 삭제될 수 있습니다.이는 잘못된 것은 아니지만 API 변경에 보다 강력한 더 나은 방법이 있습니다.
2. 방법을 변경하지 않고 경고와 함께 응용 프로그램을 실행하면 성능 문제가 발생합니까?
아마 아닐 거예요.그것은 폐지 이전과 같이 계속 작동할 것이다.API 메서드의 계약은 변경되지 않습니다.내부 데이터 구조가 새롭고 더 나은 방법으로 변경되면 성능에 영향을 미칠 수 있지만 가능성은 매우 낮습니다.
Java API에서 가장 재미있는 권장사항은 imo입니다. 권장 해제 이유: 철자 오류입니다.
권장되지 않습니다.JDK 버전 1.1.1에서는 getMaxDescent()로 대체되었습니다.
퍼포먼스를 변경하지 않고 폐지된 코드를 사용할 수 있지만 메서드/클래스를 폐지하는 목적은 사용자에게 보다 나은 사용 방법이 있음을 알리는 것입니다.또, 향후의 릴리스에서는 폐지된 코드가 삭제될 가능성이 있습니다.
용어.
Sun 공식 용어집:
폐지:더 이상 권장되지 않는 클래스, 인터페이스, 컨스트럭터, 메서드 또는 필드를 나타내며 향후 버전에서 더 이상 존재하지 않을 수 있습니다.
권장하지 않는 방법 및 시기 가이드에서 다음을 참조하십시오.
여러분은 "자기 비하적 유머" 또는 화자의 중요성을 최소화하는 유머라는 용어를 들어봤을 것이다.더 이상 사용되지 않는 클래스나 메서드는 이와 같습니다.더 이상 중요하지 않다.사실, 이것은 매우 중요하지 않기 때문에 더 이상 사용하지 말아야 합니다. 왜냐하면 그것은 대체되었고 앞으로 더 이상 존재하지 않을 수 있기 때문입니다.
@Deprecated
주석은 한 걸음 더 나아가 위험을 경고했습니다.
에 주석이 있습니다.
@Deprecated
일반적으로 위험하거나 더 나은 대안이 존재하기 때문에 프로그래머가 사용을 권장하지 않는 것입니다.
레퍼런스
옳아요, 그르나요?
폐지된 방법을 사용하는 것이 옳은지 그른지에 대한 문제는 개별적으로 검토되어야 할 것이다.다음은 Effective Java 2nd Edition에서 "사용되지 않음"이라는 단어가 나타나는 모든 인용문입니다.
항목 7: 피니셔:최종화를 보증하는 유일한 방법은 다음과 같습니다.
System.runFinalizersOnExit
한 쌍둥이 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★」Runtime.runFinalizersOnExit
이 방법들은 치명적인 결함이 있어 폐지되었다.항목 66: 공유 가변 데이터에 대한 액세스 동기화:라이브러리가 제공하는 것은
Thread.stop
그러나 이 방법은 본질적으로 안전하지 않기 때문에 오래 전에 권장되지 않습니다. 이 방법을 사용하면 데이터가 손상될 수 있습니다.항목 70: 나사산 안전성 문서화:그
System.runFinalizersOnExit
메서드는 스레드화 되어 폐지되었습니다.항목 73: 스레드 그룹 회피:그들은 당신이 특정한 것을 적용할 수 있게 해준다.
Thread
한 번에 여러 개의 스레드에 대한 원본을 만들 수 있습니다.이러한 기본 요소 중 일부는 더 이상 사용되지 않으며 나머지는 자주 사용되지 않습니다. [...] 스레드 그룹은 사용되지 않습니다.
그래서 적어도 위의 방법들 모두, 적어도 Josh Bloch에 따르면, 그것들을 사용하는 것은 분명히 잘못된 것이다.
다른 방법으로는 문제를 개별적으로 고려하고 왜 추천되지 않았는지 이해해야 하지만, 일반적으로 추천되지 않는 결정이 정당화될 경우 계속 사용하는 것이 옳다기보다는 잘못된 쪽으로 기울게 됩니다.
관련 질문
위의 모든 훌륭한 응답 외에도, 저는 사용되지 않는 API 호출을 삭제해야 하는 또 다른 이유가 있다는 것을 발견했습니다.
콜이 권장되지 않는 이유를 조사하다 보면 Java/API/Framework에 대해 흥미로운 것을 알게 되는 경우가 많습니다.어떤 방법이 권장되지 않고 이러한 이유를 이해하면 더 깊은 통찰력을 얻을 수 있는 충분한 이유가 있는 경우가 많습니다.
따라서 학습/성장의 관점에서도 가치 있는 노력이 될 수 있습니다.
퍼포먼스상의 문제는 발생하지 않습니다.향후 권장되지 않는 기능은 라이브러리의 일부가 될 가능성이 높기 때문에 새로운 코드로 사용하는 것을 피하고 오래된 코드를 변경하여 사용을 중지해야 합니다.그러면 스트럿을 업그레이드해도 문제가 발생하지 않게 됩니다.
잘못된 게 아니라 권장되지 않을 뿐입니다.일반적으로 이 시점에서 더 나은 방법이 있으며 새로운 개선된 방법을 사용하면 좋은 결과를 얻을 수 있다는 것을 의미합니다.몇몇 추천되지 않는 것들은 정말 위험하고 모두 피해야 한다.새로운 방법은 더 이상 사용되지 않는 방법보다 더 나은 성능을 제공할 수 있지만 항상 그렇지는 않습니다.
"자기 비하 유머"라는 말을 들어본 적이 있을 것이다.그것은 당신의 중요성을 최소화하는 유머입니다.더 이상 사용되지 않는 클래스나 메서드는 이와 같습니다.더 이상 중요하지 않다.사실 그것은 너무 중요하지 않기 때문에 앞으로 더 이상 사용해서는 안 된다.
피하도록 해라
- 사용하는 것이 완전히 잘못된 것은 아닙니다.
deprecated
사용 중인 라이브러리에서 이러한 방법이 사라졌을 때 문제를 방지하기 위한 적절한 비상 계획이 있는 한 방법.Java API 자체에서는 이런 일이 일어나지 않지만 다른 거의 모든 것에서는 제거될 것입니다.특히 소프트웨어의 지원 라이브러리를 업그레이드하지 않을 계획(장기적으로는 업그레이드하지 않을 가능성이 높지만)이 있는 경우,deprecated
★★★★★★★★★★★★★★★★★★. - 아니요.
네, 틀렸어요.
사용되지 않는 메서드 또는 클래스는 이후 버전의 Java에서 제거되므로 사용하지 마십시오.어느 경우든 이용 가능한 대안이 있어야 합니다.그거 써.
프로젝트 목표를 달성하기 위해 권장되지 않는 클래스 또는 메서드를 사용해야 하는 경우가 몇 가지 있습니다.이 경우, 당신은 그것을 사용할 수밖에 없습니다.Java의 향후 버전은 이 코드를 해제할 수 있지만, 만약 그것이 요구된다면 당신은 그것을 감수해야 한다.프로젝트 요건을 충족하기 위해 실수를 해야 했던 것이 이번이 처음은 아닐 것이며, 이것이 마지막이 되지는 않을 것입니다.
Java 또는 다른 라이브러리의 새 버전으로 업그레이드하면 사용하던 메서드 또는 클래스가 사용되지 않을 수 있습니다.사용되지 않는 메서드는 지원되지 않지만 예기치 않은 결과가 생성되지는 않습니다.그렇다고 그들이 하지 않을 거라는 뜻은 아니니 최대한 빨리 코드를 바꾸세요.
폐지 프로세스는 작성자가 코드를 이전 API에서 새로운 API로 변경할 수 있는 충분한 시간을 갖도록 하기 위한 것입니다.이 시간을 활용하세요.가능한 한 빨리 코드를 변경하세요.
잘못된 것은 아니지만 권장되지 않는 메서드 중 일부는 소프트웨어의 향후 버전에서 삭제되기 때문에 작동하지 않는 코드가 나타날 수 있습니다.
권장되지 않는 메서드나 클래스를 Java에서 사용하는 것이 잘못된 것입니까?
그 정도는 아니지만 수고를 덜 수 있다.다음은 권장되지 않는 방법을 사용하는 것을 강력히 권장하는 예입니다.
http://java.sun.com/j2se/1.4.2/docs/guide/misc/threadPrimitiveDeprecation.html
Thread.stop이 권장되지 않는 이유는 무엇입니까?
왜냐하면 그것은 본질적으로 안전하지 않기 때문이다.스레드를 중지하면 스레드가 잠긴 모든 모니터의 잠금이 해제됩니다.(ThreadDeath 예외가 스택 위로 전파될 때 모니터의 잠금이 해제됩니다).이전에 이러한 모니터에 의해 보호되던 오브젝트 중 하나가 부정합 상태였다면 이제 다른 스레드에서 이러한 오브젝트를 부정합 상태로 볼 수 있습니다.그런 물건들은 파손되었다고 한다.스레드가 손상된 개체에서 작동하면 임의 동작이 발생할 수 있습니다.이 동작은 미묘하고 검출하기 어려울 수 있습니다.또, 발음되는 경우도 있습니다.다른 체크되지 않은 예외와 달리 ThreadDeath는 스레드를 자동으로 삭제합니다.따라서 사용자는 프로그램이 손상될 수 있다는 경고를 받지 않습니다.부패는 실제 피해가 발생한 후, 심지어 미래 몇 시간 또는 며칠 동안 언제든지 나타날 수 있습니다.
방법을 변경하지 않고 경고와 함께 응용 프로그램을 실행하면 성능 문제가 발생할 수 있습니다.
성능 면에서는 문제가 없어야 합니다.표준 API는 응용 프로그램이 Java의 새로운 버전에 점차 적응할 수 있도록 하위 호환성을 고려하도록 설계되었습니다.
Java에서 사용되지 않는 메서드 또는 클래스를 사용하는 것이 잘못되었습니까?"잘못된" 것이 아니라, 여전히 작동하지만 가능한 한 피해야 합니다.
메서드와 관련된 보안 취약성이 있으며 개발자가 설계 결함이라고 판단했다고 가정합니다.그래서 그들은 그 방법을 폐지하고 새로운 방법을 도입하기로 결정할지도 모른다.
그래서 예전 방식을 계속 사용한다면 위협이 있을 수 있습니다.그래서 추천을 거절한 이유를 알고 그것이 당신에게 어떤 영향을 미치는지 확인하세요.
방법을 변경하지 않고 경고와 함께 응용 프로그램을 실행하면 성능 문제가 발생할 수 있습니다.
성능 문제가 원인인 경우 성능 문제로 인해 문제가 발생합니다.그렇지 않으면 이러한 문제가 발생할 이유가 없습니다.다시 한 번 지적하고 싶은 것은, 추천을 거절하는 이유를 알고 있는 것입니다.
Java에서는 @Depreceded, C#에서는 [Obsolete]입니다.
저는 C#의 용어를 더 선호합니다.그냥 쓸모없다는 뜻이지그래도 쓰고 싶으면 쓸 수 있지만, 더 좋은 방법이 있을 거야.
Windows 3.1이 구식이라고 생각되면 Windows 7 대신 Windows 3.1을 사용하는 것과 같습니다.아직 사용할 수 있지만 향후 버전에는 더 나은 기능이 있을 수 있으며 향후 버전도 지원될 것입니다.구식 버전은 지원되지 않을 것입니다.
Java의 @Deprecated도 마찬가지입니다.이 메서드는 아직 사용할 수 있지만, 향후는 자신의 책임으로 사용할 수 있습니다.또한 더 나은 대체 방법이 제공되어 지원되지 않을 수도 있습니다.
사용되지 않는 코드를 사용하는 경우, 새로운 API로 업그레이드하지 않는 한 일반적으로 문제가 없습니다. 사용되지 않는 코드는 존재하지 않을 수 있습니다.폐지된 코드를 사용하고 있는 것을 발견했을 경우는, 새로운 대체 코드를 사용하도록 갱신하는 것을 추천합니다(통상, 이것은 주석이나 Javadoc 폐지된 코멘트에 기재되어 있습니다).
편집: 그리고 Michael이 지적한 바와 같이, 추천 해제 이유가 기능의 결함(또는 기능이 존재하지 않아야 하기 때문) 때문이라면, 추천 해제된 코드를 사용해서는 안 됩니다.
물론 아닙니다. 자바 전체가 @Depprecated :-)이 되기 때문에 Java가 지속되는 한 자유롭게 사용하실 수 있습니다.어쨌든 다른 건 알아채지 못할 거야, 진짜 고장난 게 아니라면 말이야.의미 - 그것에 대해 읽고 결정해야 합니다.
그러나 .Net에서는 어떤 것이 [오래된 것]이라고 선언되었을 때, 비록 한 번도 사용하지 않았더라도 즉시 그것을 읽어보세요.교체보다 효율적이거나 사용하기 쉬울 확률은 약 50%입니다:-)
그래서 일반적으로, 요즘 기술 보존을 하는 것이 꽤 유익할 수 있지만, 독서를 먼저 해야 한다.
추천되지 않는 방법은 기존의 방법보다 모든 면에서 좋은 대체=아이브 방법이 있다는 것을 느낄 수 있습니다.기존의 방법보다 좋은 방법을 사용하는 것이 좋습니다.이전 버전과의 호환성을 위해 이전 메서드는 사용되지 않는 상태로 유지됩니다.
언급URL : https://stackoverflow.com/questions/2941900/is-it-wrong-to-use-deprecated-methods-or-classes-in-java
'IT이야기' 카테고리의 다른 글
vuejs에서 개체가 확장 가능하지 않음 오류입니다. (0) | 2022.07.23 |
---|---|
1개의 클래스 vue.js 2에 2개의 조건을 추가하려면 어떻게 해야 하나요? (0) | 2022.07.23 |
Vue Watch의 클래스 변경 (0) | 2022.07.23 |
하위 항목 vueJ 간에 "활성" 클래스를 전환합니다.2 (0) | 2022.07.23 |
java 디렉토리에 파일을 작성하려면 어떻게 해야 합니까? (0) | 2022.07.23 |