[Java] 자주 쓰는 API

배창민·2025년 9월 12일
post-thumbnail

자바 자주 쓰는 API


1) Object

개요

  • 모든 클래스의 최상위 부모.
  • 주요 메소드는 하위 클래스에서 오버라이딩해서 의미 있게 사용.

주요 메소드

메소드설명
boolean equals(Object obj)동등성 비교(필드 기준으로 재정의해서 사용)
int hashCode()객체의 해시 코드(컬렉션 키로 사용 시 equals와 함께 재정의)
String toString()객체 정보를 문자열로 반환(디버깅/로그용으로 재정의)

toString() 예시

@Override
public String toString() {
    return "Book[number=" + number + ", title=" + title + ", author=" + author + ", price=" + price + "]";
}

equals() 기본 가이드

  • 동일성(==) vs 동등성(equals) 구분.
  • 재정의 시 규약: 반사성/대칭성/추이성/일관성/null과 비교 시 false.
  • 구현 팁(간단형):
@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (!(o instanceof Book)) return false;
    Book b = (Book) o;
    return number == b.number &&
           price == b.price &&
           Objects.equals(title, b.title) &&
           Objects.equals(author, b.author);
}

hashCode() 규약

  • equals가 true면 hashCode도 동일해야 함.
@Override
public int hashCode() {
    return Objects.hash(number, title, author, price);
}

2) String

개요

  • 불변(immutable) 객체. +/concat()새 인스턴스 생성.
  • 문자열 비교는 equals() 사용(리터럴 풀, new String() 차이 주의).

자주 쓰는 메소드 모음

메소드한 줄 요약
charAt(i)i번째 문자
compareTo()/compareToIgnoreCase()사전식 비교(대/소문자 구분 옵션)
concat(s)이어붙인 새 문자열
indexOf()/lastIndexOf()앞/뒤에서 찾기(없으면 -1)
trim()앞뒤 공백 제거
toLowerCase()/toUpperCase()소/대문자 변환(원본 불변)
substring(b, e)[b, e) 범위 잘라내기
replace(a, b)문자열 치환(새 문자열)
length()/isEmpty()길이/빈문자열 판단
split(regex[, limit])정규표현식 분리(마지막 공백 토큰은 limit로 제어)

equals/리터럴 풀 포인트

String s1 = "java";           // 풀 재사용
String s2 = "java";           // s1과 같은 인스턴스
String s3 = new String("java"); // 새 인스턴스
// 비교는 항상
s1.equals(s3); // true

split vs StringTokenizer

  • split(regex): 정규표현식, 빈 토큰 유지 가능(limit = -1).
  • StringTokenizer: 구분자 문자 집합, 빈 토큰 무시, 빠름.

이스케이프 문자(자주 쓰는 것)

\n(개행) \t(탭) \' \" \\ 
정규식 특수문자 split 시: \$ \. \[ \] \* \+ \? \^ \{ \} \| (앞에 \\)

3) StringBuilder / StringBuffer

차이점 요약

StringStringBuilderStringBuffer
변경 가능OO
동기화O (synchronized)
쓰레드 안전O(불변)O
일반 성능보통빠름느림

멀티스레드 환경 아니면 보통 StringBuilder 권장.

자주 쓰는 메소드

  • append(x), insert(idx, x), delete(s, e), deleteCharAt(i), reverse(),
    capacity(), length(), toString()
  • 반복문에서 문자열 더하기StringBuilder로!

4) Wrapper

목적

  • 기본 타입 → 객체 타입 필요 시 사용(컬렉션/제네릭, API 인자 등).

매핑표

기본Wrapper
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean

박싱/언박싱

int n = 20;
Integer a = Integer.valueOf(n); // 박싱
int b = a.intValue();           // 언박싱
Integer c = n;                  // 오토 박싱
int d = c;                      // 오토 언박싱

비교 & 파싱

  • 비교는 equals()(생성 방식에 따라 ==는 주의).
  • 문자열 → 기본형: Integer.parseInt("10"), Double.parseDouble("3.14")
  • 기본형 → 문자열: String.valueOf(10) 또는 Integer.valueOf(10).toString()
  • Characterparse 없음 → "abc".charAt(0)

5) Time 패키지

과거 API 요약

  • Date(대부분 Deprecated), Calendar(가변/월 0~11/윤초 미고려 등 불편).

java.time(자바 8+) 장점

  • 불변(immutable), 쓰레드 안전, 명확한 타입과 풍부한 유틸.

  • 주요 클래스

    • LocalTime(시간), LocalDate(날짜), LocalDateTime(둘 다)
    • ZonedDateTime(시간대 포함), ZoneId, DateTimeFormatter

바로 쓰는 패턴

생성: now() / of()

LocalTime t = LocalTime.now();
LocalDate d = LocalDate.of(2022, 1, 1);
LocalDateTime dt = LocalDateTime.of(d, t);
ZonedDateTime zdt = ZonedDateTime.of(d, LocalTime.of(18,30), ZoneId.of("Asia/Seoul"));

조회: getXxx()

d.getYear(); d.getMonthValue(); d.getDayOfWeek();
t.getHour(); t.getMinute(); t.getSecond();
zdt.getOffset(); zdt.getZone();

변경: with/plus/minus (원본 불변)

dt.plusMinutes(30);
dt.minusYears(1);
dt.withDayOfYear(1);

비교: isAfter/isBefore/isEqual

LocalDate.now().isAfter(LocalDate.of(2020,11,11)); // true/false

파싱/포맷: parse/format

LocalDate.parse("2022-10-12");
LocalTime.parse("14-05-10", DateTimeFormatter.ofPattern("HH-mm-ss"));
LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));

Date/Calendar 변환(레거시 연동)

// Calendar -> Date
Date date = new Date(Calendar.getInstance().getTimeInMillis());

// Date -> Calendar
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());

핵심

  • Object: equalshashCode 함께 재정의, toString 로깅 친화적으로.
  • String: 불변 → equals 사용, 무거운 연결은 StringBuilder.
  • Builder/Buffer: 단일스레드=Builder, 멀티스레드=Buffer.
  • Wrapper: 파싱/오토박싱 주의, 비교는 equals.
  • Time: java.time 우선 사용(LocalDate/Time/DateTimeFormatter), 불변/명확.
profile
개발자 희망자

0개의 댓글