Java/Theory

[Java/Theory]09. Import

양승길 2016. 5. 30. 19:02

9. import

    Source File를 작성할 때 다른 Package의 class를 사용할 때는 포함된 Package의 이름과 같이 사용해야한다.

    하지만, 매번 작성하기기 불편하다.

    Coding하기 전에 import문으로 사용하고자 하는 Class의 Package를 미리 명시하면 

    Source File에 사용되는 Class의 이름에서 Package명은 생략할 수 있다.

    

    import문의 역할은 Compiler에게 Source File에 사용된 Class의 Package에 대한 정보를 제공하는 것이다.

    컴파일러는 import문을 통해 Source File에 사용된 Class들의 Package를 알아 낸 다음, 

    모든 Class 이름 앞에 Package 이름을 붙여 준다. 

    import문은 Program 성능에 전혀 영향을 미치지 않는다. 

    import문을 많이 사용하면 Compile 시간이 아주 조금 더 걸릴 뿐이다. 


    -> import문의 선언

       모든 Source File(.java)에서 import문은 Package문 다음에, 그리고 Class 선언 문 이전에 위치해야한다.

       그리고 import문은 Package문과는 달리 한 Source File에 여러 번 선언할 수 있다. 

       일반적인 Source File의 구성은 'package문 - import문 - Class 선언'의 순서로 되어 있다. 

     

       import 패키지명.클래스명; 

     

       또는


       import 패키지명.*; 

     

       Keyword import와 Package 이름을 생략하고자 하는 Class의 이름을 Package 이름과 함께 써주면 된다.

       같은 Package에서 여러 개의 Class가 사용될 때, 

        import문을 여러 번 사용하는 대신 '패키지명.*'을 이용해서

       지정된 Package에 속하는 모든 Class를 Package명 없이 사용할 수 있다. 

      

       하지만, import하는 Package의 수가 많을 때는 

       어느 Class가 어느 Package에 속하는지 구별하기 어렵다는 단점이 있다. 

       한 가지 더 알아두어야 할 것은 import문에서 

       Class의 이름 대신 '*'을 사용하는 것이 Sub Package의 Class까지 포함하는 것은 아니라는 것이다. 

1
2
import java.util.*
import java.text.*
cs

       그래서, 위의 두 문장 대신 다음과 같이 할 수는 없다.      

1
import java.*
cs

       import문으로 Package를 지정하지 않으면 

       'Unnamed Package'에 속한 Class를 제외한 모든 Class 이름 앞에 Package명을 반드시 붙여야 한다.

       System과 String 같은 java.lang의 Class들을 import 하지 않고 사용할 수 있었던 이유는 

       Java를 개발을 하면서 가장 많이 사용된 Class들이 lang에 있는 점도 있기 때문에

       모든 Source File에는 묵시적으로 다음과 같은 import문이 선언되어 있다. 

       import java.lang.*; 

       (src.zip은 API들을 모아둔 java파일이고, rt.jar은 API들을 모아둔 Bytecode다.)

'Java > Theory' 카테고리의 다른 글

[Java/Theory]11. Reference Type Casting  (0) 2016.05.30
[Java/Theory]10. API  (0) 2016.05.30
[Java/Theory]08. Package  (0) 2016.05.30
[Java/Theory]07. 상속  (0) 2016.05.30
[Java/Theory]06. OOP  (0) 2016.05.30