[자바 스터디] 7주차 과제: 패키지

yunu·2022년 5월 15일
0
post-thumbnail

6주차 과제: 상속

목표

자바의 패키지에 대해 학습하세요.

학습할 것

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

package 키워드

package

  • 비슷한 성격의 클래스들을 모아 만든 자바의 디렉토리
  • 서로 같은 이름의 클래스를 생성하더라도 다른 패키지에 있다면 충돌을 피할 수 있음
  • 패키지 이름과 위치한 폴더의 이름은 같아야 함
  • 소문자로 생성하는 것이 원칙
  • FQCN(Fully Qualified Class Name) : 완전한 클래스 표현, 패키지명.클래스명

선언하는 법

  • 패키지 선언문은 반드시 소스파일에서 주석과 공백을 제외한 첫 번째 문장이어야 하고 단 한번만 선언될 수 있음
  • 패키지 선언문이 없을 경우는 (default package)java 디렉토리 하위에 패키지 생성을 하지 않았을 때를 의미
package 패키지명; # 주석과 공백을 제외한 소스파일의 가장 첫 번째 문장에 위치

import 키워드

import

  • 다른 패키지에 있는 패키지 멤버(Class, Interface)를 접근하는 방법 중 하나로 import 키워드 사용
  • 접근하는 다른 방법으로 FQCN을 통해 접근할 수 있음

선언하는 법

import 패키지명.클래스명; // 패키지 멤버를 import
import 패키지명.*;		// 패키지 전체를 import, 권장되지 않는 표현법
  • import를 하지 않아도 되는 패키지 : 같은 패키지의 클래스, Built-in Package
  • Built-in Package 같은 경우는 아주 기본적인 패키지이기 때문에 별도로 import 을 해 줄 필요없음

static import

  • 다른 패키지에 있는 패키지 멤버의 static 변수 또는 메서드(정적 멤버)를 바로 접근할 수 있도록 함
  • 테스트 소스를 작성할 때 JUnit의 Assertions.assertEquals() -> assertEquals()을 사용할 때 많이 사용됨
import static java.lang.Math.abs;
...
int num = abs(-100) // Math.abs(-100)와 같이 사용할 필요없음
...

클래스패스

클래스패스

  • JVM 은 런타임시 변환된 코드(.class에 있는 바이트 코드)를 클래스 로더에 로딩하기 위해서는 클래스패스를 이용해서 파일의 경로를 알아냄
  • 클래스패스를 지정하지 않으면 기본적으로 현재 실행되는 디렉토리(.)의 위치가 클래스패스로 지정됨
  • 클래스패스로 주어진 디렉토리와 그 하위 디렉토리를 전부 참조하여 로딩할 클래스 찾음

CLASSPATH 환경변수 (클래스패스를 지정하는 방법 1)

  • CLASSPATH=경로;경로 // ";" 구분자(맥에선 ":")를 통해 경로 여러 개 등록 가능 시스템 환경 변수로 등록하게 되면 JVM 의 클래스로더는 이 디렉토리에 있는 클래스를 로드

-classpath 옵션 (클래스패스를 지정하는 방법 2)

  • java -classpath(or -cp) "경로;경로" 실행파일 시스템 환경 변수보다 우선순위를 가짐

접근지시자

  • 접근제어자(Access Modifier), 접근지시자(Access Identifier), 접근제한자(Access Modifier), 접근수준지시자(Access-level Modifier) 모두 같은 것을 의미
  • package-private는 default와 같은 접근지시자

출처:
https://young-bin.tistory.com/68
https://jjunbbang.tistory.com/8
https://kils-log-of-develop.tistory.com/430
https://soongjamm.tistory.com/118
https://velog.io/@kasania/Java-Static-import%EC%97%90-%EB%8C%80%ED%95%9C-%EA%B4%80%EC%B0%B0
https://github.com/ByungJun25/study/tree/main/java/whiteship-study/7week
https://sowon-dev.github.io/2020/07/08/200709javai/

profile
rip

0개의 댓글