API
API
- 프로그램 개발에 자주 사용되는 클래스 및 인터페이스 모음
util 패키지
클래스 | 용도 |
---|---|
Arrays | 배열을 조작(비교, 복사, 정렬, 찾기)할 때 사용 |
Calendar | 운영체제의 날짜와 시간을 얻을 때 사용 |
Date | 날짜와 시간 정보를 저장하는 클래스 |
Objects | 객체 비교, 널(null) 여부 등을 조사할 때 사용 |
StringTokenizer | 특정 문자로 구분된 문자열을 뽑아낼 때 사용 |
Random | 난수 얻을때 사용 |
Object 클래스
객체 해시코드(hashCode())
- 객체 해시코드란 객체를 식별할 하나의 정수값을 말함
- 리턴된 해시코드 값이 같은지 확인하는 메소드
- hashCode() 실행 시 해시코드 값이 같으면 equals() 메소드로 다시 비교함.(hashCode() 메소드가 true 여도, equals()의 리턴값이 다르면 다른 객체가 됨.)
객체 문자 정보(toString())
- toString() 메소드는 객체의 문자 정보를 16진수해시코드로 구성된 문자 정보를 리턴함.
- 오버라이딩 하여 간결하고, 유익한 정보를 리턴하도록 되어있음.(원래 메소드의 리턴값은 별 값어치 없는 정보임)
객체 복제(clone())
- 객체 복제는 원본 객체의 필드값과 동일한 값을 가지는 새로운 객체를 생성하는것을 말함.
- 객체 복체를 하는 이유는 원본 객체를 안전하게 보호하기 위해서임.
- 얕은복제(thin clone)
- 단순히 필드값을 복사해서 객체를 복제하는것을 말하며, 필드값만 복제하기 때문에 필드가 기본타입일 경우 값 복사가 일어나고, 필드가 참조 타입일 경우 객체의 번지가 복사 됨.
- 복제 객체에서 참조 객체를 변경하면 원본 객체도 변경된 객체를 가지게 됨.(얕은 복제의 단점)
-
이메소드로 객체를 복제하려면 원본 객체는 반드시 java.lang.Cloneable 인터페이스를 구현하고 있어야 함.
- 깊은복제(deep clone)
- 깊은 복제란 참조하고있는 객체도 복제하는것을 말함. 원본과 복제본이 각각 참조하는 객체는 다름.
Object 클래스
- 연산을 수행하는 정적 메소드들로 구성된 Object의 유틸리티 클래스
객체 비교(compare(T a,T b, Comparatorc))
- 두 객체를 비교자로 비교해서 int 값을 리턴함.
- T 는 비교할 객체 타입
동등비교 (equals()와 deepEquals())
- equals() 는 두객체의 동등을 비교함. (비교하는 두 객체가 모두 null 이면 true 를 리턴)
- deppEquals() 는 두 객체의 동등을 비교하는데, 서로 다른 배열일 경우 항목 값이 모두 같다면 true 를 리턴함.
널 여부 조사(isNull(), nonNull(), requireNonNull())
- isNull() 은 매개값이 null 일 경우 true 리턴
- nonNull() 은 매개값이 not null 일 경우 true 리턴
- requireNonNull()은 3가지로 오버로딩 되어있음.
리턴타입 | 메소드(매개변수) | 설명 |
---|---|---|
T | requireNonNull(T obj) | not null -> obj , null -> NullPointerException |
T | requireNonNull(T obj, String message) | not null -> obj , null -> NullPointerException(message) |
T | requireNonNull(T obj, Supplier |
not null -> obj , null -> NullPointerException(msgSupplier.get()) |
System 클래스
- System 클래스의 모든 필드와 메소드는 정적(static) 필드,메소드로 구성되어있음.
프로그램 종료(exit())
- 현재 실행하고 있는 프로세스를 강제 종료시키는 역할
쓰레기 수집기 실행(gc())
- JVM 은 메모리가 부족할 때와 CPU 가 한가할때 쓰레기수집기(Garbage Collector)를 실행시켜 사용하지 않는 객체를 자동 제거 (힙(heap) 영역에 쓰이지않는 객체 삭제)
시스템 프로퍼티 읽기(getProperty())
- 시스템 프로퍼티(System Property)는 JVM 이 시작할 때 자동 설정되는 시스템의 속성값
환경변수 읽기(getenv())
- 환경 변수의 값이 필요할 경우 사용하는 메소드
Class 클래스
Class 객체 얻기
- 프로그램에서 Class 객체를 얻기 위해서는 Object 클래스가 가지고있는 getClass() 메소드를 이용
- getClass() 메소드는 해당 클래스로 객체를 생성했을 때만 사용 가능
- 객체를 생성하기전 Class 객체를 얻기 위해서는 forName() 메소드 사용 (해당 메소드는 예외 처리가 필요함)
리플렉션
- Class 객체를 이용해 클래스의 생성자, 필드, 메소드 정보를 알아내는것을 리플렉션 이라고함.
Constructor[] constructor = class.getDeclaredConstructors(); Field[] fields = class.getDeclaredFields(); Method[] methods = class.getDeclareMethods();
- 클래스에 선언된 멤버만 가져오고 상속된 멤버는 가져오지 않음.
동적 객체 생성(newInstance())
- Class 객체를 이용 시 new 연산자를 사용하지 않아도 동적으로 객체를 생성할 수 있음.
- 이방법은 코드 작성 시 클래스 이름을 결정할 수없고, 런타임 시에 클래스 이름이 결정되는 경우 사용
try{
Class class = Class.forName("런타임 시 결정되는 클래스 이름");
Object obj = class.newInstance();
}catch(Exception e) {
}
- 이 메소드는 기본 생성자를 호출해서 객체를 생성하기 때문에 반드시 클래스에 기본생성자가 존재해야 함.
- 리턴타입은 Ojbect 이므로 이것을 원래 클래스 타입으로 변환해야 사용이 가능하지만, 클래스 타입을 모르는 상태이므로 변환이 불가능함.
- 인터페이스 타입으로 변환 후 인터페이스에 선언되어있는 메소드를 호출하면 개별 클래스의 실체 메소드인 메소드가 실행됨.
- 리턴타입은 Ojbect 이므로 이것을 원래 클래스 타입으로 변환해야 사용이 가능하지만, 클래스 타입을 모르는 상태이므로 변환이 불가능함.
String 클래스
String 메소드
리턴타입 | 메소드명(매개변수) | 설명 |
---|---|---|
int | indexOf(String str) | 문자열 내에서 주어진 문자열의 위치를 리턴 (해당하는 값이 없으면 -1 리턴) |
String | replace(CharSequence target, CharSequence Replacement) | target 부분을 Replacement로 대치한 새로운 문자열을 리턴 |
String | substring(int beginIndex) | beginIndex 위치에서 끝까지 잘라낸 새로운 문자열을 리턴 |
String | subStinrg(int beginIndex, int endIndex) | beginIndex 위치에서 endIndex 전까지 잘라낸 새로운 문자열을 리턴 |
String | toLowerCase() | 알파벳 소문자로 변환한 새로운 문자열을 리턴 |
String | toUpperCase() | 알파벳 대문자로 변환한 새로운 문자열을 리턴 |
String | trim() | 앞뒤 공백을 제거한 새로운 문자열을 리턴 |
String | valueOf(int i), value(double d) | 기본 타입값을 문자열로 리턴 |
StringBuffer, StringBuilder 클래스
- 문자열을 결합하는 + 연산자를 많이 사용하면 할수록 그만큼 String 객체의 수가 늘어나기 때문에, 프로그램의 성능을 느리게 하는 요인이 됨.
- 문자열을 변경하는 작업이 많을 경우에는 StringBuffer 또는 StringBuilder 클래스를 사용
- 두 클래스는 내부 버퍼(buffer: 데이터를 임시로 저장하는 메모리)에 문자열을 저장해두고 그안에서 추가,수정,삭제 작업을 할수있도록 설계되어있음.
- StringBuffer 은 멀티스레드 환경에서 사용할 수 있도록 동기화가 적용되어 있어 스레드에 안전
- StringBuilder는 단일 스레드 환경에서만 사용하도록 설계되어 있음.
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder(int capacity); // 주어진 개수만큼 문자 저장할수있는 초기 버퍼를 만듬 StringBuilder sb = new StringBuilder(String str); // str로 주어진 매개값을 버퍼의 초기값으로 저장
- 두 클래스는 내부 버퍼(buffer: 데이터를 임시로 저장하는 메모리)에 문자열을 저장해두고 그안에서 추가,수정,삭제 작업을 할수있도록 설계되어있음.
정규표현식과 pattern 클래스
- 문자열이 정해져 있는 형식(정규 표현식 : Regular Expression)으로 구성되어 있는지 검증해야 하는경우 정규 표현식과 비교함.
정규 표현식 작성 방법
- 정규표현식은 문자 또는 숫자 기호와 반복 기호가 결합된 문자열임.
기호 | 설명 |
---|---|
[] | 한개의 문자 (예시 : [abc] : abc 중 하나의 문자 // [^abc] : abc 이외의 하나의 문자 // [a-zA-Z] : a~z,A~Z 중 하나의 문자 |
\d | 한개의 숫자,[0-9]와 동일 |
\s | 공백 |
\w | 한개의 알파벳 또는 한개의 숫자, [a-zA-Z_0-9]와 동일 |
? | 없음 또는 한개 |
* | 없음 또는 한개 이상 |
+ | 한개 이상 |
{n} | 정확히 n개 |
{n,} | 최소한 n개 |
{n,m} | n개에서부터 m개까지 |
() | 그룹핑 |
. | 문자로서의 점(.) |
. | 모든 문자중에서 한개의 문자 |
- 전화번호 정규식
(02|010)-\d{3,4}-\d{4}
//(02|010) : 02 또는 010
//- : - 포함
//\d{3,4} : 3자리 또는 4자리 숫자
//- : 포함
//\d{4} : 4자리 숫자
Pattern 클래스
- 문자열을 정규 표현식으로 검증하는 기능은 Pattern 클래스의 정적 메소드인 matches() 메소드가 제공
boolean result = Pattern.matches("정규식", "검증할 문자열");
Arrays 클래스
- 배열 조작 기능(배열 조작이란 배열의 복사 항목 정렬, 항목 검색과 같은 기능)
리턴 타입 | 메소드 이름 | 설명 |
---|---|---|
int | binarySearch(배열, 찾는값) | 전체 배열 항목에서 찾는 값이 있는 인덱스 리턴 |
타겟 배열 | copyOf(원본배열, 복사할 길이) | 원본배열의 0번 인덱스에서 복사할 길이만큼 복사한 배열 리턴, 복사할 길이는 원본 배열의 길이보다 커도 되며, 타겟 배열의 길이가됨 |
타겟 배열 | copyOfRange(원본배열, 시작인덱스, 끝인덱스) | 원본 배열의 시작 인덱스에서 끝 인덱스까지 복사한 배열 리턴 |
boolean | deepEquals(배열,배열) | 두 배열의 깊은 비교(중첩 배열의 항목까지 비교) |
boolean | equals(배열,배열) | 두 배열의 얕은 비교(중첩 배열의 항목은 비교하지 않음) |
void | fill(배열, 값) | 전체 배열 항목에 동일한 값을 저장 |
void | fill(배열, 시작인덱스, 끝인덱스, 값) | 시작 인덱스부터 끝 인덱스까지의 항목에만 동일한 값을 저장 |
void | sort(배열) | 배열의 전체 항목을 오름차순으로 정렬 |
String | toString(배열) | “[값1,값2,…]” 와 같은 문자열 리턴 |
Wrapper(포장) 클래스
- 자바는 기본 타입의 값을 갖는 객체를 생성할 수 있는데 이런 객체를 포장 객체라고 함.
- 포장객체의 특징은 기본 타입값은 외부에서 변경 불가. 내부의 값을 변경하고싶다면 새로운 포장 객체를 만들어야 함.
박싱(Boxing)과 언박싱(Unboxing)
- 기본타입의 값을 포장 객체로 만드는 과정을 박싱(Boxing) 이라고 하고, 포장 객체에서 기본 타입의 값을 얻어 내는 과정을(UnBoxing) 이라 함.
자동 박싱과 언박싱
- 자동 박싱은 포장 클래스 타입에 기본값이 대입될 경우 발생
Integer obj = 100; //자동박싱
- 자동 언박싱은 기본 타입에 포장 객체가 대입될 경우에 발생함.
Integer obj = new Integer(200); int value1 = obj; //자동 언박싱 int value2 = bj + 100; // 자동 언박싱 (Integer 객체로부터 int 타입의 값이 자동 언박싱되어 연산)
날짜 형식 클래스(SimpleDateFormat)
- 특정 문자열 포맷으로 날짜 출력해주는 클래스
문자열 형식 클래스(messageFormat)
- 클래스 사용 시 문자열에 데이터가 들어갈 자리를 표시해 두고, 프로그램이 실행하면서 동적으로 데이터를 삽입해 문자열을 완성 시킬수 있음.
String message = "회원 ID: {0} \n회원 이름 : {1} \n 회원 전화: {2}";
Object[] arg = {id, name, tel};
String result = MessageFormat.format(text, arg); // 배열사용 시
String result = MessageFormat.format(message, id, name, tel); // 배열 미사용
java_time 패키지
- 자바 7 이전까지는 날짜와 시간 정보를 얻기 위해 Date 와 Calendar 클래스를 이용
- 자바 8부터는 날짜와 시간을 나타내는 여러가지 API 를 새롭게 추가함.