-
[자바기초] String, StringBuffer, String Builder 정리노트º Language º/Java 2023. 3. 29. 22:25
* String
- immutable (불변함) , 변하지 않는 문자열
- String은 한번 생성이 되면 할당된 메모리 공간이 변하지 않는 문자열입니다.
- String은 주소 값이 stack 메모리 영역에 쌓이고, 클래스들은 Heap 메모리 영역에 생성됩니다.
그렇기에 새로운 값을 할당할 때마다 새로운 객체를 만들어 문자열을 저장하고 그 객체를 참조합니다.
- 가비지가 쌓이기에 문자열 연산이 많을 경우 성능이 좋지 않습니다.
String str = "hello"; str += " world"; 출력 값 : hello world
> 예시의 코드 처럼 문자가 자연스럽게 합쳐진 것처럼 보이지만 사실은 새로운 객체가 생성되어 'hello world'를 만든 것입니다. 그렇기에 기존에 있던 String의 'hello' 값은 쓰레기가 되어버립니다.
그렇기 때문에 추가, 수정이 많이 필요할 때에는 StringBuffer 혹은 StringBuilder를 사용합니다.
* StringBuffer
- mutable (변함) , 변하는 문자열
- 내부 Buffer에 저장이 되기 때문에 한 메모리에서 추가, 수정, 삭제가 가능합니다.
- 메모리에 append 하는 방식으로 클래스 객체를 직접 생성하지 않습니다. (가비지가 쌓이지 않음)
- 멀티 쓰레드 환경에서 동기화(Syschronized)를 지원하여 활용합니다.
+ toString
- StringBuffer를 다시 String으로 바꿀 때 toString을 사용합니다.
왜 바꿔야 할까요?
변하는 문자열 처리에는 Stringbuffer가 적합합니다.
그러나 대부분의 문자열을 매개변수로 받는 메소드는 String으로 되어있어요.
Stringbuffer에서 바로 호출할 수 없고, toString 메소드를 이용하여 String으로 변환 후 호출 해야 합니다.
* StringBuilder
- mutable (변함)
- 내부 Buffer에 저장이 되기 문에 한 메모리에서 추가, 수정, 삭제가 가능합니다.
- 메모리에 append 하는 방식으로 클래스를 직접 생성하지 않습니다. (가비지가 쌓이지 않음)
- StringBuilder는 싱글(단일) 쓰레드 환경에서 사용합니다.
- 동기화를 보장하지 않습니다.
+ StringToken
- 공백을 기준으로 단어 단어들을 추출해냅니다. 각 단어들은 토큰이라고 불립니다.
StringTokenizer st = new StringTokenizer("this is a test"); while (st.hasMoreTokens()) { System.out.println(st.nextToken()); }
> 위 코드는 StringToken의 기본형입니다.
StringTokenizer은 Split과 같이 단어를 어떠한 기준으로 분리하여 추출하는 것을 말합니다.
- hasMoreToken : 가져올 데이터 요소를 확인하는 메소드
- nextToken : 데이터를 가져와 입력하기 위한 메소드
'º Language º > Java' 카테고리의 다른 글
[자바기초] 날짜 클래스 GregorianCalender 정리노트 (0) 2023.04.01 [자바기초] 컬렉션 프레임워크의 종류 (3가지), 제네릭 정리노트 (0) 2023.03.29 [자바기초] 객체지향 프로그래밍 특징(다형성) 정리노트 (0) 2023.03.25 [자바기초] 객체지향 프로그래밍 특징(상속성) 정리노트 (0) 2023.03.23 [자바기초] 객체지향 프로그래밍 정의 및 특징(은닉성) 정리노트 (0) 2023.03.20