String 클래스, 문자열 수정 불가능(불변적 특징), 문자열 처리의 편의성 해결

CODEDRAGON Development/Java

반응형


 

String 클래스

·       문자열 객체

·       String 인스턴스에 저장된 문자열의 내용은 변경이 불가능합니다. 이는 동일한 문자열의 인스턴스를 하나만 생성하고 이를 공유해서 사용하기 위해서입니다.

·       + 연산자를 이용하여 연결된 새로운 문자열 객체를 생성합니다.

·       JAVA는 큰 따옴표(")로 묶여서 표현되는 문자열을 모두 인스턴스화 합니다.

·       문자열은 String 이라는 이름의 클래스로 표현됩니다

·       java.lang 패키지에 포함되어 있으며 String 클래스에는 문자열과 관련된 작업을 할 때 유용하게 사용할 수 있는 다양한 메소드가 포함되어 있습니다.

 

C vs Java 문자열

C언어에서는 문자열을 char형 배열로 표현하지만, 자바에서는 문자열을 위한 String이라는 클래스를 별도로 제공합니다.

C

Java

char[]

String

 

 

문자열 수정 불가능(불변적 특징)

·       문자열 가공시(변경시) 기존 문자열의 변경없이 새로운 문자열을 생성합니다.

·       문자열을 가공해야 되는 경우 문자열로 처리하는 것은 비효율적입니다. 아래와 같이 쓰레기 객체를 양산하게 되어 메모리 효율을 떨어트리게 됩니다.

·       String의 불변적 특성으로 문자 가공시 String을 쓰지 않고 StringBuffer클래스를 사용하여 문자열을 수정/변경 작업을 하게 됩니다.

·       StringBuffer로 수정/변경을 완료한 후 최종적인 문자열을 String으로 저장합니다.

 

 

String str = "";

//"" 생성

str += str + "여름";

//"봄여름" 새로 생기고 "" 쓰레기 객체가 됩니다

str += str + "가을";

//"봄여름가을" 새로 생기고 "봄여름" 쓰레기 객체가 됩니다.

str += str + "겨울";

//"봄여름가을겨울" 새로 생기고 "봄여름가을" 쓰레기 객체가 됩니다

 

 

 

 

문자열 처리의 편의성 해결

·       문자열 사용시 인스턴스의 생성 수를 줄이기 위해

·       문자열 정의 후 변경이 불가능하게하여

·       동일한 문자열은 참조값을 통해 동일한 인스턴스를 공유할 수 있게 하였습니다.

String str1 = "계절"; //인스턴스 생성

String str2 = "계절"; //str1 인스턴스의 참조값을 str2 저장

 

·       str1 str2에는 동일한 "계절"에 대한 참조값으로 동일한 인스턴스를 참조하게 됩니다.

·       그래서 변경불가합니다, 하나의 인스턴스를 두개의 참조변수가 참조하는 경우 문자열 변경이 불가능함으로 동일한 결과를 출력할 수 있게 됩니다.