자바 스터디 7주차 : 패키지

hwanse·2021년 2월 15일
0

Java

목록 보기
8/14

이 글은 백기선님의 라이브 스터디 참여 및 학습 내용에 관한 정리한 글입니다.





학습 목표

  1. package 키워드
  2. import 키워드
  3. 클래스 패스
  4. CLASSPATH 환경변수
  5. -classpath 옵션
  6. 접근지시자




package

보통 바탕화면에서 여러 파일들이 있으면 공통된 카테고리를 추출해서 새 폴더를 생성해 해당 카테고리명으로 파일들을 분류하여 관리한다. 자바의 패키지 또한 이와 동일한 개념이다. 패키지는 비슷한 성격의 자바 클래스 파일들을 분류하는 디렉토리인 것이다.

특징

  • 클래스를 구분짓는 폴더 개념
  • 패키지의 가장 상위 디렉토리(root)에서 실행해야 한다는 약속이 있기 때문에 해당 패키지로 가서 컴파일 하지 않는다.
  • 소스에 가장 첫 줄에 있어야하며, 패키지 선언은 소스 하나에 하나만 있어야한다.
  • 패키지 이름과 위치한 폴더의 이름이 같아야한다.
  • 패키지 이름을 java로 시작하면 안된다.
  • 모든 클래스에는 정의된 클래스 이름과 패키지 이름이 있다. 이 둘을 합쳐야 완전하게 한 클래스를 표현한다고 할 수 있으며, 이를FQCN(Fully Qualified Class Name)라고 표현한다.
    • 예를 들어 자바의 Map 객체를 사용한다 가정하자, 해당 Map은 자바에서 편의를 제공해주는 자료구조 API이며 이 Map 클래스의 FQCN은 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
패키지는 두 종류로 나눠볼 수 있다.

  • Built-In Package : 자바가 제공하는 패키지
  • User-Defined Package : 사용자가 커스텀하여 만든 패키지

빌트 인 패키지를 좀 더 설명하자면, 자바는 개발자들이 사용할 수 있도록 편의성을 제공하기 위해서 여러 많은 패키지, 클래스들을 제공하고 있다.
예를 들어 java.lang, java.util 패키지가 개발자들이 자주 사용했던 클래스들을 포함하고 있는 아주 대표적인 패키지다.



import

외부 패키지의 클래스를 불러와 코드를 사용할 경우에는 본래 클래스명 앞에 패키지를 명시하여 선언해야한다. 그러나 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

여기서의 CLASSPATH는 운영체제의 환경변수를 말한다. JVM이 시작될 때 JVM의 클래스 로더는 이 환경 변수값을 참조한다. 환경 변수에 설정된 디렉토리가 호출되었을 때 하위 클래스들을 먼저
로딩하게된다. 예로 Window 10 OS 환경 변수 등록시에는 다음과 같이 설정한다.
제어판-시스템-고급 시스템 설정-환경 변수 편집메뉴에서 CLASSPATH를 Java가 설치된 경로에 lib 폴더 경로를 지정해주면 된다. (%JAVA_HOME%/lib)



-classpath

이것은 자바 컴파일러를 사용할 때 런타임시에 option으로 지정해주는 키워드이다. 해당 옵션은 컴파일러가 컴파일하기 위해서 필요한 클래스 파일들을 찾기 위한 컴파일시 참조할 파일 경로를 지정할 때 사용한다. java, javac 명령어 모두 사용 가능
javac [options] [source files] 와 같은 형태로 사용이 가능하며, 예로 들어 javac -classpath C:/Java/HelloWorld.java 같은 형식으로 사용하게 된다.



접근 지시자

접근 지시자는 클래스, 메소드, 멤버 변수를 선언할 때 모두 사용된다. 자바에서 접근 지시자는 4가지가 있다. public, protected, default, private 이다. 이 접근 지시자를 사용해서 클래스, 메소드, 멤버 변수들에 대한 접근 허용범위를 정하여 제한을 걸수가 있다.

허용 범위 순서
(큼) public > protected > default > private (작음)

클래스 내부동일 패키지상속받은 클래스import한 클래스
publicOOOO
protectedOOOX
defaultOOXX
privateOXXX


참고

profile
만사가 귀찮은 ISFP가 쓰는 학습 블로그

0개의 댓글