Language/Java 2024. 11. 28. 02:02

자바 표준 라이브러리 (지속 업데이트)

@Beemo9
목차

자바에는 기본적으로 제공되는 표준 라이브러리들이 있다.

JDK 안에 포함되어 있음.

알고리즘 및 코딩테스트를 공부하면서 라이브러리에 취약한 것 같아 스니펫 느낌으로 작성.

표준 라이브러리 종류

  • Java.lang
    • 객체, 클래스, 시스템, 쓰레드, 예외 처리 등과 같은 핵심 기능 포함.
    • 자동으로 Import 됨.
  • Java.util
    • 컬렉션 프레임워크를 포함한 날짜와 시간 처리, 이벤트 모델, 난수 생성, 기본 유틸리티 클래스 등 다양한 유틸리티 클래스와 인터페이스를 제공.
  • Java.io
    • 입력과 출력(I/O) 기능을 담당하며, 파일 읽기와 쓰기, 데이터 스트림 처리 등을 위한 클래스와 인터페이스를 포함
  • Java.math
    • 고정밀도 연산을 지원하는 BigInteger, BigDecimal 등의 클래스를 포함

Java.lang 패키지

1. Object Class

Protected Object clone()

  • 객체 자신의 복사본을 생성 (깊은 복사)

boolean equals(Object obj)

  • 다른 객체가 해당 객체와 같은지 여부
public class Main {
    public static void main(String[] args) throws IOException {
        String a = null;
        String b = "Be-HinD";

        System.out.println(b.equals(a));
    }
}

위처럼 null 객체에 대해 equals 비교를 하게 될 경우 NPE 에러가 발생하게 됨.

이를 방지하기 위해 java.util.Objects 패키지의 Objects.equals(obj1, obj2)를 사용.

import java.util.Objects;

public class Main {
    public static void main(String[] args) {
        String a = null;
        String b = "Be-HinD";
        
        System.out.println(Objects.equals(a, b));
    }
}

null 객체에서 equals() 메서드를 호출하게 될 경우 NPE가 발생하기에 아래처럼 문자열.equals(객체) 형태로 호출하는 습관을 들이면 좋음

import java.util.Objects;

public class Main {
    public static void main(String[] args) {
        String a = null;
        //String b = "Be-HinD";
        
        System.out.println("Be-HinD".equals(a));
    }
}

 

Class<?> getClass()

  • 해당 객체의 런타임 클래스를 반환

int hashCode()

  • 해당 객체의 hashCode값을 반환

hashCode?

객체의 주소값을 변환하여 생성한 객체의 고유한 정수값

따라서 두 객체가 동일 객체인지 비교할 때 사용할 수 있음.

 

String클래스의 경우 독특하게 재정의가 되어있음.

문자열의 각 문자를 기준으로 해시값을 생성하기 때문에 같은 문자열일 경우 다른 객체라도 항상 동일한 해시값을 반환.

또한 객체의 값이 변경되지 않는다면 해시값도 변하지 않음. (불변성)


void notify()

  • 대기중인 단일 쓰레드를 실행할 때 사용

void notifyall()

  • 대기중인 모든 쓰레드를 실행할 때 사용

String toString()

  • 객체의 문자열 표현을 반환 (문자열을 제외한 객체에 대해서는 재정의 필요)

 

2. String Class

char charAt(int index)

  • index에 해당하는 자리의 문자열을 반환 

int compareTo(String anotherString)

  • 두 문자열을 사전식으로 비교 (밑에서 추가 설명)

int compareToIgnoreCase(String anotherString)

  • 대소문자를 무시하고 문자열 비교

String concat(String str)

  • 문자열의 끝에 매개변수의 문자열을 연결

int indexOf(int ch)

int indexOf(String str)

  • 지정된 문자나 문자열이 처음으로 나타나는 문자열 내의 첫번째 인덱스를 반환

int indexOf(int ch, int fromIndex)

int indexOf(String str, int fromIndex)

  • 지정된 문자나 문자열이 전달된 인덱스 이후에 처음으로 등장하는 첫번째 인덱스를 반환
  • 지정된 인덱스 포함

int lastIndexOf(int ch)
int lastIndexOf(String str)

  • 지정된 문자나 문자열이 마지막으로 나타나는 인덱스를 반환

int lastIndexOf(int ch, fromIndex)
int lastIndexOf(String str, fromIndex)

  • 지정된 문자나 문자열이 전달된 인덱스 이전에 마지막으로 등장하는 첫번째 인덱스를 반환
  • 지정된 인덱스 포함

boolean contains(CharSequence s)

  • 매개변수 문자열이 해당 문자열에 포함되어 있다면 true, 없다면 false
  • 내부적으로 indexOf() 메서드를 활용
  • CharSequence는 인터페이스로, 일반적으로 String, StringBuilder, StringBuffer 등의 객체를 넘길 수 있음

boolean equals(Object anObject)

  • 해당 문자열을 지정된 객체와 비교

int length()

  • 해당 문자열의 길이를 반환

String replace(char oldChar, char newChar)

  • 해당 문자열에서 oldChar에 해당하는 문자를 모두 newChar에 해당하는 문자로 치환 후 반환

String[] split(String regex)

  • 주어진 정규 표현식과 일치하는 부분을 중심으로 문자열을 분할

boolean startWith(String prefix)

  • 해당 문자열이 지정된 접두사로 시작하는지 여부

boolean endsWith(String suffix)

  • 해당 문자열이 지정된 접미사로 끝나는지 여부

String substring(int beginIndex, int endIndex)

  • 해당 문자열에서 지정 시작 인덱스 ~ 지정 끝 인덱스 까지의 부분 문자열을 반환
  • endIndex가 없을 경우 끝까지

char[] toCharArray()

  • 해당 문자열을 새로운 문자 배열로 반환

String toLowerCase()
String toUpperCase()

  • 해당 문자열을 모두 소문자로/대문자로 변환

 

Str.compareTo(String anotherStr)

  • 두 문자열을 사전식으로 비교한 값을 반환
  • 사전순 비교는 유니코드값을 기준
    • A = 65, B = 66, a = 97, b = 98 ...

구체적인 정렬과정

  1. 첫 번째 문자부터 순차적으로 비교
  2. 만약 모든 문자가 같다면, 문자열의 길이로 비교 (짧은 문자열이 앞으로)

 

반환값

반환값은 기본적으로 두 문자의 유니코드 차이값

  • 음수
    • 현재 문자열이 비교 문자열보다 사전순으로 앞에 있을 때
  • 0
    • 현재 문자열과 비교 문자열이 동등할 때
  • 양수
    • 현재 문자열이 비교 문자열보다 사전순으로 뒤에 있을 때

 

 

Beemo9
@Beemo9
개발 기술 블로그, Dev 포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!
image