본문 바로가기

프로그래밍/Java

패키지

package

패키지는 서로 관련이 있는 클래스와 인터페이스의 묶음이다.

패키지 사용의 장점

  • 서로 관련 있는 클래스나 인터페이스를 디렉토리로 묶어 효율적인 관리가 가능하다.
  • 패키지마다 독립적인 이름 공간을 가지기 때문에 다른 패키지에 있는 동일한 클래스의 이름과 충돌하지 않는다.
  • 패키지별로 접근제어를 할 수 있다.

패키지 명명 규칙

  • 대,소문자를 모두 사용 가능하지만 클래스명과 구분하기 위해 소문자만 사용한다.
  • 모든 클래스는 반드시 하나이상의 패키지에 포함되어야 한다.
    • 패키지를 선언하지 않고도 문제가 없었던 이유는 이름없는 패키지 때문
  • java로 시작하면 안 된다.

import

클래스를 다른 파일에서 사용하기 위해 패키지명이 포함된 클래스의 풀네임을 사용해야 한다.
그러나 이는 매우 불편하기 때문에 import를 사용하여 패키지의 정보를 제공하는 것으로 컴파일 시에 컴파일러가 import를 통해 사용된 클래스의 패키지 정보를 확인하고 클래스명에 패키지명을 붙여준다.

static import

static멤버를 호출할 때 클래스 이름을 생략할 수 있다.

import static java.lang.Math.random;

public class Test {
    public static void main(String[] args) {

        System.out.println(random());   //Math.random();
    }
}

클래스패스

클래스를 찾기 위한 경로로 프로그램을 실행할 때 클래스를 찾는 기준이 되는 경로이다.
소스코드를 컴파일하면 바이트 코드로 변환되며 이 변환된 파일을 찾아야 되는데 이떄 클래스패스를 사용하게 된다.

CLASSPATH 환경변수

환경변수는 OS에서 지정해주는 변수로 JVM과 같은 애플리케이션들은 환경변수의 값을 참고하여 동작한다.
자바의 경우 CLASSPATH를 사용하는데 이값을 지정해두면 -classpath옵션을 매번 사용하지 않아도 되 편리하다.

윈도우

윈도우의 경우 시스템 속성에서 환경변수를 지정할 수 있다.

내 컴퓨터 우클릭 - 속성 - 고급 시스템 설정 - 고급 탭의 환경변수

macOS

macOS의 경우 bash쉘을 사용하는사람은 .bash_profile에 적어주면 됩니다.
zsh를 사용하는경우 vi ~/.zshrc명렁어를 입력 후 i를 눌러 편집모드로 들어가 아래 내용을 입력합니다.

export JAVA_HOME = /Library/Java/JavaVirtualMachines/openjdk-12.0.1.jdk/Contents/Home/
export PATH=${PATH}:$JAVA_HOME/bin:

JAVA_Home= 뒤의 경로는 자신이 설치한 경로를 적어주면 됩니다.
이후 :wq로 저장한 후 source ~/.zshrc명령어로 적용합니다.

컴파일시 -classpath 옵션

컴파일러를 통해 컴파일할 때 필요한 클래스를 찾기 위해 경로를 지정해주는 옵션이다.

javac -classpath 경로
javac -classpath 경로; 경로2; 경로3   // 참조할 클래스 파일들이 여러 디렉토리에 존재한다면 ;로 구분한다.

접근 제어자

접근 제어자는 멤버나 클래스에 사용되며 접근 제어자를 통해 멤버나 클래스를 외부에서 접근하지 못하도록 제한할 수 있다.
자바에서는 네 가지의 접근 제어자가 존재

public

public으로 선언된 클래스의 접근에 제한 없어 해당 객체를 사용하는 어느 곳에서든지 접근할 수 있다.

protected

같은 패키지에서 접근 가능하며 다른 패키지에 있지만 상속관계에 있는 자식클래스에서 접근할 수 있다.

default

default라는 키워드가 아닌 접근 제어자를 생략하면 자동으로 적용되며 같은 패키지 내에서만 접근이 가능

private

private를 사용하면 클래스 멤버가 외부로 공개되지 않아 직접 접근할 수 없고 public 메소드를 통해서만 접근할 수 있다.

public class Person {
    public String name;

    private int age;

    protected void setAge(int age) {
        this.age = age;
    }
}

public class PersonTest {
    public static void main(String[] args) {
        Person person = new Person();
        person.name="yang";
        person.age=30;  // 접근 불가
        person.setAge(30);// 같은 패키지 내에서 접근 가능
    }
}

참고문서

Java의 정석 - 남궁 성
http://www.tcpschool.com/java/intro

'프로그래밍 > Java' 카테고리의 다른 글

인터페이스  (0) 2021.01.09
연산자  (0) 2021.01.06
데이터타입, 변수, 배열  (0) 2020.12.31
상속  (0) 2020.12.26
JVM이란?  (0) 2020.12.22