public interface PhysicalConstants {
static final double AVOGADROS_NUMBER = 6.022_140_857e23;
static final double BOLTZMANN_CONSTANT = 1.380_648_52e-23;
static final double ELECTRON_MASS = 9.109_383_56e-31;
}
java.io.Object.StreamConstants
실수로 포함된 것으로 생각해야 하고 따라 해서는 절대 안됨결론 🚀
상수 인터페이스의 활용을 억제하기 위해 나오지 않았나..?
라는 생각이 든다.static 필드나 메소드에 접근할려면 일반적으로 이렇게 접근할 것 이다.
{ClassName} + {.} + {Method | Field}
이러한 접근방식에 단점은 매번 사용하려는 메소드나 필드 앞에 Class 명을 기술하는게 매우 번거롭다는 것이다.
하지만, static import 을 이용하면 획기적으로 이러한 문제를 줄일 수 있다.
static import 를 사용하기 전 💡
Math API 에 있는 필드와 메소드를 사용하기 위해선 위와 같은 문법으로 기술해야한다. 만약 Math API 를 사용하는 곳이 많아진다면??아마 너무 번거롭지 않을까??
static import 를 사용한 후 💡
Math 클래스를 작성하지 않아도 필드나 메소드에 접근이 가능해졌다. 이로써 번거로운 작업은 조금이나마 덜어졌다고 말할 수 있다.
위와 같이 정적인 필드나 메소드에 접근할 때 번거로움을 줄일 수 있지만, 너무 과하게 사용하면 오히려 가독성이 떨어질 것이고, 변수명, 메소드명으로만 나와 있기 때문에 클래스의 멤버로 오해하기 쉬울 것이다. 그렇기에 일정 시간이 지나면 코드를 분석할 때 어려움을 겪을 것 같다.
환경변수란? 🤔
환경변수 사용하는 이유 💡
/Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk
이러한 경로에 자바가 설치되었다고 가정해보면/Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk
경로로 이동하여 javac 명령을 실행해야만 한다.환경변수 설정 📌
/Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk
에 설치된다java -version
vi ~/.zshrc
명령어를 입력한다source ~/.zshrc
명령어를 입력하여 수정된 zshrc 파일을 설정해준다. .class 파일을 실행할 때 사용할 클래스들의 위치를 가상머신에게 알려주는 역할을 한다.
-claspath 옵션을 사용하지 않을 경우 클래스 파일이 위치한 현재 디렉토리를 기본 classpath로 잡아준다
-classpath 옵션을 사용하지 않을 때
public class WhatYourName {
public static void main(String[] args) {
AAA a = new AAA();
a.showName();
BBB b = new BBB();
b.showName();
}
}
public class AAA {
public void showName() {
System.out.println("AAA");
}
}
public class BBB {
public void showName() {
System.out.println("BBB");
}
}
javac WhatYourName.java 명령어를 이용하여 컴파일을 하면
각 자바 파일에 해당하는 클래스 파일이 만들어진다.
이 후 java WhatYourName 명령어를 입력하면 AAA, BBB가 출력되는 결과를 확인할 수 있다.
만약 AAA.class, BBB.class 파일을 옮긴다면??
pathtest라는 새로운 디렉토리를 만든 후 그 AAA.class, BBB.class 파일을 옮긴 후에 다시 한번 java WhatYourName을 실행시켜봤다
AAA 라는 클래스를 찾을 수 없다는 에러가 나왔다. 이 뜻은 WhatYourName에서 AAA 클래스를 참조하고 있는데 참조하고 있는 AAA 클래스를 찾을 수 없다는 것이다. 그 이유는 위에서 AAA.class, BBB.class 파일을 pathtest 디렉토리로 옮겼기 때문이다. 그럼 어떻게 해야할까 바로 이때 사용하는 옵션이 -classpath 옵션이다.
바로 결과부터 보면
-classpath 뒤에 오는 "파일 절대 경로"를 입력해주면 된다.
-classpath 옵션은 자바를 실행할 때 사용할 클래스들의 위치를 가상머신에게 알려주는 역할을 한다. 즉 WhatYoutName.class가 실행될 때 필요한 AAA.class, BBB.class의 위치를 가상머신에게 알려주는다는 것이다.
. : 현재 디렉토리에서 클래스를 찾는 다는 뜻이고
;(:) (윈도우에선 ;, 리눅스나, macOS일 경우 : 사용) : 경로와 경로를 구분해주는 구분자
pathtest (개인별로 디렉토리 명이 다르기 때문에 구분해서 사용하자) : 현재 디렉토리에 없으면 현재 디렉토리의 하위 디렉토리 중 pathtest에서 클래스를 찾으라는 의미이다.
제어자 | 같은 클래스 | 같은 패키지 | 자식 클래스 | 전 체 | 적용 대상 | 비고 |
---|---|---|---|---|---|---|
public | 접근 가능 | 접근 가능 | 접근 가능 | 접근 가능 | 클래스, 멤버 | |
protected | 접근 가능 | 접근 가능 | 접근 가능 | 접근 불가능 | 멤버 | 클래스에 적용할 수 없음 |
default | 접근 가능 | 접근 가능 | 접근 가능 | 접근 불가능 | 클래스, 멤버 | 접근 지정자를 생략한 경우를 말함 |
private | 접근 가능 | 접근 불가능 | 접근 불가능 | 접근 불가능 | 멤버 | 클래스에 적용할 수 없음 |