Study/java

[백기선님의 자바 라이브 스터디] 7주차 - 패키지

에디개발자 2021. 2. 19. 00:26
반응형

www.youtube.com/watch?v=HLnMuEZpDwU 

나를 닮았다고 한다...

목표

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

학습할 것 (필수)

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

추천 도서

book.naver.com/bookdb/book_detail.nhn?bid=1486282

 

테스트 주도 개발

최근 주목받고 있는 프로그래밍 방법인 테스트 주도 개발, 즉 TDD를 설명한 최초의 책이자, 가장 권위적인 책. 테스트 주도 개발을 퍼뜨린 장본인이며 객체 지향 프로그래밍의 선구자 중 한 사람

book.naver.com

Package 키워드

Package란 무엇인가?

  • Package는 Class, Interface file의 집합
  • 첫 줄에 작성되어야함
  • 모든 클래스에는 클래스 이름과 패키지 이름 존재합니다. 이 둘을 합쳐 FQCN( Fully Qualified Class Name ) 이라고 합니다.

 

package com.example.practice;    // package

public class Car {
    // logic
}

위 소스 기준으로 FQCN을 알아보면 아래와 같습니다.

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

Built-In-Package

개발자들이 가장 많이 사용하는 Package는 java.lang, java.util 일 것입니다.

이러한 Package는 자바 내부에 Built in 되어있기 떄문에 import를 해주지않아도 사용가능합니다.

package com.example.practice.annotations;

public class Car {
    public void print() {
        String a = "";    // 별도의 import없이 java.lang.String을 사용할 수 있다
    }
}
  • Package Naming Rule

{최상위 도메인/나라코드}.{회사명}.{프로젝트명}

  • 최상위 도메인/나라코드 : com, net, org...
  • 회사명 : 회사명, 그룹명...
  • 프로젝트명 : 프로젝트명, 프로그램명

Import 키워드

  1. Import는 다른 클래스나 인터페이스를 참조할 때 사용합니다.
  2. 동일한 패키지 내의 클래스나 인터페이스를 참조할 때는 별도로 추가하지 않아도 됩니다.
  3. 다른 패키지의 클래스나 인터페이스를 참조할 떄 사용됩니다. 
  4. Static을 사용할 때도 사용할 수 있습니다.
package com.example.practice.pack;    // package 

import com.example.practice.other.Policy;    // 다른 패키지 참조

// static을 참조할 때는 아래와 같이 2가지 방법으로 참조 가능
//import static com.example.practice.pack.StoreConstant.*;
import static com.example.practice.pack.StoreConstant.ADDRESS;
import static com.example.practice.pack.StoreConstant.NAME;
import static com.example.practice.pack.StoreConstant.VISITOR;


public class Store {
    private Staff staff;    // 같은 패키지 참조이기 때문에 import되지 않음
    private Policy policy;

    public Store() {
        staff = new Staff();
        policy = new Policy();

    }

    public void print() {
        System.out.println(ADDRESS);
        System.out.println(NAME);
        System.out.println(VISITOR);
    }

}

import 키워드를 사용하여 클래스나 인터페이스를 추가할 때에는 FQCN을 사용합니다.

import 키워드 사용 시 '*'를 사용하면 해당 패키지에 있는 모든것을 참조하게 됩니다. 이 방법은 해당 패키지에 있는 모든 것을 참조하지 않는 이상 Resource 낭비이므로 비추천합니다.

클래스패스

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를 통해 사용됩니다.
JVM의 자세한 내용은 1주차 내용을 참조해주세요.

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

 

클래스패스 설정하는 방법은 2가지 방법이 있습니다.

  • 환경변수를 이용
  • java runtime 시 -classpath 사용

접근지시자

접근제어자는 클래스, 메소드, 인스턴스 및 클래스 변수를 선언할 때, 사용됩니다. 접근지시자를 통해 협업 시 해당 클래스를 어떻게 사용하는지 알 수 있습니다. 

 

허용 범위

public > default > protected > private

  클래스내부 동일패키지 상속받은클래스 이외의 영역
private o x x x
default o o x x
protected o o o x
public o o o o

위와 같이 접근을 제한할 수 있습니다.

반응형