일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 하버드
- 안철수
- 구글
- gradle
- Eclipse
- 안드로이드
- java
- ActiveMovieControl
- 탐지기법
- c
- kotlin
- OOM
- build.gradle
- 자바
- Android
- Android 4.1
- git
- 악성코드
- KTS
- 리눅스
- 보안
- mime
- C++
- 노개북
- ActiveX
- 안드로이드 개발
- 개발
- 코틀린
- linux
- Today
- Total
꿈소년의 개발 이야기
String, StringBuilder, StringBuffer 본문
저는 가끔 String 관련 클래스가 많다는 생각을 합니다. 아마도 그 만큼 요구되는 바가 많다는 거겠죠.
최근에 코딩 테스트를 했는데 이거 왠걸...
String 계열 클래스는 좀 알아두는게 코딩할 때 좋을 것 같네요.
자, 무슨 차이가 있는지 궁금하기도 하고, 최근에 제가 작업하던 JSON 파싱 관련해서 에러가 난 원인이 바로 이 내용이였기에 공유 합니다.
String 과 스트링버퍼, 스트링 빌더는 큰 차이점이 있습니다.
String 은 한번 생성되면 불변입니다. 객체로서 생성되면 메모리 공간이 변하지 않습니다. 고정된 것이죠. 그렇기 때문에 문자열 처리 작업이 모두 새로 객체를 생성해서 하게 합니다. 그러니까 애초부터 그렇게 설계된 클래스인거죠.
반면에서 StringBuffer 나 StringBuilder 는 가변적입니다. String 과 다르게 동작합니다. 내부 공간이 버퍼이고 가변적으로 늘리면서 유연하게 동작합니다.
그래서 String 에 비해서 성능이 좋습니다.
하지만 StringBuffer 와 StringBuilder 는 큰 차이점이 있습니다. 동기화 문제이죠.
StringBuffer 는 각 메서드 별로 동기화 키워드가 붙어 있습니다.
반면에 StringBuilder 는 그렇지 않고요.
멀티 쓰레드 환경에서는 StringBuffer 를,
단일 쓰레드 환경에서는 StringBuilder 를 사용하는 것이 좋습니다.
메모리 공간 | 동기화 여부 | |
String |
불변 |
비동기 |
StringBuffer |
가변 |
동기 |
StringBuilder |
가변 |
비동기 |
'Software Engineering' 카테고리의 다른 글
Variable initialization (0) | 2017.10.19 |
---|---|
Get display size (0) | 2016.12.23 |
파일 위치 검색 명령어 2 (0) | 2016.04.15 |
리눅스 용량 확인 (0) | 2015.11.09 |
자바 변수형 (0) | 2014.09.26 |