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
- ex)
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)