[JAVA] 11-2. 기본 클래스_String 클래스
1. String을 선언하는 2가지 방법
자바는 문자열을 사용하도록 String 클래스를 제공하는데 String을 사용하는 2가지 방식이 있다.
1. 문자열을 생성자의 매개 변수로 하여 생성하는 방식
new 예약어를 사용해 객체를 생성하는 방식은 문자열을 위한 힙 메모리가 할당되고 새로운 객체가 생성된다.
String str1 = new String("abc");
2. 이미 생성된 문자열 상수를 가리키는 방식
String 변수가 기존에 만들어져있던 문자열 상수의 메모리 주소를 가리킨다.
프로그램에서 사용되는 상수 값을 저장하는 공간을 상수 풀이라고 한다.
String str2 = "test";
String str3 = "test";
2. String 클래스의 final char[] 변수
자바는 String 클래스를 제공해 char[] 배열을 직접 구현하지 않고 편리하게 문자열을 사용할 수 있다.
new 예약어를 사용해 생성한 문자열은 String 클래스의 value 변수에 저장되는데 value가 final이기 때문에 변경할 수 없다. 즉, 한 번 생성된 문자열은 변경되지 않는다.
만약 concat() 메서드로 두 개의 문자열을 연결하면 둘 중 하나의 문자열이 변경되는 것이 아니라 두 문자열이 연결된 새로운 문자열이 생성되는 방식이다.
3. StringBuffer와 StringBuilder 클래스 활용하기
String 클래스는 한 번 생성되면 그 내부 문자열이 변경되지 않기 때문에 String 클래스를 사용하여 문자열을 계속 연결/변경하는 프로그램을 작성하면 메모리가 낭비되는 문제가 생긴다. 이 문제를 해결한 StringBuffer 와 StringBuilder 클래스는 내부에 변경 가능한 char[] 변수를 가지고 있다.
따라서, 문자열을 연결/변경할 경우 두 클래스 중 하나를 사용하면 된다.
두 클래스의 차이는 스레드가 동시에 문자열을 변경하려할 때 문자열이 안전하게 변경되도록 보장해주는지 여부이다.
1) StringBuffer 클래스는 문자열이 안전하게 변경되도록 보장한다.
2) StringBuilder 클래스는 문자열이 안전하게 변경되도록 보장하지 않는다. 멀티스레드 프로그램이 아니라면 StringBuilder 를 사용하는 것이 실행 속도가 더 빠르다.