on
패키지와 클래스 패스
패키지와 클래스 패스
반응형
클래스 패스
자바 가상머신이 클래스 파일을 찾는 경로
클래스 패스를 지정하지 않는다면, 자바 가상머신은 현재 디렉토리 기준으로 파일을 찾음
class AAA { public void showName(){ System.out.println("My name is AAA"); } } class BBB { public void showName(){ System.out.println("My name is BBB"); } } public class WhatYourName { public static void main(String[] args) { AAA aaa = new AAA(); aaa.showName(); // My name is AAA BBB bbb = new BBB(); bbb.showName(); // My name is BBB } }
위의 소스코드가 현재 디렉토리에 위치해 있다면 이 소스코드는 잘 실행이 된다.
클래스 패스를 지정하지 않으면 일어나는 일을 보기 위해 다음과 같은 가정을 해보자.
class WhatYourName 의 위치 : C://Mypackage
class AAA의 위치 : C://Mypackage/MyClass
class BBB의 위치 : C://Mypackage/MyClass
여기에서 WhatYourName 클래스를 실행하면 오류가 발생할 것이다. 클래스 패스를 지정해주지 않았기 때문이다!
해결 방안은 자신의 위치가 C://Mypackage라고 가정한다면 클래스 패스에 현재 디렉토리와 MyClass 디렉토리를 추가해주는 것이다.
C:\Mypackage > set classpath=.;C:\Mypackage\MyClass
위의 실행은 절대경로를 지정한 것이고 나의 현재 위치가 Mypackage이기 때문에 상대경로로 지정해줘도 된다.
C:\Mypackage > set classpath=.;\MyClass
패키지
이름 충돌이 발생하는 가상의 상황을 가정해보자
인터넷 도메인 주소가 cieldelaube.com 이라는 회사가 개발한 클래스는 다음과 같다.
public class Circle { double rad; final double PI; public Circle(double r){ rad = r; PI = 3.14; } public double getArea(){ return (rad * rad) * PI; } }
인터넷 도메인 주소가 studycafe.com 이라는 회사가 개발한 클래스는 다음과 같다.
public class Circle { double rad; final double PI; public Circle(double r){ rad = r; PI = 3.14; } public double getPerimeter(){ return (rad * 2) * PI; } }
이 두 클래스를 동시에 사용해야 하는 상황에는 이름 충돌이 발생한다(Circle). 이를 해결하기 위해서는 패키지의 이름을 다르게 선언해야 한다.
※ 참고 사항
하나의 소스파일에는 public으로 선언된 클래스의 정의를 하나만 둘 수 있다.
소스파일의 이름은 public으로 선언된 클래스의 이름과 동일해야 한다.
※ 패키지 이름 관례
클래스의 이름과 구분이 되도록 패키지의 이름은 모두 소문자로 구성한다.
인터넷 도메인 이름의 역순으로 패키지 이름을 구성한다.
패키지 이름의 끝에 클래스를 정의한 주체 또는 팀을 구분하는 이름을 추가한다.
cieldelaube.com의 팀 이름이 smart 라면 -> com.cieldelaube.smart
studycafe.com의 팀 이름이 simple 이라면 -> com.studycafe.simple
<사용법 #1>
class CircleUsing { public static void main(String[] args) { com.cieldelaube.smart.Circle c1 = new com.cieldelaube.smart.Circle(3.5); com.studycafe.simple.Circle c2 = new com.studycafe.simple.Circle(3.5); } }
<사용법 #2>
import com.cieldelaube.smart.Circle; public class ImportCircle{ public static void main(String[] args) { Circle c1 = new Circle(3.5); } }
반응형
from http://yunseodozpwf.tistory.com/39 by ccl(A) rewrite - 2021-11-12 05:02:18