본문 바로가기
java

명품 JAVA Programming Chap06 모듈과 패키지 개념, 자바 기본 패키지

by 개발자 쿠키 2022. 8. 14.

Chap06 모듈과 패키지 개념, 자바 기본 패키지

  1. 패키지(Package)
  2. import와 클래스 경로
  3. 패키지 만들기
  4. 모듈 개념
  5. 자바 JDK에서 제공하는 패키지
  6. Object 클래스
  7. Wrapper 클래스
  8. String 클래스
  9. StringBuffer 클래스
  10. StringTokenizer 클래스
  11. Math 클래스
  12. Calendar 클래스

6.1 패키지(Package)

  • 패키지 : 클래스의 묶음으로서 하나의 디렉토리(폴더)이다.
  • java.lang.System : java패키지의 하위패키지 lang디렉토리에 System.class파일이다.
  • java.util.Scanner : java.util이라는 패키지에 Scanner라는 클래스이다.

6.2 import와 클래스 경로 

  • import 문 : 다른 패키지의 클래스를 사용할 때, 컴파일러에게 그 클래스의 경로명을 알려주는 문이다.
import 패키지.클래스;                    // 클래스의 경로명을 컴파일러에게 알려주는 문
  • import문은 반드시 소스 코드의 앞부분에 작성되어야 한다.
  • 여러 클래스를 import 하고자 하는 경우 *를 사용하여 한번에 선언할 수 있다.
import 패키지.*;

6.3 패키지 만들기

  • 패키지 명은 package 키워드를 이용하여 소스 파일 첫 줄에 선언한다.
package 패키지명;
  • 디폴트 패키지 : 현재 디렉터리이다.

 

  • 패키지의 특징
    • 패키지 계층 구조
    • 패키지별 접근 제한
    • 동일한 이름의 클래스를 다른 패키지에 작성 가능
    • 소프트웨어의 높은 재사용성

6.4 모듈 개념

  • 모듈: Java 9에서 처음 도입된 개념으로, 패키지들을 담는 컨테이너로 모듈 파일(.jmod)로 저장한다.
  • 자바 실행 환경: 자바 응용프로그램이 실행되는데 필요한 제반 환경으로서, 응용프로그램이 실행 중에 자바 API 클래스와 자바 가상 기계(JVM) 등으로 이루어진다.

6.5 자바 JDK에서 제공하는 패키지

  • 자바를 설치하면 JDK(Java Development Kit)가 설치되며 이곳에는 개발자들이 사용할 수 있는 많은 클래스들이 패키지에 담기고 다시 모듈에 담겨 제공된다. 자바에서 제공하는 이 기본 클래스들을 자바 API라고 한다. 지금까지 화면에 문자열을 출력하기 위해 사용했던 System.out.println()에서 System은 JDK의 java.lang 패키지에 속한 클래스이다. 이러한 자바 API가 없다면 개발자가 화면 출력, 키 입력, 네트워킹 등 모든 기능을 직접구현해야 한다.
  • JDK의 표준 패키지는 모듈로 나누어져 JDK를 설치한 디렉터리 밑의 jmods 디렉터리에 담겨있다.

 

  • JDK주요 패키지
    • Java.lang: System을 비롯하여 문자열, 수학 함수, 입출력 등과 같이 자바 프로그래밍에 필요한 기본적인 클래스와 인터페이스를 제공한다. 이 패키지의 클래스들은 특별히 import문을 사용하지 않아도 자동으로 임포트된다.
    • java.util: 날짜, 시간, 벡터, 해시맵 등 다양한 유틸리티 클래스와 인터페이스를 제공한다.
    • java.io: 키보드, 모니터, 프린터, 파일 등에 입출력 하는 클래스와 인터페이스를 제공한다.
    • java.awt와 javax.swing: 자바 AWT와 swing 패키지로서 GUI 프로그래밍에 필요한 클래스와 인터페이스를 제공한다.

6.6 Object 클래스

  • Object: java.lang 패키지에 속한 클래스이며, 모든 클래스에 강제로 상속된다. Object 만이 아무 클래스도 상속받지 않는 유일한 클래스로 계층 구조 상 최상위 클래스이다.
