문자열을 저장하는 String은 내부의 문자열을 수정할 수 없다. 예를 들어 String의 replace() 메소드는 내부의 문자를 대치하는 것이 아니라, 대치된 새로운 문자열을 리턴한다. String 객체를 + 연산할 경우에도 마찬가지다.
String data = "ABC";
data += "DEF";
String 객체는 내부 데이터를 수정할 수 없으므로 "ABC" 에 "DEF" 가 추가된 "ABCDEF" 라는 새로운 String 객체가 생성된다.
그리고 data 변수는 새로 생성된 String 객체를 참조하게 된다.
- 문자열을 결합하는 + 연산자를 많이 사용할수록 그만큼 String 객체의 수가 늘어나기 때문에 프로그램 성능을 느리게 하는 요인이 된다.
- 문자열을 변경하는 작업이 많을 경우에는 String 클래스를 사용하는 것보다는 java.lang 패키지의 StringBuffer 또는 StringBuilder 클래스를 사용하는 것이 좋다.
- 이 두 클래스는 내부 버퍼(데이터를 임시로 저장하는 메모리)에 문자열을 저장해 두고, 그 안에서 추가 수정 삭제 작업을 할 수 있도록 설계되어 있다.
- StringBuffer : 멀티 스레드 환경에서 사용할 수 있도록 동기화 적용되어 있음
- StringBuilder : 단일 스레드 환경에서만 사용하도록 설계되어 있음
// sb는 생성자로 주어민 매개값 "Java"를 버퍼의 초기값으로 저장한다.
StringBuilder sb = new StringBuilder("Java");
출처
신용권, 『이것이 자바다』, 한빛미디어(2015), p514
'Java' 카테고리의 다른 글
[Java] 제네릭 (0) | 2021.03.01 |
---|---|
상대방의 소스를 받았는데 한글이 깨지는 경우 (Encoding 깨짐 현상) (0) | 2021.02.20 |
[Java] StringTokenizer 사용법 (0) | 2021.01.29 |
[Java] BufferedInputStream 와 BufferedReader (0) | 2021.01.23 |
문자열 비교가 안되는 경우 해결 방법 (==, equals 이용) (0) | 2020.11.24 |