JAVA에서 문자열을 다루는 대표적 클래스
- String : 문자열에 대한 연산이 적을 때, 멀티스레드 환경일 경우.
- String Buffer : 문자열 연산이 많고, 멀티쓰레드 환경일 경우.
- String Builder : 문자열 연산이 많고 단일쓰레드이거나 동기화를 고려하지 않아도 되는 경우.
1. String
- String은 '불변(immutable)'속성을 지님. 따라서, 문자열 수정 시점에 새로운 String 인스턴스가 생성.
String str = "hello"; //"hello" 메모리 주소 aaaa
str += " world"; //"hello world" 메모리 주소 bbbb(aaaa -> GC의 제거대상)
ㄴ 위의 예시에서 볼 수 있듯이 String 문자열의 연산을 진행할 경우 메모리의 값이 변경된 것이 아니라,
변경된 값을 새로운 메모리 영역에 저장하고, 기존의 값이 할당되어 있던 메모리 영역은 Garbage로 남아있다가
GC(garbage collection)에 의해 사라지게 되는것.
- 따라서, 문자열 추가, 수정, 삭제 등의 연산이 빈번하게 발생하는 알고리즘에 String 클래스를 사용하면, 힙(Heap)에
많은 임시 Garbage가 생성되어 메모리 부족으로 인한 애플리케이션 성능부족이 발생할 수 있음.
2. String buffer, String builder
- String buffer와 String builder은 '가변(muteable)'속성을 지님. 차이는 '동기화 유무'.
1) String buffer
- String buffer의 경우 동기화 키워드를 지원.
ㄴ 멀티스레드 환경에서 안정적.(String의 경우도 불변성을 가지기 때문에 멀티쓰레드 환경에서 안정적)
2) String builder
- String builder의 경우 동기화 키워드를 지원하지 않음.
ㄴ 대신, 단일스레드에서의 성능은 String buffer보다 뛰어남.
3) String builder과 String buffer의 API
(1) 변수명.toString() : String builder / String buffer을 String 자료형으로 변경.
(2) 변수명.append("추가할 문자열") : 기존 문자열 뒤에 추가할 문자열 추가.
(3) 변수명.insert(index, "추가할 문자열") : 기존 문자열의 index위치에 추가할 문자열 추가.
(4) 변수명.reverse() : 문자열 뒤집기.
(5) 변수명.delete(index A, index B) : index A부터 index B까지의 값을 삭제.
(6) 변수명.length() : 문자열 길이 확인.
(7) 변수명.replace(index A, index B, "수정할 문자열") : index A부터 index B까지의 값을 수정 문자열 값으로 변경.
'Web_Backend > Java' 카테고리의 다른 글
[JAVA] GC(Garbage collector, Garbage collection) (0) | 2023.06.15 |
---|---|
[JAVA] Stream API (0) | 2023.05.26 |
[초보 개발자의 도서 리뷰] "곁에 끼고 자주 찾아볼 자바 교보재" 코딩 개념 잡는 자바 코딩 문제집 (0) | 2022.12.02 |
[Java의 정석] 08 예외처리(Exception Handling) (0) | 2022.01.31 |
[Java의 정석] 07.06-07.08 객체지향 프로그래밍Ⅱ(3) - 추상클래스(abstract class), 인터페이스(interface), 내부클래스(inner class) (0) | 2022.01.13 |
야나의 코딩 일기장 :) #코딩블로그 #기술블로그 #코딩 #조금씩,꾸준히
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!