이제까지 내가 사용하지 않았던
자바의 BufferedReader와 StringBuilder, StringTokenizer 그리고 BufferedWriter에 대해
공부한다.
여기서는 StringBuilder
StringBuilder
StringBuilder는 자바 원문에 따르면
변경 가능한 문자 시퀀스입니다. 이 클래스는 StringBuffer와 호환되는 API를 제공 하지만 동기화를 보장하지는 않습니다. StringBuffer이 클래스는 단일 스레드에서 문자열 버퍼를 사용하던 곳(일반적으로)에 대한 드롭인 교체로 사용하도록 설계되었습니다 . StringBuffer가능한 경우 대부분의 구현에서 이 클래스가 더 빠르기 때문에 이 클래스를 우선적으로 사용하는 것이 좋습니다 .
https://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html
원문에서는 간단하게 변경가능한 문자 시퀀스라고 작성되어있다.
즉 String 문자열과 비슷하다는 이야기인데
String과의 비교를 위해서는
먼저 평소에 자주 사용하던 String에 대해 알아볼 필요가 있다.
String
자바 원문에 따르면
클래스 는 String문자열을 나타냅니다. Java와 같은 프로그램의 모든 문자열 리터럴 "abc"은 이 클래스의 인스턴스로 구현됩니다. 문자열은 일정합니다. 값을 만든 후에는 변경할 수 없습니다. 문자열 버퍼는 변경 가능한 문자열을 지원합니다. String 객체는 변경할 수 없으므로 공유할 수 있습니다.
https://docs.oracle.com/javase/7/docs/api/java/lang/String.html
String은 변경할 수 없는 객체라고 나와있다.
풀어서 설명해보자면 문자열 A와 문자열 B를 만들고 더했을때
문자열 A와 B가 그대로 붙는 것이 아닌 문자열의 내용이 더해진
새로운 문자열C가 생성된다는 의미이다.
여기서 새로운 문자열을 만들면서 메모리를 쓸데없이 낭비하기 때문에
이를 개선한 것이 StringBuilder와 StringBuffer인 것이다.
때문에 String대신 StringBuilder를 사용하려는 것이다.
다시 본론으로 돌아와서
개선하여 나온것 StringBuilder와 StringBuffer를
위 자바 본문에서 비교하여 설명해 주었다.
설명에 따르면 StringBuffer는 단일스레드에서 문자열 버퍼를 사용한후
드롭해서 교체하는 식으로 멀티스레드를 사용가능하게 만들어준다고 되어있다.
즉 동기화가 가능하여 멀티스레드에서 안전하게 사용가능하다는 뜻이다.
그러나 단일스레드에서는 StringBuilder가 빠르기 때문에
대부분의 구현에서는 우선적으로
StringBuilder를 사용하는 것을 추천하고 있다.
(버퍼와 스레드 그리고 동기화에 대해서는 아래 글 참조)
https://parkrc1201log.tistory.com/2
StringBuilder 간단 정리 끝
잘못된 정보 말씀해주시면 수정합니다. 읽어주셔서 감사합니다.
'자바 공부' 카테고리의 다른 글
java main 메서드 (2) | 2024.10.16 |
---|---|
StringTokenizer 정리 (0) | 2022.10.05 |
BufferedReader 정리 (0) | 2022.09.28 |