27) import문, static import문
1. import문
-클래스를 사용할 때 패키지 이름을 생략할 수 있다.
-컴파일러에게 클래스가 속한 패키지를 알려준다.
원래는 Data라는 클래스는 java-util패키지 안에 있는 클래스라서 java.util.Data라고 적는 게 올바른 표현이다.
하지만 모든 클래스를 이렇게 적다 보면 시간도 많이 걸리고 귀찮다.
그래서 import문을 선언하여 이 클래스가 어떤 패키지 안에 들어있는지 생략할 수 있다.
단축기 ctrl+shift+o를 사용하면 import문이 자동으로 생성된다.
똑같은 클래스가 있으면 어떤 패키지인지 선택하는 창이 나온다. 그럼 맞는 패키지를 선택하면 된다.
어? 근데 지금까지 String클래스는 패키지 이름을 매번 쓰지 않았죠?
-java.lang패키지의 클래스는 import하지 않고도 사용할 수 있다(String, Object, System, Thread...)
java.lang패키지는 자바언어의 기본 패키지이다. 핵심 클래스를 다 거기에 넣어놨기 때문에 굳이 import문을 사용하지 않는다.
import문에서 '*'표시는 '모든 클래스'를 의미한다. java.lang은 기본 패키지이기 때문에 import문은 생략 가능하다.
2. import문의 선언
-import문을 선언하는 방법은 다음과 같다.
-import문은 패키지문과 클래스 선언 사이에 선언한다.
-import문은 컴파일 시에 처리되므로 프로그램 성능에 영향 없다.
import jav.util.Calendar;
import jav.util.Date;
import jav.util.ArrayList;
이 세문장을
import java.util.*;로 한 문장으로 바꿀 수 있다.
이렇게 쓰면 모든 클래스를 가져오기 때문에 성능이 떨어지지 않냐는 말이 있는데 그렇지 않다.
하긴 명확하게 쓰는 패키지만 선언하면 정확히 어떤 클래스인지 알 수 있는 장점이 있긴 하다.
-다음의 두 코드는 서로 의미가 다르다.
첫 번째 코드는 java패키지에 있는 util패키지 안의 모든 클래스를 의미하고,
두 번째 코드는 java패키지에 있는 text패키지 안의 모든 클래스를 의미한다.
세 번째 코드는 java패키지에 있는 모든 클래스를 의미한다(패키지는 포함 X)
-이름이 같은 클래스가 속한 두 패키지를 import 할 때는 클래스 앞에 패키지명을 붙여줘야 한다.
3. static import문
-static멤버를 사용할 때 클래스 이름을 생략할 수 있게 해 준다.
첫 번째 import문(멤버 모두 사용): Integer클래스에 있는 모든 static멤버를 선언하는 것. 모든 static멤버는 static변수와 static메서드이다. 원래 static멤버를 사용할 때 앞에 클래스 이름을 붙여야 하는데 없이 사용 가능하게 해주는 것이다.
두 번째 import문(메서드 사용): Math클래스에 있는 random() 메서드를 사용할 때 클래스명 없이 사용 가능하게 해주는 것. 대신에 random뒤에 괄호를 붙이지 않는다는 점 주의하자.
세 번째 import문(변수사용): System클래스의 static변수인 out인데 클래스 System 없이 out으로만 사용 가능하다
예를 들면)
4. import문을 쓰는 이유
나중에 코드를 짜면 점점 길어집니다. 그럼 클래스를 쓰는 것조차도 복잡해져요.
코드를 짧게 할 수 있는 장점이 있지만, 그래도 클래스 이름을 써야 어떤 건지 명확하게 알 수 있으니 import문 없이 클래스 이름까지 쓰는 연습을 하시길 바랍니다.
*유튜브 남궁성 선생님의 `자바의 정석`을 참고하여 만들었습니다*
*자세히 보고 싶은 분들은 유튜브 가서 보시면 됩니다*
'back-end > JAVA' 카테고리의 다른 글
29) 접근제어자(access modifier): private, default, protected, public (0) | 2021.06.07 |
---|---|
28) 제어자 static, final, abstract (0) | 2021.06.07 |
26) 패키지(package), 클래스패스(classpath) (0) | 2021.06.06 |
25) 참조변수super, 생성자super() (0) | 2021.06.03 |
24) 메서드 오버라이딩(overriding), 오버로딩과 오버라이딩 차이 (0) | 2021.06.03 |