[whiteship] 7주차 - 패키지

노력을 즐기는 사람·2021년 1월 10일
0
post-thumbnail

학습할 것 (필수)

  • package 키워드
  • import 키워드
  • 클래스패스
  • CLASSPATH 환경변수
  • -classpath 옵션
  • 접근지시자

package

비슷한 성격의 자바 클래스들을 모아 놓는 자바의 디렉토리이다.
패키지를 구성하기 위해서는 package 키워드를 사용한다.

만약 Ferrari 클래스와 Xcient클래스를 각각 sportcar패키지와 truck패키지에 넣고 싶다면 아래와 같이 코딩해야 한다.

package sportcar;

public class Ferrari {}
package truck;

public class Xcient {}

위와 같이 package로 묶으면 총 2개의 폴더와 4개의 파일이 생성된다. (intelliJ Gradle project 기준)

  • src/main/java/sportcar/Ferrari.java
  • src/main/java/sportcar/Xcient.java
  • build/classes/java/sportcar/Ferrari.class
  • build/classes/java/sportcar/Xcient.class

src/main/java 즉, 프로젝트의 루트 디렉토리에서는 package 키워드가 필요 없다.

subpackage

패키지안에 있는 패키지를 서브 패키지라고 한다. 패키지들을 .으로 구분한다.
.을 기준으로 오른쪽에 있는 녀석이 왼쪽에 있는 녀석의 서브패키지이다.

sportcartruckcar 패키지에 넣어보자

package car.sportcar;

...
...

pakcage car.truck;

package 특징

  • 패키지의 이름은 소문자로 작성하기를 권고하고 있다.
  • 패키지의 이름은 유일해야 하기 때문에 회사의 도메인 등이 자주 사용된다.
  • 서로 다른 패키지에 있다면 클래스 이름은 중복될 수 있다.
  • 패키지의 이름을 java로 시작할 수 없다.

import

서로 다른 패키지에 있는 클래스를 사용하고자 할 때 import를 사용한다.

Ferrari에서 Xcient를 사용한다고 할 때 아래와 같다.

import car.Truck.Xcient; 패키지명.클래스명의 규칙을 가진다.

만약 특정 패키지 안에 있는 모든 클래스를 사용하고 싶다면 패키지명.*을 통해서 사용할 수 있다.

import static

static 메소드, 변수를 사용할 때 편리하게 사용할 수 있다.
즉, 클래스 인스턴스 생성없이 메소드를 사용할 수 있게 된다.

CLASSPATH

작성해놓은 클래스를 찾기위한 경로이다.

우리가 작성한 클래스는 물론이고 Built-in class 혹은 외부 라이브러리들을 사용할 때도 JVM이 클래스 패스를 참고하여 클래스 파일들을 찾는다.

CLASSPATH 환경변수

JVM이 시작될 때 JVM의 클래스 로더는 시스템 환경 변수를 호출한다.

윈도우를 기준으로

시스템 환경 변수 편집 -> 환경 변수 -> 새로 만들기 -> 변수이름: CLASSPATH 변수 값: %JAVA_HOME%\lib 를 입력하면 환경 변수 설정이 완료된다.

-classpath 옵션

javac 를 활용해서 컴파일할 때 classpath를 지정할 수 있다.

javac -classpath 를 사용하거나 javac -cp를 사용한다.

각 경로를 ;로 구분할 수 있다.
예시:
`javac -cp .;C:\foo\hello;c:\world\foo'

접근지시자

클래스, 메소드, 변수를 외부에서 접근할 수 있는 범위를 지정한다.

  • public: 모두 접근 가능하다.
  • protected: 같은 패키지에 있거나 자식 클래스인 경우에만 접근 가능하다.
  • package-private: 기본값이며 같은 패키지 내에서만 접근 가능하다.
  • private: 클래스 코드 안에서만 접근 가능하다.
  • 아무것도 적지 않음: 접근지시자를 생략할 수도 있으며 package-private 의 범위를 가진다.

범위가 큰 순서는 아래와 같다.
public > protected > package-private > private

추가 내용

  • FQCN(Fully Qualified Class Name): 패키지 이름 + 클래스 이름

참고

https://kils-log-of-develop.tistory.com/430

profile
노력하는 자는 즐기는 자를 이길 수 없다

0개의 댓글