Small Grey Outline Pointer 클래스패스 (class path)/ Package
본문 바로가기
Dev./java

클래스패스 (class path)/ Package

by sso. 2022. 5. 2.
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) 지양하는 것이 좋다

 

 

 

 

728x90

'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

댓글