[Java] #12 패키지와 import

febCho·2023년 10월 23일
0

Java

목록 보기
31/53

이 게시물에서는 앞으로 객체를 활용함에 앞서 중요한 개념인 import에 대해 공부해본다.

패키지와 import

package kr.s13.object.p1;

import kr.s13.object.p2.PackTwo;

public class PackMain {
	public static void main(String[] args) {
		//kr.s13.object.p1.PackOne p1 = new kr.s13.object.p1.PackOne();
		//같은 패키지의 클래스를 호출해서 객체 생성을 할 때는 패키지 생략 가능
		PackOne p1 = new PackOne();
		
		//다른 패키지의 클래스를 호출할 때는 패키지를 반드시 명시해야 함
		//kr.s13.object.p2.PackTwo p2 = new kr.s13.object.p2.PackTwo();
		
		PackTwo p2 = new PackTwo();
		
	}
}
package kr.s13.object.p1;

public class PackOne {

}
package kr.s13.object.p2;

public class PackTwo {

}

import를 알기 위해선 '패키지'에 대한 이해가 필요하다.

그동안 작성해왔던 코드의 최상단 package kr.s13.object.p1;package kr.s13.object.p2; 등이 바로 패키지를 명시한 것으로, 이는 클래스의 식별 단위이다.

우리는 이 코드를 통해 PackOne 클래스는 kr.s13.object.p1에, PackTwo 클래스는 kr.s13.object.p2에 존재하다는 것을 식별할 수 있게 된다.

이때, 새로운 클래스에서 해당 클래스들을 호출해 객체로 사용하고자 한다면 어떻게 해야 할까?
PackMain 클래스에서 PackOne 클래스 객체(같은 패키지)와 PackTwo 클래스 객체(다른 패키지)를 생성해보았다.

다른 클래스를 호출해 객체 생성을 하는 방법
① 패키지의 클래스를 호출할 경우에는 패키지 이름을 붙여주는 게 원칙이나,
② 같은 패키지에 있을 경우에는 호출할 때 패키지 이름을 생략한다.
③ 다른 패키지에 있을 경우에도 import문을 활용해 사전 등록을 하면 생략이 가능하다.

  1. 클래스를 호출할 경우에는 원래 패키지명을 붙이는 게 원칙이다. 특히 다른 패키지에 있는 클래스를 호출해 객체를 생성하고자 할 때는 패키지를 반드시 명시해야 한다.
    ex. kr.s13.object.p1.PackOne p1 = new kr.s13.object.p1.PackOne();
    kr.s13.object.p2.PackTwo p2 = new kr.s13.object.p2.PackTwo();

  2. 단, 같은 패키지에 있는 클래스의 경우에는 패키지 이름 생략이 가능하다.
    ex. PackOne p1 = new PackOne();

  3. 또한, 다른 패키지에 있는 클래스의 경우 import를 활용해 사전 등록(패키지 + 클래스)을 하면 패키지 이름을 생략하고 객체를 생성할 수 있다.
    ex. import kr.s13.object.p2.PackTwo;PackTwo p2 = new PackTwo();

  4. 패키지를 명시한 코드와 클래스를 명시한 코드 사이에 작성하며

package kr.s13.object.p1;

import kr.s13.object.p2.PackTwo;

public class PackMain {
  1. import 시에는 클래스 명 끝에 소괄호를 붙이지 않는다.
    ex. import kr.s13.object.p2.PackTwo(); (X)

우리가 그동안 작성해왔던 코드를 import문을 활용해 더 쉽고 간편하게 바꿀 수도 있다.
아래는 Scanner로 단을 입력 받는 구구단 프로그램 예제의 일부이다.
참고) Scanner, 배열, for문을 활용해 구구단 프로그램 만들기

package kr.s06.array;

public class ArrayMain11 {
	public static void main(String[] args) {
		
		int[] array = new int[9];
		
		java.util.Scanner input = new java.util.Scanner(System.in);
		System.out.print("단 입력: ");
		int dan = input.nextInt();
		
		(생략)
}

> 자바17 API 문서
string

API 문서에서 확인할 수 있듯, java.lang은 기본 패키지(java.base)에 속하기 때문에 import를 활용한 사전 등록이 자동으로 이루어져 'String'과 같은 클래스를 사용할 때는 별도로 패키지명을 쓰지 않았다.

하지만 Scanner의 경우는 기본 패키지에 속하지 않는, java.util 패키지에 존재하기 때문에 호출할 때 패키지명을 붙여 사용해야 한다.
따라서 그동안 우리는 위와 같이 java.util.Scanner input = new java.util.Scanner(System.in); 패키지명을 붙여 데이터를 입력 받아왔다.

import java.util.Scanner;라고 Scanner를 사전 등록 해준다면 코드는 아래와 같이 간단해진다.

package kr.s06.array;

import java.util.Scanner;

public class ArrayMain11 {
	public static void main(String[] args) {
		
		int[] array = new int[9];
		
		Scanner input = new Scanner(System.in);
		System.out.print("단 입력: ");
		int dan = input.nextInt();
        
        (생략)

사전에 import를 해줌으로써 코드가 아래와 같이 바뀐 것을 확인할 수 있다.
import java.util.Scanner;Scanner input = new Scanner(System.in);

import는 앞으로 JDBC 연동, list 등에서 무수히 활용될 예정이니 잘 기억해 두는 것이 좋다.

profile
Done is better than perfect.

0개의 댓글