들어가기에 앞서
참고한 자료를 바탕으로 비전문가가 정리한 글이므로 오류가 있을 수 있습니다.
오류에 대한 지적 사항은 언제든지 환영합니다. 부디 댓글로 알려주시길 바랍니다. 감사합니다.
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()