이 글은 백기선님의 라이브 스터디 참여 및 학습 내용에 관한 정리한 글입니다.
보통 바탕화면에서 여러 파일들이 있으면 공통된 카테고리를 추출해서 새 폴더를 생성해 해당 카테고리명으로 파일들을 분류하여 관리한다. 자바의 패키지 또한 이와 동일한 개념이다. 패키지는 비슷한 성격의 자바 클래스 파일들을 분류하는 디렉토리인 것이다.
특징
java.util.Map
이다.package
키워드를 사용하는 예시를 보자, study라는 패키지가 있고 그 아래 App이라는 클래스가 있다고 가정해보자.
package study;
public class App {
}
이와 같은 형태로 package
키워드를 사용하면된다.
그런데 패키지의 하위 패키지를 추가하여 패키지의 depth를 증가시킬 수 있고 하위 패키지임을 표현할 때에는 도트(.)를 통해서 표현이 가능하다. 아래 예시를 보자
package study.person.student;
public class Score {
}
여기서의 패키지 구조는 study > person > student 순으로 패키지 구조가 만들어진 것이고 그 아래 Score라는 클래스 파일이 위치해 있는 것이다.
패키지 이름 지정 규칙(일반적인 형태)
패키지 시작이름 | 내용 |
---|---|
java | 자바 기본 패키지(Java vendor 개발) |
javax | 자바 확장 패키지(Java vendor 개발) |
org | 일반적으로 비영리단체(오픈소스) 패키지 |
com | 일반적으로 영리단체(회사)패키지 |
패키지 명명 규칙
Built-In Package
패키지는 두 종류로 나눠볼 수 있다.
빌트 인 패키지를 좀 더 설명하자면, 자바는 개발자들이 사용할 수 있도록 편의성을 제공하기 위해서 여러 많은 패키지, 클래스들을 제공하고 있다.
예를 들어 java.lang
, java.util
패키지가 개발자들이 자주 사용했던 클래스들을 포함하고 있는 아주 대표적인 패키지다.
외부 패키지의 클래스를 불러와 코드를 사용할 경우에는 본래 클래스명 앞에 패키지를 명시하여 선언해야한다. 그러나 import
키워드를 사용하여 해당 패키지명을 생략하는 것이 가능하다.
다음 예시를 보자
package study;
import study.person.Another;
import java.util.Map;
public class App{
public static void main(String[] args) {
Another another = new Another();
anther.run();
Map<String, String> map = new HashMap<>();
}
}
이와 같은 형태로 사용이 가능한 것이다.
import static
해당 키워드는 static한 변수와 static한 메소드를 사용하고자 할 때 용이한 키워드이다. static 하게 사용하는 것이 무엇일까? 보통 우리는 intellij를 사용하여 Junit 테스트를 할 때 이미 자주 사용하고 있었다. 다음 예시를 보자
여기서 import static org.junit.Assert.*;문장을 보자 이 import문을 선언함으로써 아래에 assertArrayEquals라는 메소드를 클래스.메소드명
같은 형태로 사용하지 않게끔 static하게 사용하기 위한 편의성을 제공해준다.
static import를 하지 않았다면 원래라면 Assert.assertArrayEquals() 와 같은 형태로 코드를 기술해야했을 것이다.
클래스 패스란, JVM이나 java 컴파일러에게 사용자 정의 클래스 및 패키지의 위치를 지정해주는 변수 값이다. 자바 클래스를 찾아 사용할 때 해당 클래스 파일들이 어느 장소에 위치해 있는지를 알려주는 값이다.
이미지 참조 : https://www.notion.so/ed8e346f88f54849a06ff968b1877ca5
여기서의 CLASSPATH는 운영체제의 환경변수를 말한다. JVM이 시작될 때 JVM의 클래스 로더는 이 환경 변수값을 참조한다. 환경 변수에 설정된 디렉토리가 호출되었을 때 하위 클래스들을 먼저
로딩하게된다. 예로 Window 10 OS 환경 변수 등록시에는 다음과 같이 설정한다.
제어판-시스템-고급 시스템 설정-환경 변수 편집
메뉴에서 CLASSPATH를 Java가 설치된 경로에 lib 폴더 경로를 지정해주면 된다. (%JAVA_HOME%/lib)
이것은 자바 컴파일러를 사용할 때 런타임시에 option으로 지정해주는 키워드이다. 해당 옵션은 컴파일러가 컴파일하기 위해서 필요한 클래스 파일들을 찾기 위한 컴파일시 참조할 파일 경로를 지정할 때 사용한다. java, javac 명령어 모두 사용 가능
javac [options] [source files]
와 같은 형태로 사용이 가능하며, 예로 들어 javac -classpath C:/Java/HelloWorld.java 같은 형식으로 사용하게 된다.
접근 지시자는 클래스, 메소드, 멤버 변수를 선언할 때 모두 사용된다. 자바에서 접근 지시자는 4가지가 있다. public, protected, default, private 이다. 이 접근 지시자를 사용해서 클래스, 메소드, 멤버 변수들에 대한 접근 허용범위를 정하여 제한을 걸수가 있다.
허용 범위 순서
(큼) public > protected > default > private (작음)
클래스 내부 | 동일 패키지 | 상속받은 클래스 | import한 클래스 | |
---|---|---|---|---|
public | O | O | O | O |
protected | O | O | O | X |
default | O | O | X | X |
private | O | X | X | X |