
자바의 클래스, 패키지 모듈은 계층 관계로 이루어짐.
👉 패키지
- 서로 관련 있는 클래스나 인터페이스의 컴파일된 클래스(.class) 파일들을 하나의 디렉터리에 모아 놓은 것.
- 응용프로그램은 FileIO , Graphic, UI 3개의 패지로 구성
👉 모듈
- 여러 개의 패키지들을 모은 것
- 2017년 9월 모듈 개념을 새로 도입하고, 자바 플랫폼에서 제공하는 수많은 패키지들을 수십 개의 모듈로 나누어 담아 제공 .jmod 확장자를 가진 ZIP 압축 파일 형태로 제공.
import 패키지, 클래스;import 패키지.*;클래스나 인터페이스가 컴파일되면 .class파일이 생기고, 패키지에 소속되어야 함.
소스파일에는 다음과 같이 package 키워드를 이용하여 클래스가 소속될 패키지 명을 선언함.
package 패키지명;
모듈은 Java 9에서 처음 도입된 개념으로 패키지가 서로 관련 있는 클래스나 인터페이스의 컴파일된 클래스 파일들을 한 곳에 담는 컨테이너라면, 모듈은 패키지들을 담는 컨테이너로 모듈 파일(.jmot)로 저장함.
오라클은 Java 9의 도입과 함께 자바 플랫폼 전체를 모듈화함.
자바 컴포넌트들을 필요에 따라 조립하여 사용하기 위함으로 세밀한 모듈화를 통해, 필요 없는 모듈이 로드되지 않게 하여, 컴퓨터 시스템에 불피요한 부담을 줄임. 특히 하드웨어가 열악한 소형 IOT 장치에서도 자바 응용프로그램이 실행되고 성능을 유지하게 함.
JDK는 화면출력, 키 입력, 네트워킹 등 프로그램 개발에 필요한 기본적인 기능과 다양한 응용 기능을 구현한 많은 클래스와 인터페이스들을 포함하는 표준 패키지 제공하며 이를 자바 API라고 함.
자바 표준 패키지는 모듈로 나누어져 JDK가 설치된 디렉터리 밑의 jmods 디렉터리에 압축 파일 형태로 담고 있음. (그림 참조)

- java.lang : 이 패키지에는 System을 비롯하여, 문자열, 수학 함수, 입출력 등과 같이 자바 프로그래밍에 필요한 기본적인 클래스와 인터페이스를 제공함. 이 패키지의 클래스들은 특별히 import 문을 사용하지 않아도 자동 임포트됨.
- java.util : 날짜, 시간, 벡터, 해시맵 등 다양한 유틸리티 클래스와 인터페이스를 제공함.
- java.io : 키보드, 모니터, 프린터, 파일 등에 입출력 하는 클래스와 인터페이스를 제공함.
- java.awt와 javax.swing : 자바 AWT(Abstract Windowing Toolkit)과 swing 패키지로서 GUI 프로그래밍에 필요한 클래스와 인터페이스를 제공함.
hashcode() , to string() 메소드는 객체의 해시 코드 값, 객체를 나타내는 문자열 정보를 제공.
object의 getclass() 메소드는 객체의 클래스 정보를 담은 Class 객체를 리턴하고 getName() 메소드를 호출하면, 객체의 클래스 명을 알아낼 수 있음.
public String toString() //public으로 선언해야 함에 특히 주의
프로그램을 작성하다보면 두 객체가 같은지 비교할 경우가 자주 있음. 기본 타입의 값을 비교하기 위해서는 == 연산자를 사용하지만, 객체비교를 위해 잘못된 결과가 나올 수 있으므로 객체 비교를 위해서는 equals()메소드를 사용함.
👉 == 연산자
결과값이 true , false로 나옴 두 객체의 내용물이 같은 지 비교하는게 아니라 두 레퍼런스 값을 비교
👉 boolean equals(Object obj)
자기 자신과 인자로 건네진 객체 obj를 비교하여, 객체의 내용이 값은지를 비교하는 메서드.
이름이 wrapper인 클래스는 존재하지 않음 다만 8개의 기본 타입 객체로 다루기 위해 8개 클래스를 통징하여 wrapper 클래스말함. 자바는 객체 지향 언어이므로 기본적으로 객체를 대상으로 처리하는 경우가 많음. 기본 타입의 값을 객체로 만들어 사용할 수 있도록 Wrapper 클래스를 제공함.
기본 타입의 값을 인자로 하여 Wrapper 객체를 생성하는 사례
Integer i = Integer.valueOf(10);
👉 Wrapper 객체에 들어 있는 기본 타입 값 알아내기
Integer i = Integer.valueof(10);👉 문자열을 기본 타입으로 변환
int i = Integer.parseInt("123"); // i = 123이 코드 사례처럼 parseInt(), parseDouble()은 static 타입.
👉 기본 타입 값을 문자열로 변환
string s1 = Integer.toString(123); // 정수 123을 문자열 "123"으로 변환
기본 타입의 값을 Wrapper 객체로 변환하는 것을 박싱 반대의 경우 언박싱이라함.
Integer ten = Integer.valueOf(10); // 박싱
int n = ten.intValue(); // 언박싱
JDK 는 박싱 언박싱이 자동으로 이루어지며 이를 자동박싱 자동언박싱이라 부름.
String 클래스는 문자열을 나타내며, 스트링 리터럴은 String 객체로 처리.
👉 스트링 리터럴과 new String()
스트링 리터럴과 new String()으로 생성된 스트링은 서로 다르게 관리됨. 스트링 리터럴은 자바 내부에서 리터럴 테이블로 특별히 관리하여, 동일한 리터럴은 공유시킴 그러나 new String()에 의해 생성된 스트링은 힙 메모리에 별도로 생성.
👉 스트링 객체는 수정이 불가능하다.
리터럴이든 new String()으로 생성했던, 생성된 스트링 객체는 수정이 불가능.
👉 compareTo()
메소드는 현재 스트링과 anotherString 스트링을 사전 순서로 비교하여 같으면 0, 현재 스트링이 anotherString보다 먼저 나오면 음수를, 뒤에 나오면 양수를 리턴함.
👉 공백 제거 trim()
스트링 앞뒤에 있는 공백 문자를 제거한 스트링을 리턴.
스트링을 다루는 클래스로서, 내부에 가변 크기를 버퍼를 가지고 문자의 개수에 따라 버퍼 크기를 자동 조절함으로 String 객체와 달리 생성된 스트링 수정이 가능gka.
StringBuffer sb = new StringBuffer("Java"); // Java를 가진 StringBuffer 객체