본문 바로가기

JAVA/개념

자바(JAVA) : 패키지(package), 임포트(Import), 클래스패스(ClassPath)

728x90
반응형

패키지(package)란?

자바에서 패키지(package)란 클래스와 인터페이스의 집합을 의미한다
이렇게 서로 관련이 있는 클래스나 인터페이스를 함께 묶음으로써 파일을 효율적으로 관리할 수 있게 된다. 또한, 협업 시 서로 작업한 클래스 사이에서 발생할 수 있는 이름 충돌 문제까지도 패키지를 이용하면 피할 수 있다.

자바에서 패키지(package)는 물리적으로 하나의 디렉터리를 의미한다.
따라서 하나의 패키지에 속한 클래스나 인터페이스 파일은 모두 해당 패키지 이름의 디렉터리에 포함되어 있다.

이러한 패키지는 다른 패키지를 포함할 수 있으며, 이때 디렉터리의 계층 구조는 점(.)으로 구분된다.

 

즉, 패키지는 비슷한 성격의 자바 클래스들을 모아 놓은 자바의 디렉토리이다.

 

패키지 사용

자바 소스 파일에서 이 파일의 클래스나 클래스들이 속하는 패키지는 package라는 키워드와 함께 지정된다. 이 키워드는 일반적으로 소스 파일에서 처음 오는 키워드이다. 하나의 패키지 선언을 소스 파일에 선언할때엔느 다음과 같이 할 수 있다.

자바 소스 파일 안의 패키지 클래스들을 사용하려면 import 선언과 함께 패키지로부터 클래스들을 가져오는 것이 편리하다.

 

package java.awt.event;

package java.awt.event.*; //java.awt.event로 부터 모든 클래스를 가져온다.

 

import 키워드

소스코드를 작성할 때 다른 패키지의 클래스를 사용할때는 패키지명이 포함된 이름을 사용하여야한다. 하지만, 매번 패키지명을 붙여서 작성하기란 여간 불편한일이 아닐것이다. 클래스의 코드를 작성하기 전에 import 문으로 사용하고자 하는 클래스의 패키지를 미리 명시해주면 소스코드에 사용되는 클래스 이름에서 패키지명은 생략할 수 있다.

import 문의 역할은 컴파일러에게 소스파일에 사용된 클래스의 패키지에 대한 정보를 제공하는 것이다. 컴파일시에 컴파일러는 import문을 통해 소스파일에 사용된 클래스들의 패키지를 알아낸다음, 모든 클래스이름 앞에 패키지명을 붙여준다.

import문 선언 방법

import packagename.classname;
//or
import packagename.*;


import문을 여러 번 사용하는 대신 '패키지명.*'을 이용해서 지정된 패키지에 속하는 모든 클래스를 패키지명 없이 사용할 수 있다.

import 사용

위의 패키지 package java.awt.event에서 ActionEvent 클래스만 가져온다.

import java.awt.event.ActionEvent;

추가적으로 해당 import 선언뒤에 단순한 클래스 이름을 사용하여 ActionEvent클래스를 참조할 수 있다.

import java.awt.event.ActionEvent;

ActionEvent myEvent = new ActionEvent();

클래스들은 import 선언 없이 직접사용할 수 있다.

java.awt.event.ActionEvent myEvent = new java.awt.event.ActionEvent();

java.lang 패키지는 import 문을 사용하지않고도 사용 가능하다.

 

클래스 패스(Class Path)와 환경변수

클래스 패스는 쉽게 말해 JVM이 프로그램을 실행할 때 클래스를 찾기 위한 기준이 되는 경로라고 생각하면 간단하다. 만약 클래스 패스를 설정하지 않았다면 디폴트는 현재 경로를 바라보게 된다. 우리가 많이 사용하는 intellij IDE도 클래스 패스를 설정하지 않으면 기본적으로 현재 경로에서 파일을 찾는다.

class WhatYourName {
        public static void main(String[] args) {
                AAA aaa = new AAA();
                aaa.showName();

                BBB bbb = new BBB();
                bbb.showName();
        }

}

class AAA {
        public void showName() {
                System.out.println("AAA");
        }
}

class BBB {
        public void showName() {
                System.out.println("BBB");
        }
}

위와 같이 WhatYourName.java 파일 하나에 3개의 클래스가 있다. 컴파일을하면 당연히 WhatYourName.class / AAA.class / BBB.class 총 3개의 클래스가 만들어진다는 것을 예측할 수 있다. 그리고 main() 메소드가 있는 WhatYourName.class 파일을 실행시키면 순차적으로 AAA와 BBB 콘솔에 찍힐 것이다.

 

<요약>

JVM(자바 실행 프로그램)이 이렇게 얻어진 byte code (.class 파일)을 실행할 때에는 컴파일 과정에서 진행한 일들을 진행하지 않고 말 그대로 실행만 한다.

때문에 소스코드보다 이해가 쉽기 때문에 속도가 더 빠를 뿐만 아니라, 매번 소스코드 문법을 검사하는 등 불필요한 작업을 생략할 수 있어서 효율적이다.

 

환경변수란 무언인가?

환경변수는 운영체제가 참조하는 변수이다.

운영체제 안의 기본적인 명령어는 컴퓨터가 이해할 수있지만 새로 추가되는 프로그램 또는 자바 플랫폼은 컴퓨터가 어떤식으로 실행해야 할까??

자바 개발로 나온 .java파일을 .class로 컴파일 하기 위해서 자바 컴파일러인 javac.exe를 실행하고 싶은 경우를 생각하면 된다.

초기에 환경변수를 세팅하지 않으면 다음과 같은 에러가 출력될것이다.

'javac'는 내부 또는 외부 명령, 실행할수있는 프로그램이 아닙니다.

javac라는 명령어를 운영체제가 찾을 수 없기때문인데, 이 때 운영체제가 찾을 수 있게 설정해주는 것이 환경변수이다.

운영체제는 다음과 같은 행동을 통하여 위치를 잡게된다.

  1. javac 입력 후 엔터를 누른다.
  2. 운영체제는 javac라는 내부 명령어가 있는지 검사한다.
  3. 없는 경우 Path 환경변수를 검색한다.
  4. Path에 설정된 경로들(; 세미콜론으로 구분)을 모두 검사한다.
  5. javac.exe를 발견하면 실행한다.
728x90
반응형