문자열을 다루는 클래스

Reading time ~1 minute

자바에서 문자열을 다루는 클래스

String , StringBuilder, StringBuffer 차이

같은 점

모두 문자열을 다루고 append할 수 있다. StringBuffer, StringBuilder가 호출 할 수 있는 메소드는 모두 같다.

차이 점

성능 차이…. 극명하게 나뉨 String이 쓰레기

StringBuilderStringBuffer 랑의 차이점은 멀티 스레드일 때 안전성이다 버퍼는 스레드에 안전하게 설계되어 있고 빌더는 보장 못한다.

그래서 빌더를 쓰면 멀티 쓰레드에서 하나의 객체를 처리하면 문제가 발생할 수 있다.

그럼 왜?

String이 쓰래기이냐?

String a = "";
for( 많이많이 ) {
    a+="abc"
}

할때 a에 abc를 덧붙이는데 이때 새로운 Stirng 객체 만들어지고 이전에 a는 쓰레기가 돼서 GC 대상된다. 이걸 많이많이 반복하게돼…

계속계속 객체만들고 버리고 만들고 버리고 이러니까 메모리 다잡아 먹고 GC 계속 돌아서 속도 느려지고.

StringBuilder, StringBuffer 는?

예상한데로 얘네들은 새로운 객체를 생성하지 않아! 그래서 가지고 있던 객체를 재활용해서 그냥 더 크게 메모리잡고 문자열 저장하는 방식 매번 새롭게 생성하지 않으니까 메모리낭비 안하고 GC도 안돌고.

오..

java 5 이상에선 컴파일러 똑똑해져서 개발자가 String을 +로 문자열 만들면 알아서 버퍼나 빌더로 바꿔줌… 어.느.정.도

Dooray!

Dooray CalDav, IMAP 사용법 Continue reading

Vue.js

Published on February 10, 2018

Java_tuning5

Published on March 06, 2017