[CS-JAVA]문자열 클래스 & 오브젝트 클래스

지영·2023년 8월 2일
0

CS

목록 보기
53/77

📍 문자열 클래스

자바에서 문자열을 다루는 대표적인 클래스는 String, StringBuffer, StringBuilder가 있습니다.
클래스마다 특징이 다르므로, 연산횟수가 많아지거나, 멀티쓰레드 등의 환경에서는 적절한 클래스를 골라 사용하는 것이 중요합니다.

String vs (StringBuffer/StringBuilder)

차이점. Immutable vs mutable


  • String : immutable(불변), new연산을 통해 생성된 인스턴스의 메모리 공간은 변하지 않음. 따라서 문자열 수정 시 이전값은 Garbage Collector로 제거됨.
  • StringBuffer/StringBuilder : mutable(가변), new연산으로 클래스를 한 번만 만듦.

사용상황

  • String : 문자열 연산이 적고, 조회가 많은 멀티쓰레드환경에서 좋음 (조회에서 유리한 이유는, 객체가 불변하기 때문에 동기화에 신경쓸 필요가 없기 때문)
  • StringBuffer/StringBuilder : 문자열 연산이 잦을 때.

StringBuffer vs StringBuilder

차이점. 동기 vs 비동기

  • StringBuffer : 동기화 키워드를 지원하기 때문에 멀티쓰레드 환경에서 안전함(thread-safe)
  • StringBuilder : 동기화를 지원하지 않기 때문에 단일쓰레드 환경에서 유리
// StringBuffer 👉 synchronized 키워드가 있다.
@Override
public synchronized StringBuffer append(Object obj) {
    toStringCache = null;
    super.append(String.valueOf(obj));
    return this;
}

// StringBuilder 👉 synchronized 키워드가 없다.
@Override
public StringBuilder append(Object obj) {
    return append(String.valueOf(obj));
}

✔ 문자열 클래스 정리

분류StringStringBufferStringBuilder
변경유무문자열 연산이 적은 경우문자열 연산이 많은 경우문자열 연산이 많은 경우
쓰임상황멀티 쓰레드 환경인 경우(동기화OK) 멀티 쓰레드 환경인 경우단일 쓰레드 환경인 경우 or 동기화를 고려하지 않아도 되는 경우


📍 오브젝트 클래스

Object클래스는 자바에서의 최상위 클래스이다.

  • 자바의 클래스를 선언할 때 extends키워드로 다른 클래스를 상속하지 않으면 암시적으로 java.lang.Object클래스를 상속하게 된다.

  • 필드가 없고 메소드로 구성되어 있음. 해당 메소드들은 모든 클래스에서 이용할 수 있음.

🔎 java.lang 패키지
: 자바에서 가장 기본적인 동작을 수행하는 클래스들의 집합입니다.
따라서 자바에서는 java.lang 패키지의 클래스들은 import 문을 사용하지 않아도 클래스 이름만으로 바로 사용할 수 있도록 하고 있습니다.

🔎 java.lang.Object 클래스
java.lang 패키지 중에서도 가장 많이 사용되는 클래스는 바로 Object 클래스입니다. Object 클래스는 모든 자바 클래스의 최고 조상 클래스가 됩니다.
따라서 자바의 모든 클래스는 Object 클래스의 모든 메소드를 바로 사용할 수 있습니다.이러한 Object 클래스는 필드를 가지지 않으며, 총 11개의 메소드만으로 구성되어 있습니다.

오브젝트 클래스가 갖고 있는 클래스

  • equals() : 비교 연산자 ==과 동일한 결과가 리턴
  • toString()
  • hashCode() : 객체를 식별할 하나의 정수값
  • wait() : 갖고 있던 고유 Lock 해제, Thread를 잠들게 함
  • notify() : 잠들던 Thread 중 임의로 하나를 깨움
  • notifyAll() : 잠들어 있던 Thread를 모두 깨움
profile
꾸준함의 힘을 아는 개발자가 목표입니다 📍

1개의 댓글

comment-user-thumbnail
2023년 8월 2일

이런 유용한 정보를 나눠주셔서 감사합니다.

답글 달기