-
[Java]StringBuilder(Feat. StringBuffer)Android/Java 2023. 4. 20. 21:29반응형
[모든 포스팅은 개인적 공부를 위해 작성된 글입니다]
StringBuilder의 개념은 기존에도 알고 있었지만 자꾸 사용하는 것을 깜빡해서 잊지 않기 위한 취지에서 정리..<StringBuilder>
- 변할 수 있는 String
- String은 변할 수 없는 문자열로 String 변수의 값을 변경시키면 새로운 메모리 영역에 새로운 문자열 값이 저장되고 기존에 할당된 메모리 영역은 Garbage로 남아있다가 GC에 의해 처리됨(즉, 새로운 String 인스턴스가 생성된 것)
- 여기서 만약 해당 변수의 값 변경이 자주 일어난다면?
-> 사용하지 않는 할당된 메모리 영역이 늘어날 것이므로 매우 비효율적임
- 즉, String에서도 concat()이나 +를 통해 문자열을 연결할 수 있지만 이는 매우 비효율적!!
<StringBuilder 사용 방법>
StringBuilder sb = new StringBuilder(); sb.append("abc").append("def"); System.out.print(sb.toString());
- append() : 문자열 추가(연결/String 에서의 concat()에 해당)
- toString() : StringBuilder()에 저장된 문자열 출력하기 위해 사용
- reverse() : 문자열 뒤집기
*참고하면 좋을 메서드들*
<StringBuilder vs StringBuffer>
- 공통점 : 둘 다 변할 수 있는 문자열
- 차이점 : 동기화 유무(StringBuilder는 동기화 지원x StringBuffer는 동기화 지원)
*참고로 String도 동기화 지원*
- StringBuilder는 동기화 지원하지 않는만큼 단일스레드 환경에서는 StringBuilder를 사용하는 것이 StringBuffer보다 성능이 좋음
- 반대로 멀티스레드 환경에서는 StringBuffer를 사용하는 것이 성능면에서 우위에 있음
<결론>
- 문자열 변화가 잦고(문자열 연산이 많고) 단일스레드 환경이라면? : StringBuilder
- 문자열 변화가 잦고 멀티스레드 환경이라면? : StringBuffer
- 문자열 변화가 적고 멀티스레드 환경이라면? : String
반응형'Android > Java' 카테고리의 다른 글
[Java]ArrayList 대소문자 구분 없이 정렬 (0) 2023.05.09 [Java]HashSet과 HashMap (0) 2023.05.04 [Java]Stream, Filter (0) 2023.03.20 [Java]Map (0) 2023.03.20 [Java]Optional (0) 2023.03.20