String 클래스는 변하지 않는 클래스
String 클래스는 new를 사용하지 않고도 인스턴스화가 가능하다.
때문에 일반적으로 String 객체를 생성하기 위해서는 다음과 같이 작성한다.
String text = "String 클래스입니다."; |
물론 다른 클래스처럼 new 연산자도 가능하지만 의미도 없고 이중으로 인스턴스를 만들기 때문에 낭비.
String text = new String("String 클래스입니다."); |
한 가지 주의할 점은 String 클래스는 인스턴스의 데이터가 변하지 않는 불변(immutable) 클래스라는 점.
String 형 데이터의 값을 변경하면 인스턴스의 문자열 데이터가 변하는 것이 아니라 인스턴스를 새로 생성한다.
StringBuilder 클래스의 사용
때문에 문자열을 연결할 때는 StringBuilder 클래스를 사용하는 것이다.
String text1 = "나는";
String text2 = "7수다.";
text1 = text1 + text2; |
위 코드를 실행했을 때 프로그램 내부에서는 text1과 text2 그리고 결합 후의 text1이라는 3개의 String 인스턴스가 생성된다.
원래의 text1 인스턴스는 보이지 않는 상태이지만 여전히 메모리상에 존재한다. 루프 안에서 문자열을 연결하는 경우라면 반복되는 동안 계속 인스턴스를 생성하게 된다. (물론 가비지 컬렉션이 자동으로 메모리를 관리해주겠지만 낭비되는 메모리가 없도록 프로그램을 작성하자.)
다음과 같이 StringBuilder 클래스의 append 메서드로 문자열을 연결하면 인스턴스가 계속 생성되지 않는다.
String text1 = "나는"; String text2 = "7ㅏ수다."; StringBuilder sb = new StringBuilder(); sb.append(text1); sb.append(" "); sb.append(text2); String result = sb.toString(); |