2013-08-31 2 views
4

대학에서 프로그래밍 수업을 할 때 한 클래스를 사용한 경우에도 전체 패키지를 가져옵니다. 이것은 자동 완성 기능을 제공하지 않는 IDE 나 그렇게 멋진 IDE를 사용하기로되어 있었기 때문에 일반적으로 코드 작성이 더 쉬워졌습니다.Java 패키지 가져 오기의 일반적인 규칙은 무엇입니까?

그러나 필자는 경험 많은 프로그래머가되었으므로 Java 패키지를 전체적으로 가져 오거나 필요한 패키지에서 클래스를 가져 오는 것이 더 일반적입니까? 대신 예를 들어

:

import java.util.ArrayList; 
import java.util.List; 
import java.util.Random; 

등 :

import java.util.*; 

는 말을 기존가요?

전체 클래스를 선택한 클래스에 비해 가져 오는 것이 더 많은 메모리를 사용합니까?

답변

4

메모리 문제는 아니지만 * 표기법을 사용하면 부주의로 잘못된 클래스를 가져올 위험이 있습니다. 일반적으로 문제는 아니지만 다른 패키지에서 가져온 클래스와 *가 일치하면 찾기 어려운 버그입니다.

IDE에서 특정 클래스 가져 오기가 해당 패키지에서 세 개 이상의 클래스를 가져 오는 경우 하나의 '*'import 문으로 바뀌는 규칙을 사용하는 것을 보았습니다. 각 가져온 클래스를 이름별로 호출하는 것을 선호합니다.

0

성능 측면에서 볼 때 컴파일 할 때 약간의 오버 헤드가 있지만 런타임에는 차이가 없습니다.

1

종종 가져온 클래스가 상속 및 기능 논리로 인해 동일한 패키지의 다른 클래스를 사용하기 때문에 메모리 소비가 비슷합니다.

내 학교 (고등학교 3 학년)에서는 현재 전체 패키지를 가져 오게합니다. 이는 주로 IDE (BlueJ)가 최소한의 자동 완성 기능을 제공하기 때문에 주로 우리가 사용하는 모든 클래스를 가져와야한다는 것은 상당히 고통 스러울 것입니다.

개인적으로는 Eclipse와 IDEA를 사용하여 각 클래스를 수동으로 가져옵니다. 이것은 다른 패키지에있는 동일한 이름 클래스 간의 충돌을 방지합니다. 안드로이드는 많은 자바 프레임 워크에 대해 동등한 클래스를 가지고 있지만 다른 패키지에 있기 때문에 큰 도움이됩니다.

0

@Chris Gerken은 좋은 지적입니다.

하지만 버그가 아닙니다. 와일드 카드 가져 오기는 새 버전에서 이미 사용중인 것과 같은 이름으로 새 클래스를 추가하는 업데이트 된 라이브러리에 대해 다시 컴파일하면 문제가 발생할 수 있습니다. 따라서 와일드 카드 가져 오기는 장기간에 코드를 더 취약하게 만듭니다.

3

import java.util.*;과 같이 주어진 와일드 카드 유형 가져 오기 주문형 선언은 코드에서 직접 사용하면 안됩니다. 대신 import java.util.ArrayList;

같은에만 필요합니다 클래스 이름을 사용하여 다음과 많은 다른 이유가 있습니다 :

  • 중요한 이유는 새로운 예상치 못한 클래스 파일이 동일한 패키지에 추가 할 수 있다는 것입니다.이 새로운 클래스는 다른 패키지에서 사용중인 유형과 충돌 할 수 있으므로 프로그램 자체를 건드리지 않고 이전에 올바른 프로그램을 잘못된 패키지로 바꿀 수 있습니다.

  • 명시 적 클래스 가져 오기는 사용중인 정확한 클래스 (그리고 사용되지 않는 클래스)를 명확하게 독자에게 전달합니다.

  • 명시 적 클래스 가져 오기는 더 나은 컴파일 성능을 제공합니다. 주문형 (type-import-on-demand) 선언은 프로그래머에게 편리하고 초기에는 약간의 시간을 절약하지만이 시간은 파일을 컴파일 할 때마다 증가하는 컴파일 시간에 대해 지불됩니다. 더 코딩 규칙에 대한 내용은

은 참조 : 명시 수입 클래스 코드가 아니라 그 사람들이 생각하기보다, 사용하고 정확하게 다른 사람에게 : http://geosoft.no/development/javastyle.html#초 글 머리가 매우 중요하다

+1

. 따라서 코드를 읽기 쉽게 만듭니다. 코드를 전문적으로 작성할 때 다른 사람이 결국 코드를 ​​유지해야 할 100 % 가능성이 있습니다. 읽을 수있는 코드는 사람들이 회사의 비용을 절약 할 수있는 시간을 절약 할 수 있기 때문에 전문성의 상징입니다. – VGR

+0

@VGR 사실, 코드에 의해 실제로 사용되는 클래스에 대해서는 알려주지 않습니다 (힌트 임에도 불구하고). ** ** 1 ** 전혀 사용되지 않는 클래스를 가져올 수 있고 ** 2 ** ** 코드에서 클래스에 대해 정규화 된 이름을 사용할 수 있습니다.이 경우에는 사용할 필요가 없습니다 import 문. – proskor

+0

@proskor : 그러나 당신은 기술적으로 정확합니다. 1) IDE는이 발생에 대해 경고를 발행 할 수 있습니다. 2) 대부분의 전문 프로그래머는 ** 클래스 충돌이있는 경우에만 ** 코드에서 정규화 된 이름을 사용합니다. java.awt.Image와 org.eclipse.swt.graphics.Image는 내가 처리해야했던 마지막 클래스 충돌이었다. –

관련 문제