[Java] java.base 모듈

Local Gaji·2023년 8월 30일

이것이 자바다

목록 보기
14/18

java.base

모든 모듈이 의존하는 기본 모듈로, 이 모듈이 포함된 패키지는 아래와 같다

패키지용도
java.lang자바 언어의 기본 클래스들을 포함
java.util자료구조와 관련된 collections 클래스들을 포함
java.text날짜, 숫자 포맷팅 클래스들을 포함
java.time날짜, 시간 연산 및 조작
java.io입출력 스트림 관련
java.net네트워크 통신 관련
java.nio데이터 저장

1. java.lang

java.lang 패키지에 있는 클래스와 인터페이스는 import 없이 사용할 수 있다.


java.lang 에 포함된 클래스

클래스용도
Object자바 클래스의 최상위 클래스
System데이터를 입력받기, 콘솔에 출력하기, 프로세스 종료, 진행 시간 확인, 시스템 속성 확인
문자열 클래스String, StringBuilder, java.util.StringTokenizer
문자열을 저장, 편집
포장 클래스Byte, Short, Character, Integer, Float, Double, Boolen
기본 타입 값 포장, 문자열을 기본 타입으로 변환
Math수학 관련
Math수학 관련
Class클래스 정보 조사

🎈 1. Object

자바의 모든 클래스는 java.lang.Object 클래스의 자손이고,
extends 없이 클래스를 선언하면 기본적으로 java.lang.Object 클래스를 상속한다.
따라서 모든 객체에서 Object 가 가지는 메서드를 그대로 사용하거나, 재정의해서 사용할 수 있다.


🔰 equals : 객체 주소 비교

@Override
public boolean equals(Object obj) { ... }


/* 사용 */
boolean result = obj1.equals(obj2);

그냥 사용하면 비교 연산자 == 와 역할이 같다. 재정의해서 조건에 맞게 사용할 수 있다. 특히 객체 주소가 다를때, 객체 내부의 데이터가 같은지 비교하는데에 사용할 수 있다.


🔰 hashCode : 객체 해시코드 메서드

객체의 메모리 주소를 이용해서 해시코드 정수값을 리턴한다.

@Override
public int hashCode() { ... }

🔰 toString : 객체를 문자열으로 표현

그냥 사용하면 객체 해시코드가 포함된 문자열이 return된다. 필요한 문자열만 리턴하도록 재정의해서 사용한다.

@Override
public String toString() { ... }

🔰 레코드

DTO 를 작성할 때, 데이터마다 final 필드 , Getter 메서드 등등이 반복된다.
class 대신 record 키워드로 클래스를 선언하면 final 필드 , 생성자 , Getter 메서드 가 자동으로 추가된다

public record ClassName(String name, int id, ...) {}

🎈 2. System 클래스

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);   // 비정상 종료일 때

🎈 3. 문자열 클래스


🔰 String 클래스

String str = new String(arr); 

🔰 StringBuilder 클래스

문자열 연산 시 매번 새로운 String 객체가 생성되어 효율적이지 않다.
잦은 문자열 변경 작업을 해야 할 때에는 StringBuilder 클래스를 사용한다.

/* 메소드 체이닝 패턴 */
String str = new StringBuilder()
    .append(str1)     // 문자열 끝에 문자열 추가
    .insert(i, str2)  // i 위치에 문자열 추가
    .delete(s, e)     // s 위치부터 e 앞 위치까지 삭제
    .toString();

🔰 StringTokenizer 클래스

문자열이 구분자로 연결되어있을 경우, split() 메서드 대신 StringTokenizer 를 사용해서 분리할 수 있다.

StringTokenizer st = new StringTokenizer(data, "/");

while(st.hasMoreTokens()) {
  String token = st.nextToken();
  System.out.println(token);
}

st.countTokens()     // 분리할 수 있는 문자열 수
st.hasMoreTokens()   // 문자열이 남아있는지 여부
st.nextToken()       // 다음 문자열

🎈 4. 포장 클래스

포장 객체 : 기본 타입의 값 (byte, char, int, double, boolean 등...)을 갖는 객체
포장 클래스 : 포장 객체를 생성하기 위한 클래스로 java.lang 패키지에 포함되어있다. Byte, Character, Integer, Short, Long, Float, Double, Boolean


🔰 언박싱

박싱 : 값이 포장 클래스 변수에 대입됨
언박싱 : 포장 객체가 기본 타입 변수에 대입됨

Integer obj = 100;  // 박싱
int value = obj;    // 언박싱

포장 객체에는 메모리 주소가 저장되어 있으므로, 값을 == 연산자로 비교할 수 없고, eqauls() 메서드로 값을 비교해야 한다.


🎈 5. Math 클래스

Math.abs()    // 절대값
Math.ceil()   // 올림값
Math.floor()  // 내림값
Math.round()  // 반올림값

Math.random()   // 랜덤값 (0~1 double 타입 난수)

Math.max(1,2, ...)   // 최댓값
Math.min(1,2, ...)   // 최솟값

2. java.util


🎈 1. 컬렉션 자료구조

자료구조를 이용한 컬렉션 프레임워크(List, Set, Map 인터페이스)가 java.util 패키지에 포함되어있다.

컬렉션 프레임워크 정리


🎈 2. 날짜/시간 불러오기


🔰 Date 클래스

import java.util.Date;
...

Date now = new Date();   // 현재 시각 객체

🔰 Calendar 클래스

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)        // 초

3. java.text

날짜, 숫자 등을 원하는 형태의 문자열로 변환하는 클래스들을 포함하는 패키지


🎈 1. 숫자 포맷팅 : DemicalFormat

숫자를 형식화된 문자열로 변환한다.

기호의미패턴 예1234.56 변환 결과
010진수
(빈자리는 0으로 채움)
0
0.0
00000.000
1234
1234.5
01234.560
#10진수#
#.#
#####.###
1234
1234.5
1234.56
.소수점
,단위 구분#,###1,234
+-양수, 음수+#
-#
+1234
-1234
E지수0.0E01.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 

🎈 2. 문자 포맷팅 : SimpleDateFormat

날짜/시간을 형식화된 문자열로 변환한다.

import java.text.SimpleDateFormat;

...

Date today = new Date();   // 현재 날짜 객체

...

/* SimpleDateFormat 로 형식 지정하기 */
SimpleDateFormat formatting = new SimpleDateformat("yyyy.MM.dd HH:mm:ss");

formatting.format(today)   // 형식 지정된 문자열 날짜























0개의 댓글