모든 모듈이 의존하는 기본 모듈로, 이 모듈이 포함된 패키지는 아래와 같다
| 패키지 | 용도 |
|---|---|
java.lang | 자바 언어의 기본 클래스들을 포함 |
java.util | 자료구조와 관련된 collections 클래스들을 포함 |
java.text | 날짜, 숫자 포맷팅 클래스들을 포함 |
java.time | 날짜, 시간 연산 및 조작 |
java.io | 입출력 스트림 관련 |
java.net | 네트워크 통신 관련 |
java.nio | 데이터 저장 |
java.lang 패키지에 있는 클래스와 인터페이스는 import 없이 사용할 수 있다.
java.lang 에 포함된 클래스
| 클래스 | 용도 |
|---|---|
Object | 자바 클래스의 최상위 클래스 |
System | 데이터를 입력받기, 콘솔에 출력하기, 프로세스 종료, 진행 시간 확인, 시스템 속성 확인 |
| 문자열 클래스 | String, StringBuilder, java.util.StringTokenizer 문자열을 저장, 편집 |
| 포장 클래스 | Byte, Short, Character, Integer, Float, Double, Boolen 기본 타입 값 포장, 문자열을 기본 타입으로 변환 |
Math | 수학 관련 |
Math | 수학 관련 |
Class | 클래스 정보 조사 |
자바의 모든 클래스는 java.lang.Object 클래스의 자손이고,
extends 없이 클래스를 선언하면 기본적으로 java.lang.Object 클래스를 상속한다.
따라서 모든 객체에서 Object 가 가지는 메서드를 그대로 사용하거나, 재정의해서 사용할 수 있다.
@Override
public boolean equals(Object obj) { ... }
/* 사용 */
boolean result = obj1.equals(obj2);
그냥 사용하면 비교 연산자 == 와 역할이 같다. 재정의해서 조건에 맞게 사용할 수 있다. 특히 객체 주소가 다를때, 객체 내부의 데이터가 같은지 비교하는데에 사용할 수 있다.
객체의 메모리 주소를 이용해서 해시코드 정수값을 리턴한다.
@Override
public int hashCode() { ... }
그냥 사용하면 객체 해시코드가 포함된 문자열이 return된다. 필요한 문자열만 리턴하도록 재정의해서 사용한다.
@Override
public String toString() { ... }
DTO 를 작성할 때, 데이터마다 final 필드 , Getter 메서드 등등이 반복된다.
class 대신 record 키워드로 클래스를 선언하면 final 필드 , 생성자 , Getter 메서드 가 자동으로 추가된다
public record ClassName(String name, int id, ...) {}
System 클래스의 정적 멤버들을 이용하여 운영체제의 일부 기능을 자바에서 접근할 수 있다.
| 구분 | 정적 멤버 | 용도 |
|---|---|---|
| 필드 | out | 콘솔에 출력 |
| 필드 | err | 콘솔에 에러 내용 출력 |
| 필드 | in | 키보드 입력 |
| 메서드 | exit(int status) | 프로세스 종료 |
| 메서드 | currentTimeMills() | 현재 시간을 밀리초 long 값으로 리턴 |
| 메서드 | nanoTime() | 현재 시간을 나노초 long 값으로 리턴 |
| 메서드 | getProperty() | 운영체제와 사용자의 정보 |
| 메서드 | getenv() | 운영체제의 환경 변수 정보 |
/* 출력 */
System.out.println(출력값);
System.err.println(e.getMessage());
/* 입력 */
int KeyCode = System.in.read();
입력한 키에 대응되는 번호가 저장된다.
System.exit(int status);
System.exit(0); // 정상 종료일 때
System.exit(1); // 비정상 종료일 때
String str = new String(arr);
문자열 연산 시 매번 새로운 String 객체가 생성되어 효율적이지 않다.
잦은 문자열 변경 작업을 해야 할 때에는 StringBuilder 클래스를 사용한다.
/* 메소드 체이닝 패턴 */
String str = new StringBuilder()
.append(str1) // 문자열 끝에 문자열 추가
.insert(i, str2) // i 위치에 문자열 추가
.delete(s, e) // s 위치부터 e 앞 위치까지 삭제
.toString();
문자열이 구분자로 연결되어있을 경우, split() 메서드 대신 StringTokenizer 를 사용해서 분리할 수 있다.
StringTokenizer st = new StringTokenizer(data, "/");
while(st.hasMoreTokens()) {
String token = st.nextToken();
System.out.println(token);
}
st.countTokens() // 분리할 수 있는 문자열 수
st.hasMoreTokens() // 문자열이 남아있는지 여부
st.nextToken() // 다음 문자열
포장 객체 : 기본 타입의 값 (byte, char, int, double, boolean 등...)을 갖는 객체
포장 클래스 : 포장 객체를 생성하기 위한 클래스로 java.lang 패키지에 포함되어있다. Byte, Character, Integer, Short, Long, Float, Double, Boolean
박싱 : 값이 포장 클래스 변수에 대입됨
언박싱 : 포장 객체가 기본 타입 변수에 대입됨
Integer obj = 100; // 박싱
int value = obj; // 언박싱
포장 객체에는 메모리 주소가 저장되어 있으므로, 값을 == 연산자로 비교할 수 없고, eqauls() 메서드로 값을 비교해야 한다.
Math.abs(값) // 절대값
Math.ceil(값) // 올림값
Math.floor(값) // 내림값
Math.round(값) // 반올림값
Math.random() // 랜덤값 (0~1 double 타입 난수)
Math.max(값1, 값2, ...) // 최댓값
Math.min(값1, 값2, ...) // 최솟값
자료구조를 이용한 컬렉션 프레임워크(List, Set, Map 인터페이스)가 java.util 패키지에 포함되어있다.
import java.util.Date;
...
Date now = new Date(); // 현재 시각 객체
import java.util.Calendar;
...
Calendar now = Calendar.getInstance(); // 현재 날짜 객체
now.get(Calendar.YEAR) // 년
now.get(Calendar.MONTH) + 1 // 월 (0부터시작)
now.get(Calendar.DAY_OF_MONTH) // 일
now.get(Calendar.DAY_OF_WEEK) // 요일
now.get(Calendar.AM_PM) // 오전or오후
now.get(Calendar.HOUR) // 시
now.get(Calendar.MINUTE) // 분
now.get(Calendar.SECOND) // 초
날짜, 숫자 등을 원하는 형태의 문자열로 변환하는 클래스들을 포함하는 패키지
숫자를 형식화된 문자열로 변환한다.
| 기호 | 의미 | 패턴 예 | 1234.56 변환 결과 |
|---|---|---|---|
0 | 10진수 (빈자리는 0으로 채움) | 0 0.0 00000.000 | 1234 1234.5 01234.560 |
# | 10진수 | # #.# #####.### | 1234 1234.5 1234.56 |
. | 소수점 | ||
, | 단위 구분 | #,### | 1,234 |
+- | 양수, 음수 | +# -# | +1234 -1234 |
E | 지수 | 0.0E0 | 1.2E3 |
% | 퍼센트 | #.# % | 123456 % |
\u00A4 | 통화 | \u00A4 #,### | W 1,234 |
; | 양수일때랑 음수일때 따로 지정하는 구분자 | +#.### ; -#### | +1,234 -1234 |
import java.text.DecimalFormat;
...
double data = 1234.56;
DecimalFormat formatting = new DecimalFormat("#,###");
...
formatting.format(data) // 1,234
날짜/시간을 형식화된 문자열로 변환한다.
import java.text.SimpleDateFormat;
...
Date today = new Date(); // 현재 날짜 객체
...
/* SimpleDateFormat 로 형식 지정하기 */
SimpleDateFormat formatting = new SimpleDateformat("yyyy.MM.dd HH:mm:ss");
formatting.format(today) // 형식 지정된 문자열 날짜