본문 바로가기
Study/Java_study

Java_study_7 (패키지)

by hjshims 2021. 8. 11.

♨학습내용

더보기

package 키워드

import 키워드

클래스패스

CLASSPATH 환경변수

-classpath 옵션

접근지시자

 

  • package 키워드

- Package는 Class, Interface file의 집합이다.

- 클래스를 구분짓는 폴더 개념

- 패키지의 가장 상위 디렉토리(root)에서 실행해야 한다는 약속이 있기 때문에 해당 패키지로 가서 컴파일 하지 않는다.

- 소스에 가장 첫 줄에 있어야하며, 패키지 선언은 소스 하나에 하나만 있어야한다.

- 패키지 이름과 위치한 폴더의 이름이 같아야한다.

- 패키지 이름을 java로 시작하면 안된다.

- 모든 클래스에는 정의된 클래스 이름과 패키지 이름이 있다. 이 둘을 합쳐야 완전하게 한 클래스를 표현한다고 할 수 있으며, 이를FQCN(Fully Qualified Class Name)라고 표현한다.

- 예를 들어 자바의 Map 객체를 사용한다고 가정 했을 때, 해당 Map은 자바에서 편의를 제공해주는 자료구조 API이며 이 Map 클래스의 FQCN은 java.util.Map이다.

 

package com.example.test;	// package

public class Car {
    // logic
}

 

- 위 소스를 기준으로 보면 FQCN(Fully Qualified Class Name) 은 아래와 같다.

 

Class Name : Car
Package Name : com.example.test
FQCN : com.example.test.Car

 

  • Package Naming Rule : 최상위 도메인/나라코드.회사명.프로젝트명

- 최상위 도메인/나라코드 : com, net, org...

- 회사명 : 회사명, 그룹명...

- 프로젝트명 : 프로젝트명, 프로그램명

 

  • Built In Package

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

 

package com.example.test;

public class Car {
    public void print() {
        String str = "";    // 별도의 import없이 java.lang.String을 사용할 수 있음
    }
}

 


 

  • import 키워드

- Import는 다른 클래스나 인터페이스를 참조할 때 사용한다.

- 동일한 패키지 내의 클래스나 인터페이스를 참조할 때는 별도로 추가하지 않아도 된다.

- 다른 패키지의 클래스나 인터페이스를 참조할 때 사용한다.

- Static을 사용할 때도 사용할 수 있다.

 

- 아래와 같이 import 키워드를 사용할 수 있다.

 

import 패키지명.클래스명

 

- 패키지의 모든 하위 클래스를 import 하는 경우 import 패키지명.* 처럼 import 할 수 있다.

 

import java.util.*

 

- 만약 서로 다른 패키지가 같은 이름을 가진 클래스를 가지고 있다면 이는 컴파일시 에러로 이어진다.

- 왜냐하면 컴파일러가 무슨 클래스를 load 해야될지 모르기 때문이다.

- 이러한 경우를 피하기 위해서는 특정 클래스의 주소를 import하는 방식을 사용해야한다.

- 같은 이름을 가진 클래스들을 모두 사용해야한다면 패키지 전체 주소를 이용하는 방식을 사용해야한다.

ex) Date라는 클래스는 java.util 패키지에도 존재하고 java.sql 패키지에도 존재한다.

 

import java.util.*;
import java.sql.*;

 

- 이렇게 사용할 경우 컴파일 에러를 발생시키기에 import 방식이 아닌 전체 주소를 이용하는 방식을 이용해야한다.

 

java.util.Date utilDate = new java.util.Date();
java.sql.Date sqlDate = new java.sql.Date(0);

 


 

  • 클래스패스

- JVM에서 Application을 구동하면 Class Loader가 클래스패스 변수를 기준으로 클래스 파일들을 찾아 Load 시킨다.

  • Java Application 실행순서
  1. JVM이 실행되기 전에 메모리를 할당 받는다.
  2. Java Complier에서 .java 파일을 .class로 변환한다. (바이트 코드)
  3. Class Loader가 .class 파일을 Load 한다.
  4. Excution Engine을 통해 Load된 Class 파일을 해석한다. 
  5. 해석된 byte code는 Runtime Memory Area를 통해 사용된다.

- Java Application 실행 중 3번에서 Class Loader가 .class 파일을 찾을 때 클래스패스를 기준으로 찾는다.

 

- 클래스패스를 설정하는 방법은 2가지가 있다.

(1) 환경 변수 CLASSPATH를 사용하는 방법

(2) java runtime에 -classpath 옵션을 사용하는 방법

 


 

  • CLASSPATH 환경변수

- 컴퓨터 시스템 변수 설정을 통해 지정할 수 있다.

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

 

 

<https://dev-coco.tistory.com/11>

 


  • -classpath 옵션

- 원래의 자바 컴파일러인 javac를 사용할 때는 javac <options> <source filed>와 같은 형태로 컴파일을 했었지만

- 참조할 클래스 파일들을 찾기 위해서 파일 경로를 지정해주는 -classpath 옵션이 있다.

- 예를들어, 컴파일 할 Test.java파일이 C:\Users에 있고, 필요한 클래스파일들이 C:\Java\classes에 존재한다면,

- javac -classpath C;\Java\classes C:\Users\Test.java로 옵션을 주면 컴파일시에 클래스패스가 참조된다.

- 이 때, -cp로 약자를 사용하여 옵션을 주는 것도 가능하다.

 

 


 

  • 접근지시자

- 접근지시자는 클래스, 메소드, 인스턴스 및 클래스 변수를 선언할 때 사용된다.

- 접근지시자는 크게 public, protected, default, private 으로 총 4가지이다.

 

  같은 클래스 같은 패키지 상속받은 클래스 import한 클래스
public O O O O
protected O O O X
default O O X X
private O X X X

 

* public

- 어디서든 접근 가능하다.

* protected

- 같은 패키지에 있거나, 상속 받는 경우 사용할 수 있다.

* default

- 아무런 접근제어자를 적어주지 않은 경우이며, 같은 패키지 또는 클래스 내부에서 접근 가능하다.

* private

- 해당 클래스 내에서만 접근 가능하다.

 

'Study > Java_study' 카테고리의 다른 글

Java_study_9 (예외처리)  (0) 2021.08.23
Java_study_8 (인터페이스)  (0) 2021.08.17
Java_study_6 (상속)  (0) 2021.08.09
Java_study_5 (클래스)  (0) 2021.08.04
Java_study_4 (제어문)  (0) 2021.08.01