ex)
프로젝트
└─src
├─ App.java
└─kr
└─hossam
├─ Protoss.java
│
└─unit
├─ Dragun.java
└─ Zilot.java
< 패키지 >
- src 폴더의 하위폴더
- 관련 클래스 및 인터페이스 집합을 구성하는
패키지에 포함된 클래스는 어떤 패키지에 속해 있는지 명시해야 한다
Protoss.java -->>
package kr.hossam;
import
- 클래스 정의 전 다른 패키지 안의 클래스를 참조하겠다는 선언문을 명시하면 클래스 이름만으로 객체 생성이 가능하다
- 패키지의 클래스 사용하려면 import 문 사용
- 내장 패키지: Java에는 java.util(유틸리티 클래스용), java.io(입력/출력용) 및 java.lang과 같은 내장 패키지 세트가 함께 제공된다 (자동으로 가져온다)
Dragun.java, Zilot.java -->>
package kr.hossam.unit;
import kr.hossam.Protoss;
App.java -->>
import kr.hossam.Protoss;
import kr.hossam.unit.Dragun;
import kr.hossam.unit.Zilot;
< 라이브러리 >
- 컴파일이 완료된 클래스들을 배포 목적으로 패키지 단위로 그룹지어 압축한 형태
완성한 기능을 소스파일의 노출 없이 기능 단위로만 배포할 수 있다
- 공통 기능을 제공하여 개발을 용이하게 하는 재사용 가능한 코드 모음
- 확장자: *.jar
- 라이브러리 생성 방법
Ctrl + Shift + P > Java: Export Jar > without main class
- 일반적으로 라이브러리는 다른 프로그램이 활용할 수 있는 재료의 목적으로 생성하기 때문에 main 클래스를
포함하지 않는 형태로 압축한다
- 앞서 생성한 라이브러리(.jar)를 새로운 프로젝트의 lib 폴더에 넣는다.
- main 클래스에서 라이브러리 안의 기능을 활용한다.
--->>>
import kr.hossam.Protoss;
import kr.hossam.unit.Dragun;
import kr.hossam.unit.Zilot;
▽ main 클래스
Zilot z = new Zilot("질럿1호", 150, 130, 100);
//~~~~~ 생략
Dragun d = new Dragun("드라군1호", 200, 150, 100);
//~~~~~ 생략
Protoss p1 = new Dragun("드라군2호", 200, 150, 100);
//~~~~~ 생략
다른 패키지의 클래스로부터 객체를 생성해야 할 경우 해당 패키지의 전체 경로를 명시해야 한다.
kr.hossam.HelloWorld hello = new kr.hossam.HelloWorld();
프로젝트
└─src
└─kr
└─hossam
import구문의 사용
클래스 정의 전 다른 패키지안의 클래스를 참조하겠다는 선언문을 명시하면 클래스 이름만으로 객체 생성이 가
능하다
import kr.hossam.HelloWorld;
public class Foo {
...
HelloWorld h = new HelloWorld();
...
}
Scanner를 사용할 때 명시하던 import문은 java/util 폴더 안에 있는 Scanner 클래스를 참조한다는 것을 의미.
Java언어 안에는 개발자가 참조할 수 있는 수 많은 클래스들이 package 형태로 내장되어 있다.
import 가 package 보다 먼저오는건 X
관례상 폴더구조를 회사도메인 역순. 프로그램명.하위기능 이런식으로 한다
java.com -> com.java.
mavenrepository.com
모든 java library 다 있다
java는 디컴파일 원본소스 뽑아올 수 있다
(
디컴파일 :
원본 코드를 최대한 가깝게 재생성하는 것을 목표로 바이트코드를 가져와 다시 소스 코드로 변환한다.
그러나 컴파일 중에 수행된 최적화 및 변환으로 인해 결과가 원본과 동일하지 않을 수 있다.
)