패키지란 비슷한 성격의 자바 클래스들을 하나로 모아둘 수 있는 자바의 디렉토리이다.
이렇게 패키지를 이용하여 비슷한 성격의 자바 클래스들을 모아두는 이유는 다음과 같다.
비슷한 성격의 자바 클래스들을 패키지 단위로 모아두기 때문에 클래스 분류가 용이하다.
자바 코드 작성 시, 다른사람이 작성한 라이브러리나 클래스를 사용하게 되는 경우가 많이 있는데, 이때 가져오려는 클래스 명이
같은 경우, 클래스의 패키지 이름으로 각 클래스를 구분할 수 있다.
결론적으로 클래스 명이 동일하더라도 패키지 이름이 다르면 충돌없이 해당 클래스를 가져와 사용이 가능하다.
따라서, 배포용으로 작성하는 자바 클래스는 반드시 패키지 명을 포함해야 한다.
import
문위에서 설명했듯이, 패키지란 서로 비슷한 성격의 클래스들을 모아둔 하나의 단위(디렉토리)이다.
이렇게 패키지 안에 속한 클래스를 다른 파일에서 사용하기 위해서는 클래스 이름 앞에 패키지의 경로까지 포함한 full name까지
명시해 주어야만 사용이 가능하다.
이렇게 다른 파일에서 클래스를 가져와 사용할 때마다 해당 클래스의 패키지 경로까지 포함한 긴 이름을 사용하는 것은 비효율적이다.
그래서 Java 에서는 import
라는 키워드를 제공하고 있다.
import
문은 자바 컴파일러에게 코드에서 사용할 클래스의 패키지에 대한 정보를 미리 제공해주는 역할을 한다.
따라서, import
문을 사용하면 다른 패키지에 속해있는 클래스를 가져와 사용할 때, 패키지 경로를 제외한 클래스 이름만으로 가져와
사용할 수 있게 된다.
import
문에 대한 추가적인 설명 (Scanner
예시)응용 프로그램에서 다른 패키지에 있는 클래스를 사용하기 위해서는 패키지 이름을 포함한 경로명을 사용하여야 한다고 위에서 설명하였다.
이러한, 사용하고자 하는 클래스와 해당 클래스의 패키지 이름까지 포함한 경로명을 완전 경로명 이라고 하겠다.
이런식으로 다른 패키지에 속해있는 클래스를 사용할 때 완전 경로명을 사용하는 이유는 컴파일러가 사용하고자 하는 클래스 파일의 위치를
정확히 찾을 수 있도록 하기 위해서이다.
다음은 java.util
패키지(JDK
의 java.base
모듈의 java.util
패키지)의 Scanner
클래스 사용 예시이다.
public class ImportExample {
public static void main(String[] args) {
java.util.Scanner scanner = new java.util.Scanner(System.in);
String name = scanner.nextLine();
System.out.println(name);
}
}
해당 예시처럼 Scanner
를 사용할 때 마다 완전 경로명을 사용할 경우, 코드가 길어지고, 그만큼 오타가 날 가능성도 높아진다.
한마디로 비효율적이다.
이러한 문제를 해결하기 위해 Java
에서는 import
라는 키워드를 제공한다. 해당 키워드는 위에서 설명했듯이, 사용하고자 하는 클래스의 경로를
컴파일러에게 미리 제공해 주는 역할을 한다.
때문에, import
문을 사용하면, 사용하고자 하는 다른 패키지의 클래스의 이름만 가지고 해당 클래스를 사용할 수 있다.
다음은 import
문을 이용하여 Scanner
클래스를 사용하는 예시 코드이다.
import java.util.Scanner;
public class ImportExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
System.out.println(name);
}
}
import
문을 사용할 때 주의할 점은 import
문은 반드시 소스 코드의 앞 부분에 작성되어야 한다는 것이다.
또, 위 예시코드가 import
문을 통해서 java.util
패키지에 속해있는 Scanner
클래스의 경로명을 딱 찍어서 컴파일러에게 알려준 것이라면,
한 패키지에 속해있는 여러 클래스를 사용하고 싶을 때에는 일일이 클래스마다 import
문을 사용하는 것이 아니라, *
를 사용하여, 한 패키지의
모든 클래스들을 대상으로 지정해 줄 수 있다.
일반적으로, 프로그래밍에서
*
는 모든 것(everything)이라는 의미로 통용된다.
java.util
패키지를 예로 들면 다음과 같다.
import java.util.*;
해당 코드를 통해, java.util
패키지에 속해 있는 모든(*
) 클래스들의 경로를 컴파일러에게 알려주게 되고,
결과적으로, java.util
패키지에 속해 있는 클래스라면, 완전 경로명을 사용하지 않고, 해당 클래스의 이름만으로 사용이 가능하게 된다.
다음은 *
을 이용한 import
문을 통해 java.util
패키지의 Scanner
클래스와 Arrays
클래스를 사용하는 예시 코드이다.
import java.util.*;
public class ImportExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
System.out.println(name);
char[] char_arr = {'y', 'o', 'o', 'n', 's', 'i', 'k'};
System.out.pritnln(Arrays.toString(char_arr);
}
}
java.util
패키지java.util
패키지(package)는 말 그대로 Java 프로그래밍에 있어, 유용한 클래스들을 모아둔 것으로,
대표적인 클래스들은 날짜와 관련된 Date
, Calender
등이 있으며, 자료구조와 알고리즘 관련 클래스들의 집합인
컬렉션 프레임워크(Collection Framework)도 포함되어 있다.
컬렉션 프레임워크(Collection Framework)란?
다수의 데이터들을 쉽고 효과적으로 처리(데이터 저장, 데이터 처리) 할 수 있는 표준화된 방법을
제공하는 클래스들의 집합이다.
즉, 데이터를 저장하는 자료구조와 저장된 데이터를 처리하는 알고리즘을 클래스로 구현해 놓은 것이다.
이러한 컬렉션 프레임워크는 Java의 인터페이스(Interface)를 사용하여 구현한다.
java.util
패키지에 속한 클래스들java.util
패키지에 속한 클래스들을 정리해보면 다음과 같다.
AbstractCollection,
AbstractList, AbstractSequentialList, LinkedList, ArrayList, Vector, Stack,
AbstractSet, HashSet, LinkedHashSet, TreeSet,
AbstractMap, HashMap, LinkedHashMap, TreeMap,
Arrays, BitSet, Calendar, GregorianCalendar,
Collection, Date, Dictionary, Hashtable, Properties,
EventObject, Locale, Observable, Random, Scanner, StringTokenizer
https://bangu4.tistory.com/26
https://thrillfighter.tistory.com/480
https://help.goorm.io/en/goormide/02.project/build