JAVA/공부

클래스 외부 구성 요소

GaeGim 2022. 7. 2. 23:43
반응형

클래스 외부 구성 요소 : 패키지, 임포트, 외부 클래스

 

 

 

  • 패키지

비슷한 목적으로 생성된 클래스 파일들을 한 곳에 모아 둔 폴더

 

※ 여러 개의 패키지를 생성할 수도, 아예 생성하지 않아도 무관하다.

아예 생성 안하는 경우엔 default package에 해당된다.

 

생성된 패키지는 src 폴더의 하위 폴더에 위치한다. 컴파일이 수행되면 바이트 코드가 저장되는 bin 폴더에도 동일한 하위 폴더가 생성된다. 패키지 지정 안 할시 src 폴더 아래에 소스 파일이 바로 위치한다.

 

패키지를 사용하면 클래스가 저장되는 공간이 분리돼 클래스명의 충돌을 방지할 수 있다.

 

 

 

 

  • 임포트

다른 패키지 내의 클래스를 사용하기 위한 문법 요소.

 

 

※ 프로그램이 동작할 떄일반적으로는 자신의 패키지 내부에 위치한 클래스만 사용할 수 있다.

자바 API나 다른 사람이 만든 패키지 클래스를 쓰고자 할 땐 어떻게 쓸 수 있을까?

 

Package abc_bcd;

public class A {
    public int m = 3;
    public int n = 4;
    public void pnt() {
    	System.out.println("A클래스 임포트");
    }
}

 

 

① 클래스 풀네임 사용

클래스 풀네임) 패키지명.클래스명

package cde_def;

public class PackageImport {
    public static void main(String[] args) {
    	//A a = new A(); -> 오류 발생
        abc_bcd.A a = new abc_bcd();
        
        System.out.println(a.m); //3
        System.out.println(a.m); //4
        a.pnt(); 		 //A클래스 임포트
    }
}

 

 

② 임포트 사용

문법) import 패키지명.클래스명

package cde_def;

import abc_bcd.A;

//패키지 내 모든 클래스 임포트를 원하면 *사용
import abc_bcd.*;

public class PackageImport {
    public static void main(String[] args) {
    	A a = new A();
        
        System.out.println(a.m); //3
        System.out.println(a.m); //4
        a.pnt(); 		 //A클래스 임포트
    }
}

 

 

※ *기호로 임포트할 때 주의점

실제 임포트되는 것은 bin폴더에 위치한 컴파일된 .class 바이트 코드다.

* 기호 사용해 임포트하면 하위 폴더는 임포트되지 않으며 클래스 파일들만 임포트된다.

따라서 하위폴더도 임포트하고 싶다면 추가 임포트 해줘야 한다.

 

 

 

 

  • 외부 클래스

외부 클래스 : public 클래스의 외부에 추가 정의한 클래스

 

1개의 소스 파일 안에 1개 밖에 없는  public 클래스를 제외한 모든 클래스는 외부 클래스다.

public 클래스가 아니면 다른 패키지에서 임포트할 수 없어 외부 클래스는 같은 패키지 안에서만 사용 가능하다. 다른 패키지에서 외부 클래스를 임포트하려면 별되의 소스파일 작성 후 public을 클래스명 앞에 붙여줘야 한다. 동일 패키지 내에선 public 존재 여부 무관히 객체를 생성할 수 있다.

 

 

※ 클래스 구성요소는 없어도, 일부만 있어도, 전부 있어도 상관없지만 소스 코드 상에선 패키지, 임포트, 외부 클래스 순으로 작성순서를 잘 지켜줘야 한다. 이들 세 요소를 제외하고 클래스 외부엔 무엇도 올 수 없다.

 

 

반응형

'JAVA > 공부' 카테고리의 다른 글

클래스 상속과 다형성  (0) 2022.07.02
자바 제어자-1  (0) 2022.07.02
클래스 내부 구성 요소  (0) 2022.07.02
클래스와 객체  (0) 2022.07.02
배열 성적 처리 프로그램  (0) 2022.06.26