Programming

혼란을 줄이는 것 외에 사용하지 않는 가져 오기를 Java에서 정리해야하는 이유가 있습니까?

procodes 2020. 8. 23. 10:11
반응형

혼란을 줄이는 것 외에 사용하지 않는 가져 오기를 Java에서 정리해야하는 이유가 있습니까?


Java에서 사용하지 않는 import 문을 피해야 할 합당한 이유가 있습니까? 내가 이해하는대로 그것들은 컴파일러를위한 것이므로 사용하지 않는 많은 가져 오기는 컴파일 된 코드에 영향을 미치지 않습니다. 혼란을 줄이고 이름 충돌을 피하기위한 것일까 요?

(이클립스가 사용하지 않은 가져 오기에 대한 경고를 제공하기 때문에 물어 봅니다. 클래스 디자인이 끝날 때까지 가져 오기를 제거하고 싶지 않기 때문에 코드를 개발할 때 다소 짜증이납니다.)


나는 당신이 수입품을 제거하지 않으면 성능 문제 또는 이와 유사한 것들이 가능성이 없다고 생각합니다.

그러나 드물게 목록 인터페이스 가져 오기와 같은 이름 지정 충돌이있을 수 있습니다.

Eclipse에서는 언제든지 바로 가기 (OS에 따라 다름-Win : Ctrl + SHIFT + O및 Mac COMMAND + SHIFT + O:)를 사용하여 가져 오기를 구성 할 수 있습니다. 그런 다음 Eclipse는 가져 오기 섹션을 정리하여 모든 오래된 가져 오기 등을 제거합니다. 가져온 항목이 다시 필요한 경우 eclipse는를 사용하여 명령문을 완료하는 동안 자동으로 추가합니다 Ctrl + SPACE. 따라서 수업에서 사용하지 않는 코드를 보관할 필요가 없습니다.

항상 그렇듯이 사용하지 않는 코드는 코드를 읽고 나중에 필요할 수도 있기 때문에 활성 코드에 무언가를 남기는 동안 당신과 다른 사람들의주의를 산만하게 할 것입니다.


하나는 클래스 경로에서 가져 오기에 의해 참조되는 클래스를 제거하면 목적이없는 어리석은 컴파일러 오류가 발생하지 않는다는 것입니다. 그리고 "사용 된 위치"검색을 수행 할 때 오 탐지가 발생하지 않습니다.

사용하지 않는 가져 오기가 다른 가져 오기와 이름 지정 충돌을 일으켜 불필요하게 완전한 이름을 사용하게되는 경우도 있습니다 (그러나 이것은 본질적으로 매우 구체적입니다).

부록 : 오늘 빌드 서버가 메모리 부족 오류와 함께 컴파일 실패 (테스트 실행도 아님)를 시작했습니다. 그것은 영원히 잘 실행되었고 체크인은 빌드 프로세스에 대한 변경이나 이것을 설명 할 수있는 중요한 추가 사항이 없었습니다. 메모리 설정을 늘리려 고 시도한 후 (64 비트 CentOS에서 64 비트 JVM을 실행합니다!) 클라이언트가 컴파일 할 수있는 위치를 훨씬 넘어서서 체크인을 하나씩 검사했습니다.

개발자가 사용하고 포기한 부적절한 가져 오기가있었습니다 (그들은 클래스를 사용하고 자동으로 가져 와서 실수라고 깨달았습니다). 사용하지 않는 가져 오기는 IDE가 애플리케이션을 분리하도록 구성되어 있지 않지만 빌드 프로세스는 애플리케이션의 전체 별도 계층에서 가져 왔습니다. 이 단일 가져 오기는 너무 많은 클래스를 끌어서 컴파일러가 클래스 경로에 관련 종속 라이브러리없이 컴파일을 시도했기 때문에 메모리 부족 오류가 발생하는 많은 문제가 발생했습니다. 사용하지 않은 가져 오기로 인한이 문제를 해결하는 데 1 시간이 걸렸습니다.


순수한 관점에서 모든 종속성은 제품에 대한 "제약"이므로 나중에 유지 관리 문제를 일으킬 수 있습니다.

예를 들어, 프로그램에서 com.XYZObjectPool 클래스를 사용하고 나중에 사용하지 않기로 결정하고 가져 오기를 제거하지 않는다고 가정합니다. 다른 누군가가 이제 org.WVYObjectPool을 인스턴스화하고 ObjectPool을 참조하기를 원하면, 캐스팅 문제 나 호출 문제가있을 때까지 경고를받지 않습니다.

