책에 나온 JAVA에서 주로 쓰이는 API들 정리.
*API(=라이브러리) : 프로그램 개발에 사용되는 클래스 및 인터페이스의 모음.
1. java.lang 패키지
- 자바 프로그램의 기본적인 클래스를 담고 있는 패키지.
2. java.util 패키지
- 대부분 컬렉션 클래스들로 이루어짐.
클래스 | 용도 |
Arrays | |
Calendar | |
Date | |
Objects | 객체 비교, null 검사 |
StringTokenizer | 특정 문자로 구분된 문자열을 뽑아낼 때 |
Random | 난수 생성 |
3. java.lang 패키지의 Object 클래스의 메소드
- Object 클래스는 자바의 최상위 부모 클래스 이다.
메소드 | 설명 |
객체 비교(equals()) - 논리적으로 동등한지의 여부를 검사. |
public boolean equals(Object obj) { ... } *논리적으로 동등
|
객체 해시코드(hashCode()) - 객체를 식별하는 하나의 정수값을 리턴. |
public int hashCode() { ... } - 객체의 메모리 번지를 이용해서 해시코드를 만들어 리턴. - 논리적 동등 비교 시 hashCode()로 검사하고, 만약 같으면 equals()로 추가 검사하여 재검사한다. - hashCode()에서 true여도 equals()가 false면 다른 객체임. |
객체 문자 정보(toString()) - 객체를 문자열로 표현한 값을 리턴. |
public String toString() - "클래스명@16진수해시코드"로 구성된 문자 정보를 리턴.
|
객체 복제(clone()) - 원본 객체를 안전하게 보호하기 위해 원본 객체의 필드값과 동일한 값을 가지는 새로운 객체 생성
- 이 메소드로 객체를 복제하려면 원본 객체는 반드시 java.lang.Cloneable 인터페이스를 구현하고 있어야 한다. |
1. 얕은 복제(thin clone) - 단순히 필드값을 복사해서 객체를 복사하는 것. - 필드값만 복사하기 때문에 필드가 기본 타입일 경우 값 복사가 일어나고, 참조 타입일 경우 객체의 번지가 복사된다.
- ** 참조 타입의 경우 객체의 번지만 복사되기 때문에 원본 객체와 복제 객체가 같은 객체를 참조하게 된다. 그래서 참조 객체를 변경하면 원본 객체도 변경된다!!!
|
2. 깊은 복제(deep clone) - 참조하고 있는 객체도 복제하는 복사. - clone()은 기본적으로 얕은 복제를 하므로 깊은 복제를 하려면 clone() 메소드를 오버라이딩 해서 참조객체들을 새로운 객체로 넣어줘야 한다. |
|
객체 소멸자(finalize()) |
- 참조하지 않는 배열,객체는 GC가 "힙 영역"에서 자동적으로 소멸시킨다. - GC는 객체 소멸 직전 마지막으로 객체 소멸자를 실행시킨다.
- 순서대로X, 전부 소멸도X
|
4. java.util 패키지의 Objects 클래스
- Object의 유틸리티 클래스.
메소드 | 설명 |
public int compare(T a, T b, Comparator<T>c)) 객체 비교. |
a가 b보다 작으면 음수, 같으면 0, 크면 양수를 리턴 public interface Comparator<T> 인터페이스를 포함해야한다. |
동등 비교(equals()) |
a,b가 모두 null 일 경우 true를 리턴한다. |
동등 비교(deepEquals()) | a,b가 서로 다른 배열일 경우, 항목 값이 모두 같으면 true 리턴. |
해시코드 생성(hash(), hashCode()) | |
널 여부 조사(isNull(), nonNull(), requireNonNull()) | requireNonNull()은 null이면 NullPointerException을 발생시킨다. |
객체 문자 정보(toString()) |
5. System 클래스
- 자바 프로그램은 JVM 위에서 실행되기 때문에 운영체제의 모든 기능에 직접 접근하기 어렵다.
- 벗, System 클래스로 운영체제의 일부 권한을 사용할 수 있다.
- 운영체제의 기능을 다루는 만큼 System 클래스의 모든 필드와 메소드는 정적으로 되어있다.
메소드 | 설명 |
프로그램 종료(exit()) | 현재 실행하고 있는 프로세스를 강제 종료 |
GC 실행(gc()) |
자바는 개발자가 메모리를 직접 코드로 관리하지 않고, JVM이 대신 해준다. JVM은 1) 메모리가 부족할 때 2) CPU가 한가할 때 GC를 실행시켜 사용하지 않는 객체를 힙 영역에서 삭제한다. |
현재 시각 읽기(currentTimeMillis(), nanoTime()) | 프로그램 실행 소요 시간 측정에 사용되는 long 변수 리턴. |
시스템 프로퍼티 읽기(getProperty()) |
JVM이 시작할 때 자동 설정되는 시스템의 속성값을 리턴. 운영체제 종류, 자바 버전, JVM 버전, 여러 경로 등 |
환경 변수 읽기(getenv()) |
운영체제에서 관리하는 문자열 정보인 환경 변수 읽기. (ex. 자바 깔 때 지정한 JAVA_HOME) |
6. Class 클래스
- 클래스와 인터페이스의 메타데이터(이름, 생성자, 필드, 메소드)가 저장된 클래스.
메소드 | 설명 |
Class 객체 얻기(getClass(), forName()) |
getClass()는 객체를 생성한 클래스만 사용할 수 있는데, 객체 생성 전 직접 Class 객체를 얻으려면 정적 메소드인 forName()을 이용하면 된다.
forName()은 클래스 전체이름을 매개값으로 받고 Class객체를 리턴한다. |
리플렉션 (getDeclaredConstructor(), getDeclaredFields(), getDeclaredMethod()) |
Class 객체를 이용해서 클래스의 생성자, 필드, 메소드 정보를 알아내는것. |
동적 객체 생성(newInstance())
** 글만 봐선 잘 이해못하니까 프로젝트할 때 써보도록. |
Class 객체를 이용해 new 연산자를 사용하지 않고 동적으로 객체를 생성한다. 코드 작성 시에 클래스 이름을 결정할 수 없고, 런타임 시에 클래스 이름이 결정되는 경우에 매우 유용.
기본 생성자를 호출해서 객체를 생성하기 때문에 반드시 클래스에 기본 생성자가 존재해야 한다. 만일 매개변수가 있는 생성자를 쓰고싶다면 리플렉션으로 Constructor 객체를 얻어 newInstance() 메소드를 호출한다. |
7. String 클래스
- 문자열 생성, 추출, 비교, 찾기, 분리, 변환하는 메소드를 제공
메소드 | 설명 |
charAt(int Index) | 특정 위치의 문자 리턴 |
equals(Object anObject) | 두 문자열을 비교 |
getBytes() |
문자열을 바이트 배열로 변환. byte[]로 리턴
네트워크로 문자열을 전송하거나, 문자열을 암호화할 때 문자열을 바이트 배열로 변환한다. |
getBytes(Charset charset) | 주어진 문자셋으로 인코딩한 byte[]로 리턴 |
indexOf(String str) | 문자열 내에서 주어진 문자열의 위치를 리턴 |
length() | 총 문자의 수를 리턴 |
replace(CharSequence target, CharSequence replacement) | target 부분을 replactement로 대치한 새로운 문자열을 리턴 |
substring(int beginindex) | beginIndex 위치에서 끝까지 잘라낸 새로운 문자열을 리턴 |
substring(int begin, int end) | begin ~ end 전까지 잘라낸 새로운 문자열을 리턴 |
toLowerCase() | 소문자로 변환한 새로운 문자열을 리턴 |
toUpperCase() | 대문자로 변환한 새로운 문자열을 리턴 |
trim() | 앞 뒤 공백을 제거한 새로운 문자열을 리턴 |
valueOf(int i) valueOf(double d) |
기본 타입값을 문자열로 리턴 |
8. StringTokenizer 클래스
- 문자열이 특정 구분자(delimiter)로 연결되어 있을 경우, 구분자를 기준으로 부분 문자열을 분리하기 위해서는 String의 split() 메소드를 사용하거나, 이 클래스를 이용할 수 있다.
- split()은 정규 표현식으로 구분하고, StringTokenizer는 문자로 구분한다.
메소드 | 설명 |
split() | 제외하고싶은거 넣으면 그걸 기준으로 나눈다음에 문자열 배열로 리턴해준다. |
countTokens() | 꺼내지 않고 남아 있는 토큰의 수 |
hasMoreTokens() | 남아 있는 토큰이 있는지 여부 |
nextToken() | 토큰을 하나씩 꺼내옴 |
9. StringBuffer, StringBuilder 클래스
메소드 | 설명 |
append() | 문자열 끝에 주어진 매개값 추가 |
insert(int offset) | 문자열 중간에 매개값을 추가 |
delete(int start, int end) | 문자열의 일부분을 삭제 |
deleteCharAt(int Index) | 문자열에서 주어진 인덱스의 문자를 삭제 |
replace(int start, int end, String str) | 문자열의 일부분을 다른 문자열로 대치 |
StringBuilder reverse() | 문자열의 순서를 뒤바꿈 |
setCharAt(int Index, char ch) | 문자열에서 주어진 index의 문자를 다른 문자로 대치 |
10. Pattern 클래스로 정규 표현식을 검사할 수 있다.
Pattern.matches("정규식", "검증할 문자열");
11. Arrays 클래스
메소드 | 설명 |
binarySearch(배열, 찾는값) | 전체 배열 항목에서 찾는 값이 있는 인덱스 리턴 |
copyOf(원본배열, 복사할길이) | 원본 배열의 0에서부터 복사할 길이만큼 복사할 배열 리턴, 복사. |
copyOfRange(원본배열, 시작인덱스, 끝인덱스) | 원본 배열의 시작부터 끝까지 배열 리턴 |
deepEquals() | 두 배열의 깊은 비교 |
equlals() | 얕은 비교 |
fill(배열, 값) | 동일한 값으로 저장 |
fill(배열, 시작, 끝 , 값) | 정해진 배열에 값 저장 |
sort(배열) | 오름차순으로 정렬 |
toString(배열) | answkduf flxjs |
12. Wrapper(포장) 클래스
- 기본 타입(byte, char, short, int, long, float, double, boolean) 의 값을 갖는 객체를 생성할 수 있다.
- 이런 객체를 포장 객체라고 한다.
- 기본 타입의 값을 내부에 두고 포장하기 때문에.
- 포장 객체가 포장하고 있는 기본 타입 값은 외부에서 변경할 수 없다. 만약 내부 값을 변경하고 싶다면 새로운 포장 객체를 만들어야 한다.
.... 이거 연습문제 꼭 풀어보장
'Deperecated > JAVA' 카테고리의 다른 글
JAVA - 멀티 쓰레드 (0) | 2020.01.17 |
---|---|
JAVA - 중첩 클래스&중첩 인터페이스 (1) | 2020.01.11 |
JAVA - 예외 처리 (0) | 2020.01.10 |
JAVA - 익명 구현 객체, 람다식 (0) | 2020.01.09 |
JAVA - 인터페이스 (0) | 2020.01.09 |