Object obj = new Object();
메소드 설명
boolean equals(Object obj) obj가 가리키는 객체와 현재 객체를 비교하여 같으면 true 리턴
class getClass() 현 객체의 런타임 클래스를 리턴
int hashCode() 현 객체에 대한 해시 코드 값 리턴
String toString() 현 객체에 대한 문자열 표현을 리턴
void notify() 현 객체에 대해 대기하고 있는 하나의 스레드를 깨운다.
void notifyAll() 현 객체에 대해 대기하고 있는 모든 스레드를 깨운다.
void wait() 다른 스레드가 깨울 때까지 현재 스레드를 대기하게 한다.

6.7 Wrapper 클래스

기본타입 byte short int  long  char float double boolean
Wrapper 클래스 Byte Short Integer Long Character Float Double Boolean
메소드 설명
static int bitCount(int i) 정수 i의 이진수 표현에서 1의 개수 리턴
float floatValue() float 타입으로 값 리턴
int intValue() int 타입으로 값 리턴
long longValue() long 타입으로 값 리턴
short shortValue() short 타입으로 값 리턴
static int parseInt(String s) 문자열 s를 10진 정수로 변환한 값 리턴
static int parseInt(Sring s, int radix) 문자열 s를 지정된 진법의 정수로 변환한 값 리턴
static String toBinaryString(int i) 정수 i를 이진수 표현으로 변환환 문자열 리턴
static String toHexString(int i) 정수 i를 16진수 표현으로 변환환 문자열 리턴
static String toString(int i) 정수 i를 문자열로 변환하여 리턴
static Integer valueOf(int i) 정수 i를 담은 Integer 객체 리턴
static Integer valueOf(String s) 문자열 s를 정수로 변환하여 담고 있는 Integer 객체 리턴
  • 박싱(boxing): 기본 타입의 값을 Wrapper 객체로 변환하는 것
  • 언박싱: Wrapper 객체를 기본 타입 값으로 변환하는 것

6.8 String 클래스

생성자 설명
String() 빈 스트링 객체 생성
String(char[] value) char 배열에 있는 문자들을 스트링 객체로 생성
String(String original) 매개변수로 주어진 문자열과 동일한 스트링 객체 생성
String(StringBuffer buffer) 매개변수로 주어진 스트링 버퍼의 문자열을 스트링 객체로 생성

 

  • 스트링 리터럴: 자바 내부에서 리터럴 테이블로 특별히 관리하여, 동일한 리터럴을 공유시킨다.
  • new String(): new를 이용하여 생성되는 다른 객체와 동일하게 힙 메모리에 생성된다.
  • 스트링 객체는 수정이 불가능하다.

 

  • String 활용
메소드 설명
char charAt(int index) index 인덱스에 있는 문자 값 리턴
int codePoint(int index) index 인덱스에 있는 유니코드 값 리턴
int compareTo(String anotherString) 두 스트링을 사전 순으로 비교하여 두 스트링이 같으면 0, 현 스트링이 anotherString보다 먼저 나오면 음수, 아니면 양수 리턴
String concat(String str) 현재 스트링 뒤에 str스트링을 덧붙인 새로운 스트링 리턴
boolean contaions(CharSequence s) s에 지정된 문자들을 포함하고 있으면 true리턴
int length() 스트링의 길이(문자 개수) 리턴
String replace(Charsequence target, Charsequence replacement) target이 지정하는 일련의 문자들을 replacement가 지정하는 문자들로 변경한 스트링 리턴
String[] split(String regex) 정규식 regex에 일치하는 부분을 중심으로 스트링을 분리하고, 분리된 스트링들을 배열로 저장하여 리턴
String subString(int beginIndex) beginIndex 인덱스부터 시작하는 서브 스트링 리턴
String toLowerCase() 소문자로 변경한 스트링 리턴
String toUpperCase() 대문자로 변경한 스트링 리턴
String trim() 스트링 앞뒤의 공백 문자들을 제거한 스트링 리턴

6.9  StringBuffer 클래스

  • StringBuffer 클래스도 java.lang 패키지에 포함되어 있으며, String 클래스와 같이 문자열을 다룬다. 이 객체는 문자열을 저장하는 가변 버퍼를 가지고 있기 때문에 저장된 문자열의 수정이 가능하다. 
