programing

패키지를 Import 합니다.* vs Import 패키지.특정 유형

copysource 2023. 2. 3. 23:15
반응형

패키지를 Import 합니다.* vs Import 패키지.특정 유형

에 모든 타입()으로에 대해 ?import java.* 「」의 : 「」(「」의 경우:import java.lang.ClassLoader두보다 더 두 번째 것이 다른 것보다 더 권장되는 사용 방법입니까?

Java API를 보면 같은 이름의 클래스나 인터페이스가 여러 패키지에 포함되어 있습니다.

예를 들어 다음과 같습니다.

java.lang.reflect.Array
java.sql.Array

그서를 약약 sojava.lang.reflect.* ★★★★★★★★★★★★★★★★★」java.sql.*어레이 타입에서 충돌이 발생하여 코드로 완전히 수식해야 합니다.

대신 특정 클래스를 가져오면 이러한 번거로움이 줄어듭니다.

특정 유형의 Import와 비교하여 .* Import를 수행해도 성능이나 오버헤드가 발생하지 않습니다.단, Import를 사용하지 않는 것이 베스트 프랙티스라고 생각합니다.* 그 주된 이유는, 가능한 한 똑바로, 청결하고 애매한 상태를 유지하고 싶기 때문입니다.* Import를 하면, 이 점을 잃게 된다고 생각합니다.

이것은 사실 매우 안 좋은 문제입니다.

당신이 글을 쓴다고 가정해 봅시다.

import a.*;
import b.*;
...
Foo f;

클래스 Foo는 패키지 a에 존재합니다.

이제 완벽하게 컴파일된 코드를 체크인하면 6개월 후 누군가가 패키지 b에 클래스 Foo를 추가합니다.(아마도 최신 버전에서 클래스를 추가한 것은 서드파티 lib일 것입니다).

쾅! 이제 코드 컴파일을 거부했군.

주문형 Import를 사용하지 마십시오.사악해!

상세한 것에 대하여는, http://javadude.com/articles/importondemandisevil.html 를 참조해 주세요.

RE 퍼포먼스:

import a.*;

import a.X;

실행 시 차이가 없습니다.컴파일러는 해결된 클래스 이름을 생성된 .class 파일에 하드 배선합니다.

소수자 견해: 제 코드에 따르면, 저는 몇 개의 패키지에 담긴 많은 수업과 여기저기서 몇 개의 이상한 수업들을 사용하는 경향이 있습니다.저는 수입품 목록을 작게 유지해서 한눈에 무슨 일이 일어나고 있는지 알 수 있는 것을 좋아합니다.이를 위해 임계값을 4개 클래스로 설정합니다.게다가 이클립스는 제 코드에 *를 사용합니다.이렇게 하면 패키지의 Import를 읽을 수 있게 되고, 수업에서 가장 먼저 하는 으로서 다음과 같은 질문에 답하는 경향이 있습니다.누구한테 말을 걸죠?

이름 충돌에 대해서:경쟁 클래스 이름을 가진 두 패키지에서 4개 이상의 클래스를 가져올 가능성은 얼마나 됩니까?시간이 10%를 초과하는 경우 클래스가 의존하는 패키지 수(예: 더 작은 클래스로 재팩터링)를 고려해 볼 수 있습니다.

Import xxx를 사용하지 않는 타당한 이유.*는 의존관계에 대한 명확한 비전을 갖는 것입니다.

다른 패키지의 특정 클래스는 원본 파일의 바로 앞에 나열되므로 사용 중인 것을 더 빨리 알 수 있습니다.

더 많은 정보를 찾아본 후, 나는 이 웹사이트를 발견했는데, 거기에는 매우 잘 설명되어 있다.Import 문제 및 Import 스테이트먼트에서 *를 사용하면 퍼포먼스에 영향을 미칩니까?

이 두 가지 스타일 사이에 효율성 문제가 있습니까?그럴 수도 있지만, 수입 신고서는 실제로 프로그램으로 아무것도 가져오지 않기 때문에, 어떠한 차이도 매우 작습니다.암묵적인 Import java.lang이 있습니다.* 컴파일 유닛의 선두에 JDK 1.2.2의 java.lang에는 75개의 클래스와 인터페이스가 포함되어 있습니다.조회해야 하는 수천 개의 클래스 이름 사용 예제를 사용한 실험에서는 컴파일 속도의 변화가 미미했습니다.따라서 컴파일 성능은 다른 형식보다 한 형식을 선택할 때 고려해서는 안 됩니다.

수입 신고서에 대한 마지막 관심사가 있습니다.내부 클래스를 사용한다고 가정합니다.

package P;

public class A {
    public static class B {}
}

다른 컴파일 유닛에서A 에 액세스 하려면 , 다음과 같이 입력합니다.

import P.*;

또는 P를 Import합니다.A; 그러나 조건 없이 B에 액세스하려면 다음과 같이 말해야 합니다.

import P.A.*;

또는: P.A.를 Import합니다.B; 이 중 첫 번째는 패키지 P에 있는 클래스A 내에서 타입을 사용할 수 있도록 합니다.두 번째는 패키지 P의 클래스 A에 있는 타입 B만을 사용할 수 있도록 합니다.

IDE 디폴트가 무엇이든 사용하는 경향이 있습니다.퍼포먼스에 영향이 없고, 의존관계 체크도 다양한 툴로 처리할 수 있기 때문에 크게 걱정할 필요는 없다고 생각합니다.

같은 패키지에서 20개 이상의 클래스를 Import할 경우 Import xxx를 사용하는 것이 좋습니다.* "Clean Code"는 패키지 전체의 Import에도 찬성합니다.

Import는 바이트 코드레벨에서는 중요하지 않기 때문에 런타임에는 차이가 없습니다.

a) 모든 Import를 명시적으로 표시 b) IDE에 의해 관리되도록 하는 것이 최선이라고 생각합니다.모든 주요 IDE에서 가져오기를 자동으로 업데이트, 정렬 및 완료할 수 있습니다.

a)는, IDE내 리팩터링의 콘텍스트외에서 수동 리패키징을 실시할 때, 몇번이나 도움이 되는 것을 알게 되었습니다.예를 들어 마케팅에서 제품 이름을 변경하고 모든 패키지가 이름을 변경해야 한다고 결정할 때처럼요.

코드를 읽는 사람은 파일 상단에 있는 Import 블록을 보는 것만으로 특정 클래스가 사용하는 클래스를 즉시 알 수 있기 때문에 와일드카드를 사용했는지 여부를 조사해야 합니다.

언급URL : https://stackoverflow.com/questions/187453/import-package-vs-import-package-specifictype

반응형