API 도큐먼트
저버 표준 모듈에서 제공하는 라이브러리는 방대하기 때문에 쉽게 찾아서 사용할 수 있도록 도와주는 API가 있다.
https://docs.oracle.com/en/java/javase/20/docs/api/index.html
Overview (Java SE 20 & JDK 20)
This document is divided into two sections: Java SE The Java Platform, Standard Edition (Java SE) APIs define the core Java platform for general-purpose computing. These APIs are in modules whose names start with java. JDK The Java Development Kit (JDK) AP
docs.oracle.com
java.base 모듈
java.base는 모든 모듈이 의존하는 기본 모듈로, 모듈 중 유일하게 requires하지 않아도 사용할 수 있다.
패키지 | 용도 |
java.lang | 자바 언어의 기본 클래스를 제공 |
java.util | 자료 구조와 관련된 컬렉션 클래스를 제공 |
java.text | 날짜 및 숫자를 원하는 형태의 문자열로 만들어 주는 포맷 클래스를 제공 |
java.time | 날짜 및 시간을 조작하거나 연산하는 클래스를 제공 |
java.io | 입출력 스트림 클래스를 제공 |
java.net | 네트워크 통신과 관련된 클래스 제공 |
java.nio | 데이터 저장을 위한 Buffer 및 새로운 입출력 클래스 제공 |
Object 클래스
클래스를 선언할 때 extends 키워드로 다른 클래스를 상속하지 않으면 암시적으로 java.lang.Object 클래스를 상속하게 된다.
메소드 | 용도 |
boolean equals(Object obj) | 객체의 번지를 비교하고 결과를 리 |
int hashCode() | 객체의 해시코드를 리턴 |
String toString() | 객체 문자 정보를 리턴 |
객체 동등 비교
Object obj1 = new Object();
Object obj2 = obj2;
boolean result = obj1.equals(obj2);
boolean result = (obj1 == obj2);
객체 해시코드
해시코드란 객체를 식별하는 정수
public int hashCode()
객체 문자 정보
Object의 toString() 메소드는 객체의 문자 정보를 리턴한다.
Object obj = new Object();
System.out.println(obj.toString());
//java.lang.Object@de6ced 결과
레코드 선언
데이터 전달을 위한 DTO(Data Tranfer Object)를 작성할 때 반복 코드를 줄이기 위해 레코드를 사용한다.
public record Person(String name, int age);
롬복 사용하기
롬복은 레코드와 마찬가지로 DTO 클래스를 작성할 때 사용한다.
레코드와의 차이점은 필드가 final이 아니며, Getter 대신 getXxx, Setter 대신 setXxx 로 생성된다.
1) https://projectlombok.org/download 접속
2) 설치파일(lombok.jar) 다운로드
3) lombok.jar을 eclipse 폴더로 이동하고 eclipse.ini 에 -javaagent:lombok.jar 추가
4) 프로젝트에서 [BuildPath]->[Add to Build Path]를 이용해 추가
어노테이션을 사용.
System 클래스
System클래스를 이용하면 운영체제의 일부 기능을 이용할 수 있다.
정적 멤버 | 용도 | |
필드 | out | 콘솔(모니터)에 문자 출력 |
err | 콘솔(모니터)에 에러 내용 출력 | |
in | 키보드 입력 | |
메소드 | exit(int status) | 프로세스 종료 |
currentTimeMillis() | 현재 시간을 밀리초 단위 long값으로 리턴 | |
nanoTime() | 현재 시간을 나노초 단위의 long값으로 리턴 | |
getProperty() | 운영체제와 사용자 정보 제공 | |
getenv() | 운영체제의 환경 변수 정보 제공 |
키보드 입력
int KeyCode = System.in.read();
프로세스 종료
System.exit(int status);
문자열 클래스
클래스 | 설명 |
String | 문자열을 저장하고 조작할 때 사용 |
StringBuilder | 효율적인 문자열 조작 기능이 필요할 때 사용 |
StringTokenizer | 구분자로 연결된 문자열을 분리할 때 사용 |
String 클래스
//기본 문자셋으로 byte 배열을 디코딩해서 String 객체로 생성
String str = new String(byte[] bytes);
//특정 문자셋으로 byte 배열을 디코딩해서 String 객체로 생성
String str = new String(byte[] bytes, String charsetName);
StringBuilder 클래스
리턴 타입 | 메소드(매개변수) | 설명 |
StringBuilder | append(기본값 | 문자열) | 문자열을 끝에 추가 |
StringBuilder | insert(위치, 기본값 | 문자열) | 문자열을 지정 위치에 추가 |
StringBuilder | delete(시작 위치, 끝 위치) | 문자열 일부를 삭제 |
StringBuilder | replace(시작 위치, 끝 위치, 문자열) | 문자열 일부를 대체 |
String | toString() | 완성된 문자열을 리턴 |
StringTokenizer 클래스
String data = "홍길동&이수홍,박연수,김자바-최명호";
String[] name = data.split("[&|,-]");
String data="홍길동/이수홍/박연수";
StringTokenizer st = new StringTokenizer(data, ",\t/";
포장 클래스
기본 타입 | 포장 클래스 |
byte | Byte |
char | Character |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
박싱과 언박싱
* 박싱: 기본 타입의 값을 포장 객체로 만드는 과정
* 언박싱: 반대로 포장 객체에서 기본 타입의 값을 얻어내는 과정
Integer obj = 100; //박싱
int value = obj; //언박싱
포장 값 비교
포장 객체는 내부 값을 비교하기 위해 ==, != 사용 불가! 객체의 번지를 비교하기 때문
Integer obj1 = 300;
Integer obj2 = 300;
println(obj1 == obj2); //false
=> .equals() 이용해야 한다.
수학 클래스(Math)
구분 | 코드 | 리턴값 |
절대값 | int v = Math.abs(-5); | v = 5 |
올림값 | double v= Math.ceil(5.3); | v = 6.0 |
내림값 | double v = Math.foor(5.3); | v = 5.0 |
최대값 | int v = Math.max(5,9); | v = 9 |
최소값 | int v = Math.min(5,9); | v = 5 |
랜덤값 | double v11 = Math.random(); | 0.0<=v11<1.0 |
반올림값 | long v = Math.round(5.3); | v = 5 |
날짜와 시간 클래스
클래스 | 설명 |
Date | 날짜 정보를 전달하기 위해 사용 |
Calendar | 다양한 시간대별로 날짜와 시간을 얻을 때 사용 |
LocalDateTime | 날짜와 시간을 조작할 때 사용 |
Date 클래스
Date now = new Date();
public class DateExample {
public static void main(String[] args) {
Date now= new Date();
String strNow1= now.toString();
System.out.println(strNow1);//Fri Apr 21 11:00:43 KST 2023
SimpleDateFormat sdf=new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");
String strNow2=sdf.format(now);
System.out.println(strNow2);//2023.04.21 11:00:43
Date date = new Date();
System.out.println(date);
System.out.println(date.getTime());//1682042443861밀리초
java.sql.Date date2 = new java.sql.Date(date.getTime());
System.out.println(date2); //2023-04-21
System.out.println(System.currentTimeMillis()); //밀리초
System.out.println(new java.sql.Date(System.currentTimeMillis())); //2023-04-21
}
}
Calendar 클래스
Calendar now = Calendar.getInstance();
int year = now.get(Calendar.YEAR);
int month = now.get(Calendar.MONTH) + 1; //월은 0부터 시작
int day = now.get(Calendar.DAY_OF_MONTH);
int week = now.get(Calendar.DAY_OF_WEEK);
int amPm = now.get(Calendar.AM_PM);
int hour = now.get(Calendar.HOUR);
int minute = now.get(Calendar.MINUTE);
int second = now.get(Calendar.SECOND);
TimeZone 클래스를 이용해 알고 싶은 다른 시간대의 Calendar을 얻을 수 있다.
TimeZone timeZone = TimeZone.getTimeZone("America/Los_Angeles");
Calendar now = Calendar.getInstance(timeZone);
날짜와 시간 조작
LocalDateTime now = LocalDateTime.now();
public class DateTimeOperationExample {
public static void main(String[] args) {
LocalDateTime now= LocalDateTime.now();
DateTimeFormatter dtf=DateTimeFormatter.ofPattern("yyyy.MM.dd. a HH:mm:ss");
System.out.println("현재 시간: "+now.format(dtf));
LocalDateTime result1=now.plusYears(1);
System.out.println("1년 덧셈: "+result1.format(dtf));
LocalDateTime result2 = now.minusMonths(2);
System.out.println("2달 뺄셈: "+result2.format(dtf));
LocalDateTime result3 = now.plusDays(7);
System.out.println("7일 덧셈: "+result3.format(dtf));
}
}
/*
결과
현재 시간: 2023.04.21. 오전 11:10:22
1년 덧셈: 2024.04.21. 오전 11:10:22
2달 뺄셈: 2023.02.21. 오전 11:10:22
7일 덧셈: 2023.04.28. 오전 11:10:22
*/
형식 클래스
Format 클래스 | 설명 |
DecimalFormat | 숫자를 형식화된 문자열로 변환 |
SimpleDateFormat | 날짜를 형식화된 문자열로 변환 |
정규 표현식 클래스
//이메일 형식
String str="\\w+@\\w+\\.\\W+(\\.\\W+)?";
//전화번호 형식
String phone="(02|010)-\\d{3,4}-\\d{4}";
어노테이션
어노테이션
- 코드에서 @으로 작성되는 요소
- 클래스 또는 인터페이스를 컴파일하거나 실행할 때 어떻게 처리해야 할 것인지를 알려주는 설정 정보
용도
1) 컴파일 시 사용하는 정보 전달
2) 빌드 툴이 코드를 자동으로 생성할 때 사용하는 정보 전달
3) 실행 시 특정 기능을 처리할 때 사용하는 정보 전달
어노테이션 타입 정의와 적용
- @interface 뒤에 사용할 어노테이션 이름 작성
public @interface AnnotationName{
}
@AnnotationName
어노테이션 적용 대상(어디에)
@Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD})
public @interface AnnotationName{
}
어노테이션 유지 정책(언제)
RententionPolicy 열거 상수 | 어노테이션 적용 시점 | 어노테이션 제거 시점 |
SOURCE | 컴파일 할 때 적용 | 컴파일된 후에 제거됨 |
CLASS | 메모리로 로딩할 때 적용 | 메모리로 로딩된 후에 제거됨 |
RUNTIME | 실행할 때 적용 | 계속 유지됨 |
@Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface AnnotationName{
}
어노테이션 설정 정보 이용
리턴 타입 | 메소드명(매개변수) | 설명 |
boolean | isAnnotationPresent(AnnotationName.class) | 지정한 어노테이션이 적용되었는지 여부 |
Annotation | getAnnotation(AnnotationName.class) | 지정한 어노테이션이 적용되어 잇으면 어노테이션을 리턴하고, 그렇지 않으면 null리턴 |
Annotation[] | getDeclaredAnnotations() | 적용된 모든 어노테이션을 리턴 |
'IT > JAVA' 카테고리의 다른 글
[JAVA] #14 멀티 스레드 (0) | 2023.04.26 |
---|---|
[JAVA] #13 제네릭 (0) | 2023.04.24 |
[JAVA] #11 예외 처리 (0) | 2023.04.19 |
[JAVA] #10 라이브러리 모듈 (0) | 2023.04.18 |
[JAVA] #9 중첩 선언과 익명 객체 (0) | 2023.04.17 |