자바 주요 API 정리
회사 교육 시 공유할 용도로 주요 API의 핵심 내용만 정리합니다.
어떠한 클래스가 왜 중요한 건지,
어떠한 클래스에 공통적으로 들어 있는 메서드는 무엇인지
개괄해 가는 시간이 되기를 바랄게요.
java.lang
- import문 없이도 사용 가능
Object
모든 클래스의 최고조넘,
Object가 존재하는 곳사용할 때 반드시 오버라이딩
중요한 메서드:
equals(Object obj)/hashCode()왜? 같은 객체를 식별하는 데 있어서 구분자가 되는 것이라서.
toString()클래스이름@해시코드값을 반환한다.
equals(Object obj)- Call by reference를 Call by Value로 바꿔서 “논리적으로 같다”를 표현한다? 꼭 오버라이딩.
hashCode():equals()를 재정의했나요? 얘도 같이 해야 합니다.- → “논리적으로” 같은 객체로 식별하게 해 줘야 하니까.
equals()비교 값 반환 추천.
- → “논리적으로” 같은 객체로 식별하게 해 줘야 하니까.
이걸 미리 해놓은 놈이 누구냐?
String/Integer클래스. 궁금하면 까 보세요!
Wrapper Class
참조 자료형: 박싱 / 언박싱- Number 상속 시리즈
- Byte, Double, Float, Integer, Long, Short
- AtomicInteger, AtomicLong: 멀티스레드 환경에서 동시성을 보장
- BigDecimal, BigInteger: 문자열 형태로 숫자를 처리
- Boolean / Character
- Number 상속 시리즈
반드시 byte, double, float, int, long 및 short로 변환할 수 있어야 함
→
변수.문자형Value()하면 다 나온다는 말이겠죠? (ex.변수.byteValue())
System
System 클래스: 운영체제, 시스템에 대한 정보를 확인하는 클래스- Logger 쓰라고 이야기해도 그냥 자주 쓰는
print즈! →print/println/printf(쓰지마세요) - 환경 변수:
System.getenv("JAVA_HOME") - 시스템 속성, Property:
System.getProperties() - 현재 시각 :
System.currentTimeMillis()/System.nanoTime()
- Logger 쓰라고 이야기해도 그냥 자주 쓰는
쓰지 마세요
- C와 다르게 작동합니다. JVM에게 요청을 보낼 뿐입니다.
- GC 수행 메서드:
System.gc() - JVM 종료 메서드:
System.exit()
String
indexOf(char ch): 지정한 문자의 위치 확인substring(int beginIndex, int endIndex): 지정한 범위의 문자열 반환split(String regex): 지정한 문자로 문자열을 배열 반환getBytes(): 문자열의 바이트 배열 반환isEmpty(): 문자열이 비어있는지 확인startsWith(String prefix)/endsWith(String suffix)- 문자열이 주어진 접두사(prefix)로 시작하는지 접미사(suffix)로 끝나는지 확인
replace(char oldChar, char newChar)replace(CharSequence target, CharSequence replacement)- 문자열 내의 특정 문자를 다른 문자로, 문자열을 다른 문자열로 교체
contains(CharSequence s): 문자열이 특정 문자열을 포함하고 있는지 확인split(String regex): 주어진 정규 표현식을 기준으로 문자열을 분할 후 배열을 반환↔
join(CharSequence delimiter, CharSequence... elements)- 주어진 구분자로 문자열 배열 연결
format(String format, Object... args): 지정된 형식에 맞춰 문자열 생성valueOf(): 다른 데이터 타입의 값을 String으로 변환불변 객체: String
+=를 통한 문자열 추가 (사실 추가가 아니라, 신규 생성 후 재할당임)
가변 객체: StringBuilder , StringBuffer (thread safe)
append()/insert()를 통한 문자열 추가toString()을 통해 가변 객체를 끝내 주어야 함- thread safe, 동기화 보장
- → 당연히 느리겠죠? 단일 스레드 환경에서는 StringBuilder 쓰세요.
I/O
File 클래스
exists(): 파일이나 디렉토리가 실제로 존재하는지 확인list(): 디렉토리 내의 파일 및 디렉토리 목록을 문자열 배열로 반환mkdir(): 디렉토리 하나 생성mkdirs(): 여러 개의 하위 디렉토리 생성isDirectory()/isFile()/isHidden(): File 객체가 경로 / 파일 / 숨겨진 파일인지 확인canRead()/canWrite()/canExecute(): 현재 수행하고 있는 자바 프로그램이 해당 File 객체에 읽거나, 쓰거나, 실행할 수 있는 권한이 있는지 확인lastModified(): 파일이나 경로가 언제 생성되었는지를 확인, long 타입의 시간을 리턴delete(): 파일 삭제, 성공적으로 삭제시 true 반환length(): 파일의 길이(byte) 반환
InputStream과 OutputStream / Reader와 Writer
InputStream과 OutputStream
- 바이트 단위의 문자열 처리를 위한 클래스 / 바이너리 데이터(이미지, 동영상, 사운드 파일 등)
Reader와 Writer
- 텍스트 단위의 문자열 처리를 위한 클래스 / 텍스트 데이터(문자열, 문서 파일 등)
간단하게 생각하면,
- 바이트 단위 처리 작업은
InputStream/ 쓰는 작업은OutputStream char기반 문자열 처리 작업은Reader,Writer클래스
- 바이트 단위 처리 작업은
공통 - 읽을 때
read(): 스트림에서 바이트/문자를 하나 읽고 읽은 바이트/유니코드 값을 반환read(char[] cbuf): 바이트/문자 배열의 데이터를 읽어옴. 읽은 문자 수 반환skip(long n): 입력 스트림에서n바이트/문자를 건너뜀. 실제로 건너뛴 문자 수 반환close(): 스트림을 닫고 사용 중인 자원 해제
공통 - 쓸 때
write(int b): 지정된 바이트/문자를 출력 스트림에 씀write(byte[] b): 바이트/문자 배열의 모든 바이트/문자 출력 스트림에 씀write(byte[] b, int off, int len)- 바이트/문자 배열의 지정된 오프셋에서 시작하여 지정된 길이만큼 출력 스트림에 씀
flush(): 출력 스트림의 모든 버퍼를 강제로 출력close(): 출력 스트림을 닫고 이와 관련된 모든 시스템 리소스를 해제
InputStream 클래스 메소드
mark(int readlimit): 스트림의 현위치를 표시(mark)- 매개변수로 넘기는 것: 자리의 최대 유효 길이
- 해당 값을 넘어가면 표시해둔 자리는 의미가 없어짐
reset(): 현재 위치를 mark()- 메소드가 호출되었던 위치로 되돌림
markSupported(): mark()나 reset() 메소드 수행 가능 여부 확인
Reader 클래스 메서드
read(char[] cbuf, int off, int len)off위치부터 시작하여len만큼의 문자를 읽어서cbuf배열에 저장
Writer 클래스 메서드
write(String str): 주어진 문자열str의 모든 문자를 출력 스트림에 씀write(String str, int off, int len): 문자열str의off위치부터 시작하여len만큼의 문자를 출력 스트림에 씀
java.util - Collection
- 기본 메서드
int size(): 컬렉션에 있는 요소의 수를 반환boolean isEmpty(): 컬렉션이 비어 있는지 여부를 반환
- 추가/제거 메서드
boolean add(E element): 컬렉션에 요소를 추가boolean remove(Object o): 컬렉션에서 첫 번째로 나타나는 지정된 요소를 제거boolean addAll(Collection<? extends E> c): 다른 컬렉션의 모든 요소를 현재 컬렉션에 추가boolean removeAll(Collection<?> c): 현재 컬렉션에서 다른 컬렉션에 포함된 모든 요소를 제거boolean retainAll(Collection<?> c): 현재 컬렉션에서 다른 컬렉션에 포함된 요소만 남기고 나머지 요소를 제거void clear(): 컬렉션의 모든 요소를 제거
- 검색 및 확인 메서드
boolean contains(Object o): 컬렉션에 지정된 요소가 있는지 확인boolean containsAll(Collection<?> c): 컬렉션에 지정된 컬렉션의 모든 요소가 있는지 확인Iterator<E> iterator(): 컬렉션의 요소를 반복하는 데 사용할Iterator를 반환
- 변환 및 배열 관련 메서드
Object[] toArray(): 컬렉션의 모든 요소를 포함하는 배열을 반환<T> T[] toArray(T[] a): 컬렉션의 모든 요소를 지정된 배열에 복사하고 해당 배열을 반환
Set
- HashSet ← LinkedHashSet / TreeSet
List
- ArrayList /
Linked List/ Vector / (Stack)
- 요소 찾기
E get(int index): 리스트의 지정된 위치에 있는 요소 반환int indexOf(Object o): 지정된 요소의 첫 번째 발생 위치를 반환
- 요소 추가 / 변경 / 삭제
void add(int index, E element): 지정된 위치에 요소를 삽입E remove(int index): 지정된 위치의 요소를 제거하고 반환E set(int index, E element): 리스트의 지정된 위치에 새 요소를 설정하고 이전 요소 반환int lastIndexOf(Object o): 지정된 요소의 마지막 발생 위치를 반환
- 리스트 복사 및 변환
List<E> subList(int fromIndex, int toIndex): 지정된 범위의 요소를 포함하는 새로운 리스트 반환
Queue
Linked List/ Priority Queue
- 요소 추가 및 제거
- 푸시 / 팝
void push(E e): 큐의 끝 요소를 추가E pop(): 큐의 끝 요소를 제거
java.util - Map
- HashTable / HashMap ← LinkedHashMap / TreeMap
- 기본 메서드
boolean containsKey(Object key): 주어진 키가 맵에 포함되어 있는지 여부를 반환boolean containsValue(Object value): 주어진 값이 맵에 포함되어 있는지 여부를 반환V get(Object key): 지정된 키에 연결된 값을 반환, 키가 없으면null
- 수정 메서드
V put(K key, V value): 지정된 키와 값을 맵에 추가하고, 이전 값 (또는 null)을 반환V remove(Object key): 지정된 키와 연결된 값을 제거하고, 제거된 값을 반환void putAll(Map<? extends K, ? extends V> m): 다른 맵의 모든 키-값 쌍을 현재 맵에 추가void clear(): 맵에서 모든 키-값 쌍을 제거
- 키/값 관련 메서드
Set<K> keySet(): 맵의 모든 키를 포함하는 Set을 반환Collection<V> values(): 맵의 모든 값을 포함하는 Collection을 반환Set<Map.Entry<K, V>> entrySet(): 맵의 모든 키-값 쌍을 포함하는 Set을 반환
Array
Arrays.asList(arr)- 배열을 리스트로 변환
Arrays.stream(arr).collect(Collectors.toList());- 배열을 Stream으로 변환
Stream (java 1.8~)
- 생성
Stream.of(elements): 주어진 요소들로 스트림 생성Collection.stream(): 컬렉션에서 스트림 생성map(Function<T, R> mapper): 각 요소에 대해 주어진 함수를 적용하여 새로운 요소 생성
- 필터링
filter(Predicate<T> predicate): 주어진 조건에 맞는 요소만 필터링distinct(): 중복 제거limit(long maxSize): 최대 요소 수 제한- 기존에 스트림이 limit 사이즈를 넘을 경우, 첫 번째 요소부터 해당 요소 개수까지 반환
- 집계
count(): 요소의 수 반환sum(): 합계 반환average(): 평균 반환min(Comparator<T> comparator): 최소값 반환max(Comparator<T> comparator): 최대값 반환
- 기타 연산
sorted(): 요소를 정렬forEach(Consumer<T> action): 각 요소에 대해 주어진 작업 수행reduce(BinaryOperator<T> accumulator): 모든 요소를 하나의 결과로 축소collect(Collector<T, A, R> collector): 스트림의 요소를 수집하여 결과 생성
Optional (java 1.8~)
- 반환
empty(): 빈Optional객체를 반환get():Optional의 값을 반환
- 생성
of(T value): 주어진 값으로Optional객체를 생성ofNullable(T value): 주어진 값으로Optional객체를 생성
- 값 확인 (
isPresent())isPresent():Optional에 값이 있는지 확인ifPresent(Consumer<? super T> consumer):Optional에 값이 존재하면 주어진 작업을 수행
- 값 확인 (
orElse)orElse(T other)- 값이 존재하면 그 값을 반환 / 그렇지 않으면 주어진 기본값을 반환
orElseGet(Supplier<? extends T> supplier)- 값이 존재하면 그 값을 반환 / 그렇지 않으면 주어진 공급자(Supplier)의 결과를 반환
orElseThrow()- 값이 존재하면 그 값을 반환/ 아닐 시 예외를 발생
- 필터 / 재생성
filter(Predicate<? super T> predicate): 값이 주어진 조건을 만족하는지 확인map(Function<? super T, ? extends U> mapper)- 값이 존재하면 주어진 함수를 적용하여 새로운
Optional객체를 반환
- 값이 존재하면 주어진 함수를 적용하여 새로운
flatMap(Function<? super T, Optional<U>> mapper)- 값이 존재하면 주어진 함수를 적용하고, 결과로 나온
Optional을 평면화하여 반환
- 값이 존재하면 주어진 함수를 적용하고, 결과로 나온
날짜 관련 클래스 (java 1.8~): java.time
- 하나의 시간
- LocalDate (년/월/일)
of(int year, int month, int dayOfMonth): 지정된 날짜로LocalDate객체 생성
- LocalTime (시/분)
of(int hour, int minute): 지정된 시간으로LocalTime객체 생성
- LocalDateTime (년/월/일/시/분)
of(int year, int month, int dayOfMonth, int hour, int minute)- 지정된 날짜와 시간으로
LocalDateTime객체 생성
- 지정된 날짜와 시간으로
- ZonedDateTime (시간대+년/월/일/시/분)
ofInstant(Instant instant, ZoneId zone)Instant객체와 시간대 정보를 기반으로ZonedDateTime객체 생성
- 공통적으로 사용
parse(CharSequence text): 문자열을 토대로 해당 클래스 생성
- 기간
- Duration → 시/분 단위
- 생성:
Duration.ofHours(long hours),Duration.ofMinutes(long minutes) between(Temporal startInclusive, Temporal endExclusive)- 두 시점 사이의
Duration객체 반환
- 두 시점 사이의
- 생성:
- Period → 날짜 단위
- 생성:
Period.ofYears(int years),Period.ofMonths(int months) between(LocalDate startDateInclusive, LocalDate endDateExclusive)- 두 날짜 사이의
Period객체 반환
- 두 날짜 사이의
- 생성:
참고
- 자바의 신
- 자바의 정석
- 모던 자바 인 액션
- Testing Pool: COLLECTIONS FRAMEWORK IN JAVA