Java week7


7주차

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

package 키워드

  • 클래스를 저장 관리하는 것 = package
  • 패키지가 다르면 같은 이름의 클래스라도 다르게 인식
  • 클래스만 복사해서 사용하는 것은 불가하다. 패키지 전체를 이동시켜야 한다.

예시

com.mycompany 패키지에 속한 Car 클래스

//Car 클래스의 전체이름
com.mycompany.Car

//물리적인 저장 경로
com/mycompany/Car.class

FQCN(Fully Qualified Class Name)

  • 패키지+클래스이름
    • ex) com.mycompany.Car

package 선언

  • 컴파일 과정에서 자동으로 생기는 폴더
  • 소문자, java로 시작하는 패키지는 사용 불가, 숫자로 시ㅏㄱ하면 안되며, _,$를 제외한 특수문자 불가
  • 도메인 이름.프로젝트네임 으로 패키지를 만드는 것이 중복을 피할 수 있으며 관례이다

컴파일 해보기

  • javac -d {경로} ClassName.java
    • ex1) javac -d . ClassName.java // 현재 폴더 내에 생성
    • ex2) javac -d ..\bin ClassName.java // 현재 폴더와 같은 위치의 bin 폴더에 생성
ex1)

➜  src ls
Calculator.java     Car.java            ElectricCar.java    MathCalculator.java Week5.java
➜  src javac -d . Car.java  
➜  src ls
Calculator.java     Car.class           Car.java            ElectricCar.java    MathCalculator.java Week5.jav

import 키워드

  • import를 사용하지 않는 경우(다른 패키지 클래스 사용)
//com.tesla 패키지에 Tire 클래스를 이용해서 필드 선언

package com.mycompany

public class car {
    com.tesla.Tire tire = new com.tesla.Tire();
}
  • import를 사용(다른 패키지 클래스 사용)
//com.tesla 패키지에 Tire 클래스를 이용해서 필드 선언

package com.mycompany

import com.tesla.* // com.tesla 하위 클래스 전부 사용.
import com.tesla.company.* //하위 클래스가 있다면 하위 클래스에 소속된 클래스는 가져올 수 없으므로 이렇게 추가한다.

public class car {
    Tire tire = new Tire();
}

클래스패스

  • 컴파일된 class 파일들의 위치 경로. 즉 class 경로를 지정해서 자바가 필요로하는 클래스를 로드할 수 있도록 지정하는 것
  • 만약 같은 디렉토리 내에 없는 class를 가지고 java를 실행하면? -> classNotFoundException

클래스패스, -classpath 를 통해서 지정

  • ex) java -classpath ".;lib" example
    • java 로 example 파일을 실행시킬 때, -classpath 옵션을 주어서 .<-현재디렉토리 확인 ;<- 경로와 경로를 구분 lib<- 현재 디렉토리 내 lib에서 찾아라
    • 즉 -classpath 옵션으로 경로를 잡아줄 때, 실행 시킬 파일이 속한 경로 및 내부적으로 사용해야 할 경로를 명시해주어야 함.
  • java example 처럼 -classpath 옵션을 주지 않으면 현재 디렉토 리를 기준으로 한다 = java -classpath "." example

  • 결국 classpath 라는 것은 java를 통해 실행시키고자 할 때, 최상위 경로라고 볼 수 있다!

CLASPATH 지정

  • 자바는 클래스 패스로 환경변수로 CLASSPATH를 사용하게되는데 이를 설정하게되면 이점이 있다.
  • 즉, 위처럼 -classpath 옵션을 사용하지 않아도 실행되는 편리함이 있다. => 어디에 있더라도 접근가능한 글로벌 변수 설정 == CLASSPATH
    • 참고: mac os java 변수 설정. https://m.blog.naver.com/kaylee51/221722379602
    • 참고: intellij classpath 설정. https://m.blog.naver.com/haskim0716n/221812414926

접근지시자

  • 클래스를 설계할 때, 외부에서 접근할 수 있는 멤버(필드, 생성자, 메소드)를 설계하기 위해서 사용하는 것
  • public > protected > default > private 4개의 종류가 있다. (접근제한 강화 순. 약함 > 강함)
접근 제한적용 대상접근할 수 없는 클래스
public클래스, 필드, 생성자, 메소드없음
protected필드, 생성자, 메소드자식 클래스가 아닌 다른 패키지에 소속된 클래스
default클래스, 필드, 생성자, 메소드다른 패키지에 소속된 클래스
private필드, 생성자, 메소드모든 외부 클래스

예시

//default 접근 제한(class level)
class 클래스 { ... }

//public 접근 제한(class level)
public class 클래스 { ... }


-----------------------------

//public 접근 제한(생성자)
public A(boolean b) {}

//protected 접근 제한(생성자)
protected A(boolean C) {}

//default 접근 제한(생성자)
A(int b) {}

//private 접근 제한(생성자)
private A(String s)