Search
Duplicate

String 클래스 파헤치기

Created time
2023/04/01 09:06
Last edited time
2023/07/11 01:21
Status
Done
tag

들어가기에 앞서

참고한 자료를 바탕으로 비전문가가 정리한 글이므로 오류가 있을 수 있습니다.
오류에 대한 지적 사항은 언제든지 환영합니다. 부디 댓글로 알려주시길 바랍니다. 감사합니다.

String 클래스란?

자바에서 가장 기본적인 클래스틀을 포함하는 패키지인 java.lang의 클래스.
문자열을 다루기 위한 기본 클래스 중 하나이다.

String 클래스의 특징

String 클래스는 불변(immutable) 객체로, 한 번 생성되면 그 값을 변경할 수 없다. 객체는 생성자를 통해 생성할 수 있으며, 큰따옴표(””)를 사용하여 문자열을 통해 생성하거나, valueOf()같은 정적메소드를 이용하여 생성할 수 있다.
String obj = "오늘은 4월3일"; String obj2 = new String("hiworld"); int a = 123; String obj3 = valueOf(a);
Java
복사

String 객체의 메모리 처리

String 객체의 heap 영역에서의 생성
불변 객체라는 특성 때문에 다른 객체들과는 조금 다른 메모리 처리 방법을 가진다. String 객체는 Heap 메모리 영역에 저장되며, 문자열의 내용은 char[]로 저장된다. 이 문자 배열은 String 객체의 내부 변수로서 유지된다.
문자열을 수정할 경우, 새로운 객체가 생성되고 기존의 문자열 객체는 Garbage Collector에 의해 메모리에서 제거된다.
자바에서 문자열 리터럴은 String Pool이라는 Heap 메모리 영역 내부에 저장된다. String Pool은 문자열 리터럴을 저장하고 있는 테이블로 구현된다. 이 테이블은 JVM에 의해 관리되며, 문자열 리터럴이 생성될 때마다 해당 문자열이 String Pool에 존재하는지 검사한다. 이미 존재하는 경우, 새로운 객체를 생성하지 않고 기존의 객체를 재활용하여 메모리를 절약한다.
앞서 String객체는 Garbage Collector에 의해 메모리에서 제거된다고 했다. 하지만, String Pool에 저장된 문자열 객체들은 Garbage Collector의 대상이 아니기 때문에, 메모리 누수가 발생할 수 있다. 또한 String Pool이 너무 커지면 메모리 부족 현상(out of memory error)이 발생할 수 있다.
String 클래스에서의 ==과 equals의 차이: ==는 주소값이 같은지 아닌지 비교하는 것(객체의 레퍼런스 비교)이고, equals()연산도 내부적으로 레퍼런스를 비교하지만 String클래스에서는 equals()를 재정의해 내용을 비교하게 되어있다.

자주 사용하는 메소드

str.substring(index)
valueOf()
compareTo()
indexOf()
split()

참고