그건 그렇고, 이것은 비현실적인 시나리오가 아닙니다. Eclipse가 가져 오려는 X의 특정 버전을 묻고 여러 패키지 중에서 하나를 선택할 때마다 가져 오기가 있었다면 알지 못한 채 잘못된 선택을했을 수있는 시나리오입니다.

어느 쪽이든 Eclipse에 이러한 항목을 정리하도록 요청할 수 있습니다.


경고? Eclipse에 자동으로 정리하도록 요청하십시오. 이것이 IntelliJ가하는 일입니다. 경고 할만큼 똑똑하다면 정리할 수있을만큼 똑똑해야합니다. 그런 잔소리를 멈추고 무언가를하도록 알려주는 Eclipse 설정을 찾는 것이 좋습니다.


이것은 유지 보수에 유용한 프로그램의 명확성과 관련이 있습니다.

프로그램을 유지해야한다면 한 줄에 단일 클래스를 가져 오는 것이 얼마나 유용한 지 알게 될 것입니다.

다음 시나리오를 고려하십시오.

import company.billing.*;
import company.humanrerources.*;

// other imports 


class SomeClass {
      // hundreds or thousands of lines here... 
    public void veryImportantMethod() {
      Customer customer;
      Employee comployee;
      Department dept. 
      // do something with them
     }
 }

버그를 수정하거나 코드를 유지 관리 할 때 (또는 읽기만 할 때) 사용 된 클래스가 어떤 패키지에 속하는지 독자가 아는 것이 매우 유용합니다. 위에 표시된대로 와일드 카드 가져 오기를 사용하는 것은 이러한 목적에 도움이되지 않습니다.

IDE를 사용하더라도 선언 및 반환으로 마우스를 가져 가거나 건너 뛰고 싶지는 않습니다. 현재 코드가 의존하는 다른 패키지 및 클래스가 무엇인지 기능 측면에서 이해하면 더 쉽습니다.

이것이 개인 프로젝트 나 작은 것을위한 것이라면 그것은 정말로 중요하지 않지만, 다른 개발자가 사용해야하는 (그리고 수년 동안 유지되어야하는) 더 큰 것을 위해서는 반드시 가져야합니다.

어떤 성능 차이도 전혀 없습니다.


참고로, 이것은 수입품을 구성하여 실제로 사용하지 않은 수입품을 제거한다고 생각하지 않았기 때문에 나를 잡았습니다.

Automatically removing imports during a save operation caused me some grief when for example, during development or testing you have a problem and comment out some code, when you save it, the imports used by the commented out section of code are removed. Sometimes this is not a problem as you can undo (Ctrl+Z) the changes, but other times it is not so simple as you may have made other changes. I also had a problem where when I uncommented the code (I have previously commented out then saved, thus removing the imports for that code), it automatically tried to guess the imports that were needed and picked up the wrong ones (e.g I think I had a StringUtils class being used and it picked another one with the same name from the wrong library).

I prefer to manually organize imports rather than have it as a save action.


For eclipse i use this: window -> preferences -> java -> editor -> save action -> check the checkbox for organize imports (there are a lot of other useful stuff there too, like formatting, making fields final and so on..). So when i save my file eclipse removes the unessacry imports for me. In my opinion, if you don't need something then remove it (or let it be removed by eclipse).


You could comment the unused import statements out and the warnings wont bother you but you can see what you had.


There is no any performance impact, though for readability you can make it clean. Removing unused imports is quite simple in both Eclipse and IntelliJ IDEA.

Eclipse

Windows / Linux -   Ctrl+Shift+O

Mac -                       Cmd+Shift+O

IntelliJ IDEA or Android Studio

Windows / Linux -   Ctrl+Alt+O

Mac -                       Cmd+Alt+O


I read somewhere, some years ago, that every imported class would be loaded at runtime with the importing class. So removing unused, especially whole packages, would reduce memory overhead. Although I suppose that modern versions of java deal with that, so probably it is not a reason anymore.

And by the way, with eclipse you can use Ctrl+Shift+O to organize imports, but you can also configure a "cleaner" that deal with such things (and many others) each time you save a java file.


For me, one unused class import in a controller class created a compilation problem in Jenkins build after i deleted the imported class during code cleanup and committed the deletion in git without testing a build in local.

참고URL : https://stackoverflow.com/questions/979057/any-reason-to-clean-up-unused-imports-in-java-other-than-reducing-clutter

반응형