class AAA{------}
class BBB{------}
class ZZZ{------}
class WhatYourName{
public static void main(String[] args){
AAA aaa = new AAA();
aaa.showName ();
ZZZ zzz= new ZZZ();
zzz.showName();
}
컴파일러가 자바 파일을 찾아서 실행해 나간다
메인 메소드가 읽혀나가기 시작함
실행을 쭉 해가다가 인스턴스생성을 해야 한다
JVM(자바 가상머신)이 AAA가 어떤 틀(클래스)인지 알아야 인스턴스를 생성할 수 있다
JVM은 현재 디렉토리의 배경에서 AAA.class 파일을 찾는다
JVM -> AAA.class 찾기
=================
new AAA(); //발견
class AAA{------} //찾기
class AAA{------} //경로를 한 개단 더 안으로 집어넣어 MC라는 새로운 폴더[디렉토리]에 따로 저장해둔다
class BBB{------}
class ZZZ{------} //경로를 한 개단 더 안으로 집어넣어 MC라는 새로운 폴더[디렉토리]에 따로 저장해둔다
class WhatYourName{
public static void main(String[] args){
AAA aaa = new AAA();
aaa.showName ();
ZZZ zzz= new ZZZ();
zzz.showName();
}
경로를 한 개단 더 안으로 집어넣어 MC라는 새로운 폴더[디렉토리]에 따로 저장해둔다
현재 디렉토리 안에 찾고자 하는 클래스가 없다면, @@경로에 가서 찾아봐라=>'클래스패스'
클래스패스를 지정을 해놓음으로서, 좀 더 편하게 사용이 가능하다
예를 들어, 여러개의 클래스에 걸쳐 두루두루 사용하게 된다면 여러곳에 제공이 된다
그 제공된 기능을 한개의 디렉토리에 묶어놓고 클래스패스로 지정해놓으면 다른 곳에서도 찾기 쉽다
CMD
C:\Users\User>set classpath
classpath 환경 변수가 정의되지 않았습니다.
고정식으로 지정해놓고 사용하는 것은 좋은 방법은 아니다
공통된 디렉토리를 계속 지정해서 찾아야하기 때문에
.java라는 파일 안에 a class b class c lass 가 있다면
한 뭉텅이가 아니라 각각의 클래스 파일을 만들어서 실행 시킨다
절대경로
C:\Users\User>set classpath=. ;C\JavaClass\Myclass;
JavaClass 안에 있는 Myclass만 포함 (비효율적)
상대경로
C:\Users\User>set classpath=. '.\Myclass;
내 디렉토리에 포함되어 있는 Myclass는 전부 포함 (많이 사용되어 진다)
pacage
패키지란 클래스를 모아놓은 일종의 집합이다.
패키지 선언을 한다는 건 경로를 지정하는 것. 공간을 분리 하겠다는 개념
패키지 선언을 하면 달라진 경로를 하나하나 지정해서 인스턴스 생성을 할 수 밖에 없다 (경로가 다르기 때문에)
package 만들기
src 폴더에 마우스 오른쪽 [new]-[package]
패키지 생성 후, 패키지 마우스 오른쪽 [new]-[class] 생성
package javaFirstClass;
public class Circle {
double rad;
final double PI;
public Circle(double r) {
rad =r;
PI=3.14;
}
public double getArea() {
return (rad * rad) * PI;
}
}
package javaFirstClass; // 현재의 클래스가 javaFirstClass 패키지에 속해있는 클래스임을 의미
만약 패키지를 만들지 않고 클래스를 생성하면, 자동으로 디폴트 패키지에 속하게 된다
package.com.wxfx.smart;
public class Circle {
double rad;
final double PI;
public Circle(double r) {
rad =r;
PI=3.14;
}
public double getArea() {
return (rad * rad) * PI;
}
} //www.wxfx.com 의 Circle.java
package.com.fxmx.simple;
public class Circle {
double rad;
final double PI;
public Circle(double r) {
rad =r;
PI=3.14;
}
public double getPerimeter() {
return (rad * 2) * PI;
}
}//www.fxmx.com 의 Circle.java
위의 두 코드를 비교하며
[패키지 이름 짓는 규칙]
1. 패키지의 이름은 모두 소문자로 구성
2. 인터넷 도멘인 이름의 역순으로 구성 (도메인은 고유정보이므로 패키지 이름이 겹쳐지지 않는다)
Circle c1 = new Circle(3.5);
>>>>>
com.wxfx.smart.Circle c1 =new com.wxfx.smart.Circle(3.5);
경로를 추가 해줘야 자바가 어떤 써클을 이야기 하고 있는지 인식할 수 있다
3. 만약을 위해 충돌 되지 않도록 그 클래스를 개발한 팀명을 끝에 넣는 것이 관례적 => ex) ~~smart, ~~simple
import
다른 패키지에 있는 클래스를 사용하고 싶을 때는 클래스의 이름으로 참조한다
package packageB;
public class PacB{
public static void main(String[] args){
packageA.PacA practice = new packageA.PacA();
practice.say();
}
}
packageA의 pacA 클래스 사용
그러나 참조해야할 클래스가 많아지고 다양해진다면 일일이 경로를 써주어야 하는 것이 복잡하게 된다
이때 경로 써주는 것을 생략하는 방법이 import
package packageB;
import packageA.PacA; //import 패키지명.클래스명;
public class PacB{
public static void main(String[] args){
packageA practice = new PacA();
practice.say();
}
}
import문은 컴파일러에게 패키지에 대한 정보를 제공.
그래서 컴파일러는 각각의 클래스 앞에 알맞은 경로를 붙여주게 되는 것이다
import com.wxfx.smart.Circle;
import com.fxmx.simple.Circle;
import com.fxmx.simple.*; //*(all) 지양하는 것이 좋다
'Dev. > java' 카테고리의 다른 글
Java 메서드 (0) | 2022.05.08 |
---|---|
java 복습 문제 (0) | 2022.05.04 |
자바의 이름 규칙 / 생성자 (0) | 2022.05.02 |
Java for (0) | 2022.04.30 |
Java switch 성적 처리 (0) | 2022.04.30 |
댓글