- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- C언어
- 정렬
- sql
- 자바
- 컴퓨터공학과
- python
- 안드로이드 스튜디오
- 백준
- 파이썬
- android studio
- 안드로이드
- 연결리스트
- firebase google
- 구글 로그인
- 비주얼 베이직
- til
- C++
- 프로그래밍 입문
- 코딩테스트
- 프로그래머스
- 공유대학
- 동적할당
- oauth
- 자료구조
- 알고리즘
- Java
- 배열
- 로그인
- Firebase
코딩하는 해달이
[Java] String과 StringBuilder(+StringBuffer) 본문
자바를 공부하면서 String과 StringBuilder가 나뉘어있다는 것을 보았다.
`문자열을 자르거나 연결할 때는 + 나 split같은 좋은 메서드들이 많은데 왜 굳이 Builder가 존재할까?` 라는 생각이 들어서 찾아보니 세상에 필요 없는데 만들어진건 없더라.
알아본 바로는
자바에서 String객체는 변경 불가능하다. 그렇다면 우리가 +으로 추가하는건 어떻게 하는걸까?
내부적으로는 두 문자열을 합친 새로운 문자열이 생성되고 이전의 두 문자열은 자바의 가비지 컬렉터가 수집해간다. 따라서 메모리의 할당과 해제가 발생한다는것이다. 한 가지 두 가지의 적은 연산은 무리가 없겠지만 엄청나게 많은 연산이 발생할 때는 메모리를 많이 잡아 먹기 때문에 StringBuilder를 만들었다고 한다. 그럼 StringBuilder는 어떤식으로 동작하길래 문자열을 다루는데 더 효율적일까?
기본적으로 StringBuilder는 연산이 발생해서 객체의 공간이 부족한 경우 기존의 버퍼 크기를 늘려 유연하게 동작한다. 따라서 메모리의 추가할당만 받기때문에 연산의 양이 많아도 String 클래스에 비해 적은 메모리를 잡아먹는것이다. 하지만 동기화를 보장하지는 않기 때문에 단일 스레드에서 사용하는 것을 추천한다고 한다.
그럼 멀티 스레드에서는 어떤걸 사용해야하나.. 그래서 있는 것이 StringBuffer였다...! StringBuilder와 모든 메서드를 공유하고 동기화까지 보장하여 멀티 스레드 환경에서 안전하게 사용이 가능한...! 하지만 StringBuilder보다는 느리니까 각 환경에 맞게 잘 활용하면 되겠다.
'개인 공부 > Java' 카테고리의 다른 글
[Java/Kotlin] Lv2. 스파르타 자판기 (0) | 2024.08.07 |
---|---|
[Java] Java 톺아보기 (0) | 2024.08.06 |
[Java] 소켓 통신 구현하기 (0) | 2023.02.28 |