반응형
자바 API 도큐먼트
- 자바에서 제공하는 API(Application Programming Interface)는 라이브러리라고 부르기도 하고 프로그램 개발에 자주 사용되는 클래스 및 인터페이스의 모음을 말한다.
- java api
java.lang과 java.util 패키지
- 자바에서 가장 많이 사용하는 패키지는 java.lang 패키지와 java.util, java.time 패키지이다.
java.lang 패키지
- java.lang 패키지는 자바 프로그램의 기본적인 클래스를 담고 있는 패키지로 import 없이 클래스와 인터페이스를 사용할 수 있다.
클래스 | 용도 | |
Object | 자바 클래스의 최상위 클래스로 사용 | |
System | 표준 입력 장치(키보드)로부터 데이터를 입력받을 때 사용 | |
표준 출력 장치(모니터)로 출력하기 위해 사용 | ||
자바 가상 기계를 종료시킬 때 사용 | ||
쓰레기 수집기를 실행 요청할 때 사용 | ||
Class | 클래스를 메모리로 로딩할 때 사용 | |
Strign | 문자열을 저장하고 여러가지 정보를 얻을 때 사용 | |
StringBuffer, StringBuilder | 문자열을 저장하고 내부 문자열을 조작할 때 사용 | |
Math | 수학 함수를 이용할 때 사용 | |
Wrapper | Byte, Short, Character | 기본 타입의 데이터를 갖는 객체를 만들 때 사용 |
Integer, Float, Double | 문자열을 기본 타입으로 변환할 때 사용 | |
Boolean, Long | 입력 값 검사에 사용 |
java.util 패키지
- 개발에 조미료 역할을 하는 클래스를 담고 있고 컬렉션 클래스들이 대부분을 차지하고 있다.
클래스 | 용도 |
Arrays | 배열을 조작(비교, 복사, 정렬, 찾기)할 때 사용 |
Calendar | 운영체제의 날짜와 시간을 얻을 때 사용 |
Date | 날짜와 시간 정보를 저장하는 클래스 |
Objects | 객체 비교, Null 여부 등을 조사할 때 사용 |
StringTokenizer | 특정 문자로 구분된 문자열을 뽑아낼 때 사용 |
Random | 난수를 얻을 때 사용 |
Object 클래스
- 클래스를 선언할 때 extends 키워드로 다른 클래스를 상속하지 않으면 암시적으로 java.lang.Object 클래스를 상속한다.
- 객체 비교(equals()) : 두 객체가 논리적으로 동일한 객체라면 true를, 그렇지 않으면 false를 리턴한다.
- String 객체의 equals() 메서드는 String 객체의 번지(주소)를 비교하는 것이 아니고, 문자열이 동일한지 조사해서 같다면 true를 그렇지 않다면 false를 리턴한다.
- 객체 해시코드(hashCode()) : 객체를 식별할 하나의 정수값을 의미하며 객체의 메모리 번지(주소)를 이용해서 해시코드를 만들어 하기때문에 객체마다 다른 값을 가지고 있다.
- 해시코드 값이 다르면 다른 객체로 판단하고, 해시코드 값이 같으면 equals() 메서드로 다시 비교한다. 그러므로 hashCode(0 메서드가 true가 나와도 equals()의 리턴 값이 다르면 다른 객체가 된다.
- 객체의 동등 비교를 위해서는 Object의 equals() 메서드만 재정의하지 말고 hashCode(0 메서드도 재정의해서 논리적 동등객체일 경우 동일한 해시코드가 리턴되도록 해야 한다.
- Objects.hashCode(Object o)를 사용하면 편리하다.
- 객체 문자 정보(toString()) : 객체를 문자열로 표현한 값을 리턴한다.
- "클래스명@16진수해시코드"로 구성된 문자정보를 리턴하는데 메서드를 재정의해서 사용하면 원하는 정보를 얻을 수 있다.
- 객체 복제(clone()) : 원본 객체의 필드 값과 동일한 값을 가지는 새로운 객체를 생성하는 것을 의미하며 원본 객체를 안전하게 보호하기 위해서 사용한다.
- clone() 메서드는 얕은 복사를 리턴하고 객체를 복제하려면 원본 객체가 java.lang.Clonable 인터페이스를 구현하고 있어야 한다.
- Clonable 인터페이스를 구현하는 이유는 설계자가 복제를 허용한다는 의도적인 표시를 하기 위해서이다.
- Arrays.copyOf와 같은 메서드를 이용해 clone() 메서드를 재정의하여 깊은 복사로 사용한다.
- 객체의 복제는 얕은 복사와 깊은 복사가 있다.
- 얕은 복사는 데이터의 번지(주소)를 복사하여 값을 공유하는 복사를 의미하며 1번 객체가 값을 변경하면 2번 객체도 따라 변경된다.
- 깊은 복사는 데이터의 번지(주소)를 새로 생성하여 값을 고유하게 가지는 복사를 의미하며 1번 객체가 값을 변경해도 2번 객체는 변경되지 않는다.
- 객체 소멸자(finalize()) : 참조하지 않는 배열이나 객체는 쓰레기 수집기가 힙 영역에서 자동적으로 소멸시킨다. 쓰레기 수집기는 객체를 소멸하기 직전에 마지막으로 객체의 소멸자(finalize(0)를 실행시킨다.
- 한두 개의 객체를 쓰레기로 만들었다고 쓰레기 수집기가 수행되는 것을 보장하지는 않는다.
- 가급적 빨리 쓰레기 수집기를 수행해달라는 메서드는 System.gc()이고 반드시 수행을 보장하지 않는다.
- 쓰레기 수집기는 메모리가 부족할 경우나 CPU가 한가할 때에 JVM에 의해서 자동 실행된다.
Objects 클래스
- 객체 비교, 해시코드 생성, null 여부, 객체 문자열 리턴 등의 연산을 수행하는 정적 메서드들로 구성된 Object의 유틸리티 클래스이다.
리턴 타입 | 메서드(매개변수) | 설명 |
int | compare(T a, T b, Comparator<T> c) | 두 객체 a와 b를 Comparator를 사용해서 비교 |
boolean | deepEquals(Object a, Object b) | 두 객체의 깊은 비교(배열의 항목까지 비교) |
boolean | equals(Object a, Object b) | 두 객체의 얕은 비교(번지만 비교) |
int | hash(Object... values) | 매개값이 저장된 배열의 해시코드 생성 |
int | hashCode(Object o) | 객체의 해시코드 생성 |
boolean | isNull(Object obj) | 객체가 null인지 조사 |
boolean | nonNull(Object obj) | 객체가 null이 아닌지 조사 |
T | requireNonNull(T obj) | 객체가 null인 경우 예외 발생 |
T | requireNonNull(T obj, String message) | 객체가 null인 경우 예외발생(주어진 예외 메시지 포함) |
T | requireNonNull(T obj, Supplier<String> messageSupplier) | 객체가 null인 경우 예외 발생(람다식이 만든 예외 메시지 포함) |
String | toString(Object o) | 객체가 toString() 리턴 값 리턴 |
String | toString(Object o, String nullDefault) | 객체의 toString() 리턴 값 리턴, 첫 번째 매개값이 null일 경우 두 번째 매개 값 리턴 |
- 객체 비교(compare(T a, T b, Comparator c)) : 두 객체를 비굦로 비교해서 int 값을 리턴한다.
- 같으면 0, o1이 크면 1, o1이 작으면 -1을 리턴한다.
- 동등 비교(equals()와 deepEquals()) : 두 객체의 동등을 비교한다.
- equals의 경우 a와 b가 모두 null일 경우 true를 리턴하는 특이한 점이 있다.
a | b | Objects.equals(a, b) |
not null | not null | a.equals(b) 리턴값 |
null | not null | false |
not null | null | false |
null | null | true |
- deepEquals의 경우 a와 b가 서로 다른 배열일 경우, 항목 값이 모두 값다면 true를 리턴한다.
a | b | Objects.deepEquals(a, b) |
not null(not array) | not null(not array) | a.equals(b)의 리턴값 |
not null(array) | not null(array) | Arrays.deepEquals(a, b)의 리턴 값 |
not null | null | false |
null | not null | false |
null | null | ture |
- 해시코드 생성(hash(), hashCode()) : 매개값으로 주어진 값들을 이용해서 해시코드를 생성하는 역할을 하며 주어진 매개값들로 배열을 생성하고 Arrays.hashCode(Object[])를 호출해서 해시코드를 얻고 이를 리턴한다.
- 널 여부 조사(isNull(), nonNull(), requireNonNull()) : Objects.isNull(Object obj)는 매개값이 null일 경우 true를 반환하고, nonNull(Object obj)는 매개 값이 not null일 경우 ture를 리턴하고, requireNonNull()은 아래 세 가지로 오버로딩 되어 있다.
리턴 타입 | 메서드(매개변수) | 설명 |
T | requireNonNull(T obj) | not null -> obj null -> NullPointerException |
T | requireNonNull(T obj, String message) | not nul -> obj null -> NullPointerException |
T | requireNonNull(T obj, Supplier<String> msgSupplier) | not null -> obj null -> NullPointerException(msgSupplier.get()) |
- 객체 문자 정보(toString()) : 객체 정보를 리턴하며 두 가지로 오버로딩 되어 있다.
리턴 타입 | 메소드(매개 변수) | 설명 |
String | toString(Object o) | not null -> o.toString() null -> "null" |
String | toString(Object o, String nullDefault) | not null -> o.toString() null -> nullDefault |
System 클래스
- 자바는 운영체제상에서 바로 실행되는것이 아니라 JVM 위에서 실행되어 운영체제의 모든 기능을 자바 코드로 직접 접근하기가 어렵다.
- java.lang에 속하는 System 클래스를 이용하면 운영체제의 일부 기능을 이용할 수 있다.
- 정적 필드와 정적 메서드로 구성되어 있다.
- 프로그램 종료(exit()) : 강제로 종료할 경우에 사용한다.
- 정상 종료일 경우 0으로 지정하고 비정상 종료일 경우 0이외의 다른 값을 준다.
- 특정 값이 입력 되었을 경우에만 종료하고 싶다면 자바의 보안 관리자를 직접 설정해서 종료 상태 값을 확인하면 된다.
System.setSecurityManager(new SecurityManager() { @Override public void checkExit(int status) { if(status != 5) { throw new SecurityException(); } } });
- 쓰레기 수집기 실행(gc()) : 가급적 쓰레기 수집기를 빠르게 수행해달라고 요청하고 JVM은 빠른 시간 내에 실행 시키기 위해 노력한다.
- 현재 시각 읽기(currentTimeMillis(), nanoTime()) : 컴퓨터의 시계로부터 현재 시간을 읽어서 밀리세컨드(1/1000초) 단위와 나노 세컨드(1/10^9초) 단위의 long 값을 리턴한다.
- 프로그램 실행 소요 시간 측정에 사용되며 시작 시각을 읽고, 프로그램 종료 시각을 읽어서 차이를 구하면 소요 시간이 나온다.
- 시스템 프로퍼티 읽기(getProperty()) : JVM이 시작할 때 자동으로 설정되는 시스템의 속성값을 의미한다.
키(key) | 설명 | 값(value) |
java.version | 자바의 버전 | 1.8.0_20 |
java.home | 사용하는 JRE의 파일 경료 | <jdk 설치 경로>\jre |
os.name | Operating system name | Windows 10 |
file.separator | File separator("\" on UNIX) | \ |
user.name | 사용자의 이름 | 사용자 계정 |
user.home | 사용자의 홈 디렉토리 | C:\Users\사용자 계정 |
user.dir | 사용자가 현재 작업 중인 디렉토리 경로 | 다양 |
- 환경 변수 읽기(getenv()) : 프로그램상의 변수가 아니라 운영체제에서 이름과 값으로 관리되는 문자열 정보다.
Class 클래스
- 클래스와 인터페이스의 메타 데이터를 관리한다.
- Class 객체 얻기(getClass(), forName()) : Class 객체를 얻기 위해서 getClass() 메서드를 이용하고 Class의 생성자는 forName() 정적 메서드를 이용한다.
- 리플렉션(getDeclaredConstructors(), getDeclaredFields(), getDeclaredMethods()) : 클래스의 생성자, 필드, 메서드 정보를 알아낼 수 있다.
- 동적 객체 생성(newInstance()) : 클래스 이름을 결정할 수 없고 런타임 시에 클래스 이름이 결정되는 경우 매우 유용하게 사용된다.
- newInstance() 메서드는 기본 생성자를 호출해서 객체를 생성하기 때문에 반드시 클래스에 기본 생성자가 존재해야 한다.
String 클래스
- 문자열은 데이터로서 아주 많이 사용되고 있어서 미리 만들어놓은 클래스이다.
- String 생성자 : 비권장 생성자를 제외하고 약 13개의 생성자를 제공한다.
// 배열 전체를 String 객체로 생성 String str = new String(byte[] bytes); // 지정한 문자셋으로 디코딩 String str = new String(byte[] bytes, String charsetName); // 배열의 offset 인덱스 위치부터 length만큼 String 객체로 생성 String str = new String(byte[] bytes, int offset, int length); // 지정한 문자셋으로 디코딩 String str = new String(byte[] bytes, int offset, int length, String charsetName);
- String 메서드 : 문자열 추출, 비교, 찾기, 분리, 변환 등과 같은 다양한 메서드를 가지고 있고 그 중 사용 빈도가 높은 메서드는 아래와 같다.
리턴 타입 | 메서드명(매개 변수) | 설명 |
char | charAt(int index) | 특정 위치의 문자 리턴 |
boolean | equals(Object anObject) | 두 문자열을 비교 |
byte[] | getBytes() | byte[]로 리턴 |
byte[] | getBytes(Charset charset) | 주어진 문자셋으로 인코딩한 byte[]로 리턴 |
int | indexOf(String str) | 문자열 내에서 주어진 문자열의 위치를 리턴 |
int | length() | 총 문자의 수를 리턴 |
String | replace(CharSequence target, CharSequence replacement) | target 부분을 replacement로 대치한 새로운 문자열을 리턴 |
String | substring(int beginIndex) | beginIndex 위치에서 끝까지 잘라낸 새로운 문자열을 리턴 |
String | substring(int beginIndex, int endIndex) | beginIndex 위치에서 endIndex전까지 잘라낸 새로운 문자 열으 ㄹ리턴 |
String | toLowerCase() | 알파벳 소문자로 변환한 새로운 문자열을 리턴 |
String | toUpperCase() | 알파벳 대문자로 변환한 새로운 문자열을 리턴 |
String | trim() | 앞뒤 공백을 제거한 새로운 문자열을 리턴 |
String | valueOf(int i) valueOf(double d) |
기본 타입 값을 문자열로 리턴 |
StringTokenizer 클래스
- 문자열이 특정 구분자로 연결되어 있을 경우, 구분자를 기준으로 부분 문자열을 분리하기 위해서는 String의 split() 메서드를 이용하거나, java.util 패키지의 StringTokenizer 클래스를 이용할 수 있다.
- split() 메서드 : 정규표현식을 구분자로 해서 문자열을 분리한 후 배열에 저장하고 리턴한다.
- countTokens() 메서드 : 꺼내지 않고 남아 있는 토큰의 수
- hasMoreTokens() 메서드 : 남아 있는 토큰이 있는지 여부
- nextToken() 메서드 : 토큰을 하나씩 꺼내옴
StringBuffer, StringBuilder 클래스
- 내부 버퍼(buffer : 데이터를 임시로 저장하는 메모리)에 문자열을 저장해 두고, 그 안에서 추가, 수정, 삭제 작업을 할 수 있도록 설계되어 있다.
- StringBuffer는 멀티 스레드 환경에서 사용할 수 있도록 동기화 적용되어 있어 스레드에 안전하지만 StringBuildr는 단일 스레드 호나경에서만 사용하도록 설계 되어 있다.
메서드 | 설명 |
append(...) | 문자열 끝에 주어진 매개값을 추가 |
insert(int offset, ...) | 문자열 중간에 주어진 매개값을 추가 |
delete(int start, int end) | 문자열의 일부분을 삭제 |
deleteCharAt(int index) | 문자열에서 주어진 index의 문자를 삭제 |
replace(int start, int end, String str) | 문자열의 일부분을 다른 문자열로 대치 |
StringBuilder reverse() | 문자열의 순서를 뒤바꿈 |
setCharAt(int index, char ch) | 문자열에서 주어진 index의 문자를 다른 문자로 대치 |
반응형
'개발(합니다) > Java&Spring' 카테고리의 다른 글
[java-기초-12] 멀티 스레드 (5) | 2021.01.25 |
---|---|
[java-기초-11-02] 기본 API 클래스 (2) | 2021.01.13 |
[java-기초-06-부록] 애너테이션 (4) | 2021.01.11 |
[java-기초-10] 예외 처리 (0) | 2021.01.08 |
[java-기초-09] 중첩 클래스와 중첩 인터페이스 (0) | 2021.01.07 |