OOP 2.3 package와 import

MMM·2023년 7월 20일

패키지

  • 클래스의 묶음
  • 클래스 or 인터페이스 포함 가능
  • 서로 관련된 클래스끼리 묶음 -> 클래스 효율적 관리 가능
  • String 클래스 = java.lang.String : java.lang 패키지에 속한 String 클래스. => 클래스끼리 이름 같아도 패키지명으로 구별 가능
  • 클래스 = 하나의 .class 파일, 패키지 = 하나의 디렉토리
  • 정리
    • 하나의 소스파일에는 첫 번째 문장으로 단 한 번의 패키지 선언만을 허용
    • 모든 클래스는 반드시 하나의 패키지에 속해야 함
    • 패키지는 점(.)을 구분자로 하여 계층구조로 구성할 수 있음
    • 패키지는 물리적으로 클래스 파일(.class)을 포함하는 하나의 디렉토리



선언

pacage 패키지명;
  • 클래스나 인터페이스의 소스파일(.java)에서 주석과 공백을 제외한 첫 번째 문장
  • 하나의 소스파일에 단 한 번만 선언
  • 대소문자 모두 허용 but 클래스명과 구분 위해 소문자로 하는 것이 원칙
  • 소스파일에 자신이 속할 패키지를 지정하지 않은 클래스는 자동적으로 이름 없는 패키지(unnamed package)에 속하게 됨



import문

  • 소스코드 작성 시 다른 패키지 클래스를 사용하려면 패키지명이 포함된 클래스 이름 사용 필요
    -> import문으로 사용하고자 하는 클래스의 패키지를 미리 명시해주면 소스코드에 사용되는 클래스이름에서 패키지명 생략 가능
  • 역할 : 소스파일에 사용된 클래스의 패키지에 대한 정보를 컴파일러에게 제공 -> 컴파일러는 컴파일 시에 import문을 통해 소스파일에 사용된 클래스의 패키지를 확인, 모든 클래스 이름 앞에 패키지명을 붙여줌
  • import문을 많이 사용하면 컴파일 시간이 조금(!) 길어질 수 있으나 프로그램 성능에는 영향을 미치지 않는다 (이건 궁금한 적 있었어서 강조해둠)



import문의 선언

  • 일반적인 소스파일(*.java)의 구성
    1) package문
    2) import문
    3) 클래스 선언

  • import문의 선언

    import 패키지명.클래스명;
        or
    import 패키지명.*;
    • 패키지명.* : 같은 패키지에서 여러 클래스 사용될 때, 지정된 패키지에 속하는 모든 클래스를 패키지명 없이 사용 가능
      • 마찬가지로 컴파일 시간이 길어질 수는 있어도 프로그램 성능에는 영향x
      • import하는 패키지 수가 많을 때는 어느 클래스가 어느 패키지에 속하는지 구별하기 어렵다는 단점.
      • 클래스 이름 대신 *을 사용해도 하위 패키지의 클래스까지 포함하는 것은 아님
        import java.util.*;
        import java.text.*;
        위 import문을 import java.*;로 대체할 수는 없음.
  • System, String 등 java.lang 패키지의 클래스들을 패키지명 없이 사용할 수 있었던 것은 모든 소스파일에 묵시적으로 import java.lang.*; 이 선언되어 있기 때문 : 매우 자주 사용되는 클래스들이 속한 패키지이므로 따로 선언하지 않아도 되도록 한 것.



static import문

  • static 멤버를 호출할 때 클래스 이름 생략 가능 : 특정 클래스의 static 멤버를 자주 사용할 때 편리 + 코드 간결해지는 효과
import static java.lang.Integer.*;	// Integer 클래스의 모든 static 메서드
import static java.lang.Math.random;	// Math.random()만
import static java.lang.System.out;		// System.out을 out만으로 참조 가능
  • 위 static import 문을 선언했다면,
System.out.println(Math.random());

위 코드를

out.println(random());

과 같이 간략히 할 수 있음

profile
과거의 내가 현재의 나보다 똑똑할 때가 있다.

1개의 댓글

comment-user-thumbnail
2023년 7월 20일

소중한 정보 감사드립니다!

답글 달기