StringBuffer(): 초기 버퍼의 크기가 16인 스트링 버퍼 객체 생성
StringBuffer(charSequence seq): seq가 지정하는 일련의 문자들을 포함하는 스트링 버퍼 생성
StringBuffer(int capacity): 지정된 초기 크기를 갖는 스트링 버퍼 객체 생성
StringBuffer(String str): 지정된 스트링으로 초기화된 스트링 버퍼 객체 생성

6.10 StringTokenizer 클래스

  • StringTokenizer: java.util 패키지에 포함되어 있으며, 하나의 문자열을 여러개의 문자열로 분리하기 위해 사용된다. 문자열을 분리할 때 사용되는 기준 문자를 구분 문자라고 하고, 구분 문자로 분리된 문자열을 토큰이라고 한다.

6.11 Math 클래스

  • Math 클래스: java.lang 패키지에 포함되어 있으며 기본적인 산술 연산을 제공한다. 모든 멤버 메소드는 static 타입이다.
double d = Math.random(); // 난수를 발생하는 random() 함수
double pi = Math.PI;    // 3.141592 원주율

6.12 Calendar 클래스

  • Calendar 클래스: java.util 패키지에 있는 추상 클래스로서 년, 월, 일, 요일, 시간, 분, 초, 밀리초 까지 프로그램이 실행되는 동안 개발자가 기억하고자 하는 시간과 날짜 정보를 저장하고 set(), gest() 메소드를 이용하여 날짜나 시간을 알아내거나 설정한다.

6장 요약

  • 패키지란 클래스 또는 인터페이스들을 서로 관련 있는 것들끼리 묶어 놓은 것이다.
  • 모듈은 재사용을 위해 디자인된 패키지들을 묶어놓은 것이다.
  • 패키지 간의 접근에 제한을 두어 패키지 간 무단 접근을 방지할 수 있다.
  • 패키지를 활용하여 불필요한 코딩 작업을 줄여 소프웨어의 재사용성을 높여준다.
  • 자바 소스 파일의 첫 줄에 package 키워드를 이용하여 클래스가 어떤 패키지에 속할지 선언한다. 
  • 패키지 선언문이 없는 경우 클래스는 기본 패키지에 속하며, 현재 디렉터리에 저장된다.
  • 다른 패키지의 클래스를 사용할 때는 import 문을 이용하여 클래스의 경로명을 지정한다.
  • 한 패키지의 여러 클래스의 경로명을 한번에 지정하려면, import 패키지 *;로 하면 된다.
  • 자바에서는 다양한 클래스들을 패키지로 묶은 표준 패키지를 제공한다.
  • Object 클래스는 java.lang 패키지에 포함되어 있으며 개발자가 작성하는 모든 클래스는 묵시적으로 Object를 상속받는다.
  • Object 클래스에는 toString() 메소드가 있으며, 개발자는 클래스에 이를 오버라이딩하여 객체를 문자열로 리턴할 수 있다.
  • == 연산자는 두 레퍼런스가 같은지 비교하며, 각 레퍼런스가 가리키는 객체의 내용이 같은지 비교하려면, 클래스 내에 equals() 메소드를 작성해야 한다.
  • 자바는 int, char 등 기본 타입의 값을 객체로 다룰 수 있도록 Wrapper 클래스를 제공한다. Wrapper 클래스에는 Byte, Short, Integer, Long, Character, Float, Double, Boolean이 있다. 기본 타입의 값을 Wrapper 객체로 바꾸는 것은 박싱, 그 반대를 언박싱이라고 부른다.
  • String은 문자열을 쉽게 다루도록 지원하는 클래스이다. 하지만, 한 번 만들어진 문자열은 변경할 수 없다.
  • StringBuffer 클래스는 변경가능한 문자열을 다루는데 이용되며, StringTokenizer 클래스는 문자열을 분할하는데 매우 유용하다.
  • Math 클래스는 다양한 산술 연산 메소드를 제공하며, Calendar 클래스는 시간, 날짜 등의 정보를 제공하고 나타내는데 활용된다. Calendar 객체로 현재 시간을 알아낼 수도 있다.

 


명품 JAVA Programming - 황기태, 김효수 - 내용을 정리한 내용입니다.