19. 패키지와 import

Isaiah IM·2023년 7월 20일
0

java basic

목록 보기
21/38
post-thumbnail

1. 패키지

1.1 패키지란?

패키지란 클래스의 묶음이다.

패키지란 클래스 또는 인터페이스를 포함할 수 있는 묶음으로, 실제 폴더로 구분되면서 클래스를 효율적으로 관리할 수 있도록 하는 체계이다.

예를 들어보자.
우리가 사진을 저장한다고 하면 그냥 사진폴더에 모든 사진을 몰아넣는것 보다는 사진폴더 안에 여행, 음식등 폴더를 더 나눠서 사진을 분류하거나, 년도와 날짜별로 분류를 하면 관리하기가 더 쉬울 것이다.

위 사진은 실제 필자의 여행 사진 분류이다.

자바 코드 역시 마찬가지이다.
결국에는 우리가 작성한 클래스 역시 파일로 작성이 되며, 이 클래스 파일들을 적절하게 분류를 해서 저장을 하도록 하는것이 바로 패키지이다.

이러한 패키지는 .으로 구분을 하며, com.study.packageStudy일 경우 아래 사진과 같이 src폴더 아래 com->study->packageStudy폴더가 생성이 된다.

또한, 이 위치에 코드를 작성하면 com->study->packageStudy폴더에 클래스 파일이 위치하게 된다.

대부분 이러한 패키지는 회사 도메인을 거꾸로 쓰는 방식을 사용한다.
예를들어 회사 도메인이 myCompany.com이라면 패키지는 기본적으로 com.myCompany가 된다.

또한, 모든 소스파일은 반드시 하나의 패키지에 속해야 한다.

1.2 패키지의 선언

패키지는 package키워드를 사용해 선언할 수 있다.

우리가 이클립스에서 코딩을 하다보면 맨 위에 이런 코드가 항상 있었다.

package 패키지_이름;

위 코드는 패키지를 선언한 것으로, 정확히 말하면 패키지 안에 클래스 파일을 넣은 것이다.
앞에서 모든 소스파일은 반드시 하나의 패키지에 포함되야 한다고 언급했을 것이다. 즉, 우리가 package 패키지_이름;을 작성하면 해당 패키지 내부에 클래스 파일을 포함시키는 형식이 되며, 아래 사진과 같이 패키지 폴더 내부에 클래스 파일이 위치하게 된다.


2. import

2.1 import란?

import는 다른 패키지에 있는 클래스를 사용할때 작성하는 구문이다.

import는 우리가 직접 만들지 않은 패키지를 사용하려고 할때 사용할 수 있는 구문이다. 또한 패키지는 클래스의 묶음이기에 import구문은 우리가 직접 구현하지 않은 클래스들을 사용하기 위한 구문이다.

사실 우리는 아래와 같이 이미 import구문을 통해 직접 구현하지 않은 클래스를 사용한 적이 있다.

import java.util.Scanner;

public class scanner {
	public static void main(String[] args) {
		String str;
		
		Scanner input = new Scanner(System.in);
		
		System.out.print("input> ");		
		str=input.nextLine();
		
		System.out.println("input: "+ str);
	}
}

바로 Scanner클래스다. 우리가 콘솔로 입력을 받을때 직접 콘솔입력 관련 클래스를 직접 구현하지 않고 Scanner클래스를 사용해 콘솔로부터 입력을 받았었다. 또한, Scanner클래스를 사용할때 java.util과 같이 패키지명을 같이 사용하지 않은것 처럼 한번 import를 작성하면 해당 클래스를 사용할때 패키지명은 생략할 수 있다.

2.2 import의 선언

import의 선언은 다음과 같다.
1.

import 패키지명.클래스명;
import 패키지명.*;

import구문을 선언하기 위해서는 import 패키지명.클래스명;으로 선언하거나 import 패키지명.*;으로 선언할 수 있다.
이때, import 패키지명.*;에서 *는 모두(all)라는 의미로, 해당 패키지의 모든 클래스를 포함하는 구문이다.
즉, import 패키지명.클래스명;을 사용하면 해당 패키지에서 우리가 사용하려는 특정한 클래스만 사용할 수 있는 반면 import 패키지명.*;을 사용하면 우리가 사용하려는 클래스 뿐 아니라 우리가 선언한 패키지에 있는 다른 클래스들 역시 사용할 수 있어서 편리하다는 장점이 있으나, 처음 컴파일시 시간이 조금 더 걸린다는 단점이 있다. 또한, 이 둘의 실행시 성능은 차이가 없다.

또한, import할때 *를 붙인다고 해서 하위 패키지의 클래스를 모두 포함한다는 의미는 아니기 때문에 import java.*와 같이 작성한다고 해서 다음 패키지의 클래스까지 포함한다는 것은 아니다.

import java.util.*;
import java.text.*;

따라서 import java.*를 작성한다 해서 위의 두 문장을 작성 안해도 되는 것이 아니다.

2.3 static import

static import를 사용하면 static멤버의 클래스 이름을 생략할 수 있다.
선언 방법:

import static 패키지명.클래스명;

원래는 static멤버의 경우 반드시 클래스 이름을 적어야 한다.
그러나, static import구문을 사용하면 import를 사용할때 클래스의 패키지명을 생략할 수 있는것 같이 static멤버의 클래스 이름을 생략할 수 있다.
예를들어 아래와 같이 static import를 하면

import static java.lang.System.out;
out.printf("hello world");

와 같이 System클래스를 생략해서 사용할 수 있다.

profile
나는 생각한다. 고로 나는 코딩한다.

1개의 댓글

comment-user-thumbnail
2023년 7월 20일

아주 유익한 내용이네요!

답글 달기