Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 자바
- 깃허브
- pom.xml
- @transactional
- 빈
- 스프링 컨테이너
- 상속
- DI
- 자동주입
- 영속성 컨텍스트
- Spring legacy Project
- 이클립스
- Spring 개발환경 설정
- 객체
- 리액트
- 의존성주입
- list
- springboot
- react
- github
- JVM
- 어노테이션
- 스프링
- spring
- 인터페이스
- mysql
- merge
- 트랜잭션
- @Bean
- java
Archives
- Today
- Total
DEVLOG
[Java] String / StringBuffer / StringBuilder 본문
String과 StringBuffer, StringBuilder는 변화 가능성으로 구분할 수 있다.
String은 불변성을 가지며, StringBuffer와 StringBuilder는 가변성을 가진다.
StringBuffer와 StringBuilder는 동기화의 유무로 구분할 수 있다.
StringBuffer는 동기화 키워드를 지원하며, StringBuilder는 지원하지 않는다.
각 클래스에 대해 자세히 알아보자.
String
String str = "Hello";
str = str + " world";
System.out.println(str); // Hello world
위 코드를 보면 String의 값이 변경된 것처럼 보이지만 결론부터 말하면 아니다.
문자열 수정 시점에 값이 할당되어 있던 메모리 영역은 Garbage로 남아있다가 GC(garbage collection, 가비지 컬렉션)에 의해 사라지고, 새 메모리 영역을 참조한다.
즉, 새로운 String 객체가 생성되는 것과 같다. 그러므로 자주 String 값이 변경될 경우 메모리에 치명적인 영향을 준다.
String은 왜 불변일까?
1. 메모리 절약 : 가장 많이 사용되는 데이터 타입이므로 Heap 메모리 절약을 위해 String pool애 저장하고, 같은 값이 pool에 저장되어 있을 경우, 새로 생성하지 않고 pool에서 가져다 쓴다.
2. 보안 : DB의 username, password 등 보안 관련 정보가 String 타입으로 다뤄지므로 불변성을 가져야 값이 변경되는 것을 예방할 수 있다.
3. thread-safe : 불변이므로 멀티스레드 환경에서 안전하다. 즉, 값의 변경 가능성이 없어서 동기화 문제를 걱정할 필요가 없다.
StringBuffer
StringBuffer sb = new StringBuffer("Hello");
sb.append(" world");
- .append() .delete() 등의 API를 이용하여 동일 객체내에서 문자열을 변경하는 것이 가능
- thread-safe : 동기화를 지원하므로 멀티쓰레드 환경에서 안전하다.
StringBuilder
- 동기화를 지원하지 않으므로 멀티스레드 환경에 적합하지 않지만, 단일 스레드에서 성능이 좋다.
요약하면 다음과 같다.
String : String 연산이 적을 때 적합
StringBuffer : String 연산이 많고, 멀티쓰레드 환경에 적합
StringBuilder : String 연산이 많고, 단일쓰레드 환경에 적합
Reference
https://ifuwanna.tistory.com/221
[Java] String, StringBuffer, StringBuilder 차이 및 장단점
Java 에서 문자열을 다루를 대표적인 클래스로 String , StringBuffer, StringBuilder 가 있습니다. 연산이 많지 않을때는 위에 나열된 어떤 클래스를 사용하더라도 이슈가 발생할 가능성은 거의 없습니다
ifuwanna.tistory.com
'Java' 카테고리의 다른 글
[Java] 빌더 패턴이란? (0) | 2022.11.16 |
---|---|
[Java] JRE와 JDK (0) | 2022.08.10 |
[Java] Compiler vs Interpreter (0) | 2022.08.10 |
[Java] 형변환 (0) | 2022.08.04 |
[Java] 유니코드 인코딩 (0) | 2022.08.04 |
Comments