Languages/Java

[Java] 문자열 클래스 & 오브젝트 클래스

dbssk 2023. 8. 10. 00:32

문자열 클래스

Java에서 문자열을 다루는 데에 사용되는 주요 클래스는 String, StringBuffer, StringBuilder가 있다. 모두 문자열을 표현하고 조작하는 목적으로 사용되지만, 내부적인 동작 방식과 특성이 다르다.

String 클래스

  • String 클래스는 불변(Immutable)한 문자열을 표현하는 데 사용
  • 즉, 한 번 생성된 문자열은 수정할 수 없으며, 문자열 연산 등의 작업을 수행할 때마다 새로운 문자열 객체가 생성
  • 문자열 연산시 새로 객체를 만드는 오버헤드 발생
  • 멀티스레드 에서 동기화를 신경 쓸 필요 X

문자열 연산이 적고, 조회가 많은 멀티스레드 환경에서 좋다.

StringBuffer/StringBuilder 클래스

  • 공통점
    • new 연산을 통해 클래스를 한 번만 만든다. (Mutable)
    • 문자열 연산시 새로 객체를 만들지 않고 크기를 변경시킨다.
  • 차이점
    • StringBuffer : 동기화를 지원하기 때문에 멀티스레드 환경에서 안전 (Thread-Safe)
    • StringBuilder : 동기화를 지원하지 않기 때문에 단일스레드 환경에서 유리 (Thread-Safe X)

StringBuffer 클래스는 문자열 연산이 많은 멀티스레드 환경에서 사용

StringBuilder 클래스는 문자열 연산이 많인 단일스레드 또는 스레드 신경 안쓰는 환경에서 사용

 

오브젝트 클래스

  • Object 클래스는 Java의 모든 클래스의 최상위 부모 클래스
  • 모튼 클래스는 암시적으로 Object 클래스를 상속받는다. 따라서 Object 클래스의 메서드와 기능은 Java 클래스의 모든 객체에서 사용할 수 있다.
  • 필드가 없고 메서드로 구성되어 있으며 해당 메서드들은 모든 클래스에서 이용할 수 있다.

Object 클래스에서 주로 사용되는 메서드

  • equals() : 객체의 동등성을 비교하는 메서드로 '==' 연산자와 동일한 동작을 수행
  • hashCode() : 객체의 해시 코드 값을 반환
  • toString() : 객체를 문자열로 표현하여 반환
  • wait() : 갖고 있던 고유 Lock 해제, Thread를 잠들게 함
  • notify() : 잠들던 Thread 중 임의의 하나를 깨움
  • notifyAll() : 잠들어 있넌 Thread 를 모두 깨움