본문 바로가기
  • 🕊️ A Piece of Peace
🖥️ PC/JAVA

11. 패키지

by Moom2n 2024. 6. 26.

패키지란?

패키지는 클래스를 체계적으로 관리하기 위한 도구로, 클래스들을 구분 짓는 폴더와 같은 역할을 합니다. 패키지의 물리적인 형태는 파일 시스템의 폴더이며, 단순히 파일 시스템의 폴더 기능만 하는 것이 아니라 클래스의 일부분입니다. 패키지는 클래스를 유일하게 만들어주는 식별자 역할을 하며, 클래스 이름이 동일해도 패키지가 다르면 다른 클래스로 인식됩니다. 또한, 패키지 내부에 다른 패키지를 포함할 수도 있습니다.

패키지와 클래스는 도트(.)를 사용해서 표시합니다.

package 상위패키지.하위패키지.클래스;

 

예제 코드

package day10.pack1;

public class ClassName {
    // 클래스 내용
}

 

이는 파일 시스템에서 다음과 같이 보여집니다.

 

같은 패키지에 속하는 클래스들은 아무런 조건 없이 서로를 사용할 수 있지만, 다른 패키지에 속하는 클래스를 사용하려면 import 문을 사용해야 합니다. 패키지에 포함된 다수의 클래스를 사용해야 한다면, 클래스 이름을 생략하고 대신 *를 사용해서 import 문을 한 번 작성할 수 있습니다.

import day10.pack2.*;

 

그러나 import a.*; 이렇게 선언한다고 해서 a 패키지 밑에 있는 모든 패키지가 import 되는 것은 아닙니다. *를 사용하면 그 패키지에 선언된 클래스들만 import 됩니다. 즉, a.b, a.b.c에 선언된 클래스는 import 하지 않습니다.

 

classpath 옵션

다음의 소스코드로 작성된 Main.java 파일이 있다고 가정해보겠습니다.

예제 코드

class Print {
    void firstPrint() {
        System.out.println("Hello World!");
    }
}

public class Main {
    public static void main(String[] args) {
        Print print = new Print();
        print.firstPrint();
    }
}

 

컴파일 후 Print.class를 다른 디렉토리로 옮기면 Main 클래스는 실행되지 않습니다. 이때, java -classpath ".:디렉토리명" Main 명령으로 classpath 옵션을 준 후 실행해야 합니다.

 

Java 패키지

- Java 패키지

코드의 시작 부분에 import 문을 사용하여 사용할 패키지를 명시할 수 있습니다.

import java.util.Scanner;
import java.io.*;

 

패키지 이름을 포함하는 전체 클래스 이름을 사용할 수도 있습니다.

String s1 = new String("Hello");
java.lang.String s2 = new java.lang.String("Hello");

 

- java.lang 패키지

import 없이 사용 가능한 기본 패키지입니다.

  • Integer, Long, Float, Double 등의 Wrapper 클래스
  • 문자열과 관련된 String, StringBuffer, StringBuilder 클래스
  • 표준 입출력을 위한 System.in, System.out 스트림
  • Thread 관련 주요 클래스
  • 이외 다양한 클래스와 인터페이스 포함

- java.util 패키지

다양한 용도로 사용할 수 있는 유용한 클래스들이 포함된 패키지입니다.

  • Object 클래스의 보조 클래스인 Objects 클래스
  • 날짜, 시간과 관련된 클래스
import java.util.Date;
import java.text.SimpleDateFormat;
import java.util.Locale;

Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd", Locale.KOREAN);
System.out.println(dateFormat.format(date));

 

  • 자료구조와 관련된 Collections Framework 관련 인터페이스와 클래스
  • 이벤트 모델과 국제화 기능
  • StringTokenizer, 난수 생성기
import java.util.StringTokenizer;

String lyrics = "Yesterday all my troubles seemed so far away";
StringTokenizer tokenizer = new StringTokenizer(lyrics);
while (tokenizer.hasMoreTokens()) {
    System.out.println(tokenizer.nextToken());
}
import java.util.Random;

Random random = new Random();
int max = 10, min = 1;
int value = random.nextInt(max - min + 1) + min;
System.out.println(value);

 

  • Scanner 클래스 등 다양한 클래스와 인터페이스 포함

- java.io 패키지

파일이나 통신 등 정보의 입출력을 처리하는 클래스가 포함된 패키지입니다.

  • 파일 시스템의 파일 정보를 얻기 위한 File 클래스
  • 콘솔에서 문자를 입출력하기 위한 Console 클래스
  • InputStream, OutputStream 클래스 등 바이트 단위 입출력을 위한 스트림 추상 클래스
  • FileInputStream, FileOutputStream 등 바이트 단위 입출력을 위한 스트림 클래스
  • Reader, Writer 등 문자 단위 입출력을 위한 스트림 추상 클래스
  • FileReader, FileWriter 등 문자 단위 입출력을 위한 하위 스트림 클래스
  • 그 외 입출력을 위한 다양한 클래스 포함

예제 코드

파일 읽기

import java.io.FileReader;
import java.io.BufferedReader;
import java.io.IOException;

public class FileReadExample {
    public static void main(String[] args) {
        try (BufferedReader br = new BufferedReader(new FileReader("example.txt"))) {
            String line;
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

파일 쓰기

import java.io.FileWriter;
import java.io.BufferedWriter;
import java.io.IOException;

public class FileWriteExample {
    public static void main(String[] args) {
        try (BufferedWriter bw = new BufferedWriter(new FileWriter("example.txt"))) {
            bw.write("Hello, World!");
            bw.newLine();
            bw.write("Java I/O is powerful.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

- 기타 유용한 패키지

java.net 패키지

  • 네트워킹 관련 클래스를 포함하고 있으며, URL, Socket, ServerSocket, InetAddress 등의 클래스를 제공합니다.

javafx 패키지

  • 그래픽 사용자 인터페이스를 만들기 위한 다양한 클래스를 포함하고 있습니다. JavaFX는 이전의 Swing을 대체하는 최신 GUI 프레임워크입니다.

java.nio 패키지

  • 비동기적이고 블록하지 않는 I/O 작업을 지원하는 패키지로, 성능이 중요한 어플리케이션에서 주로 사용됩니다.

Java 버전이 업그레이드됨에 따라 많은 유용한 패키지들이 추가되고 개선됩니다. 예를 들어, java.time 패키지는 Java 8에서 새롭게 추가된 날짜와 시간 관련 기능을 제공합니다.

'🖥️ PC > JAVA' 카테고리의 다른 글

10. 메소드 오버로딩  (0) 2024.06.26
9. 파라미터  (0) 2024.06.26
8. 메소드  (0) 2024.06.26
7. 예외처리 Exception  (0) 2024.06.26
6. 자바의 기본 데이터 타입 (Primitive Data Types)  (0) 2024.06.26