StringBuffer sql = new StringBuffer(" SELECT col1, col2, col3, col4 ");
sql.append(" FROM table1 ");
sql.append(" WHERE col1 = 1 ");
머 위의같은 코드들... append()를 이용해서 계속 이어붙힐 수 있고 속도도 빠르지만 이 StringBuffer객체를 재사용해야할 때가 있다. sql2를 만들기는 좀 그러니까...
가장 쉽게 생각할 수 있는 건 null이다.
sql = null;
sql = new StringBuffer(" SELECT col1, col2, col3, col4 ");
null로 객체 없애버리고 다시 새로 생성하는 것이다. 일반적으로 초기에 가장 많이 쓰는 방식이지 싶다.
또 하나는 setLength(0)이다.
sql.setLength(0);
sql.append(" SELECT col1, col2, col3, col4 ");
StringBuffer객체는 그대로 놔두고 setLength함수를 이용해서 길이를 0으로 설정해서 기존에 가지고 있던 문자열을 날려보리고 append로 새로 이어붙히는 것이다.
성능테스트는 안해봤지만 크게 차이는 나지 않을것 같기는 하지만 그래도 객체를 새로 생성하는 것보다는 길이를 0으로 만드는 것이 좀더 빠르지 않을까 생각한다.
간단한 것들은 잘 안적었더니 이런게 더 잘 찾기 힘들단 말야 ㅎ
저는 buffer.delete(0, buffer.length());
를 사용했는데 어떤 차이점이 있는지 알아봐야 겠군요
항상 고맙게 배우고 갑니다 ^^*
버퍼를 지우는 방식도 있었군요. 처음 알았네요.
저도 내부동작을 좀 비교해 봐야겠네요.....
차이점 알게되시면 공유 좀 부탁드립니다. ^^
StringBuffer의 경우 저 역시도 SQL구문 시 정말 유용하다고 느끼는 부분인데, 포스팅 구경하다가 글을 보고 감히 댓글을 달아봅니다.
저는 setLength(0)를 자주 사용하고 있습니다.
그런데 곰곰히 생각해보니 null이나, length나 구현 중 일부는 결국 Buffer의 제거(비움)인 듯한데...흠 어떤 차이가 있을까 궁금하네요~
(setLength와 delete가 거의 동일한 듯 합니다만..)
OutSider님 많이 배우고 갑니다^^
쓴지 오래된 글이라 오랜만에 다시 읽어보았네요.
소스를 보기에서 null이나 setLength가 가독성이 더 좋지 않을까 합니다.(그냥 개인적인 생각으로요.)
사실 이런건 섣부른 판단이나 추측은 좋지 않기 때문에 소스돌려서 속도 비교해서 테스트해보고 생각과 다르면 내부구조 더 공부해보는게 최고인데 귀찮니즘에 그렇게까진 잘 안하게 되네요.
알게되면 공유해 주세요~ ^^
StringBuffer 는 내부함수들이 synchronized 로 되어있습니다. 멀티쓰레드 프로그램 이외에는 성능저하를 발생시키죠. 그래서 나온게 StringBuilder 입니다. 이것은 synchronized 안되어 있으므로 성능이 더 좋습니다. 대신 멀티쓰레드 프로그램에서 사용할때는 반드시 StringBuffer를 사용하시기 바랍니다.
비슷한 예로 HashTable/HashMap, Vector/ArrayList 가 있습니다.
요즘은 그냥 무의식(?)중에 빌더를 쓰고 있긴 한데... 그런 차이가 있었군요. 좋은 정보 감사합니다. ^^
StringBuffer 보니 기억나는 글이 있네요. 많은 분들이 막연하게 StringBuffer나 StringBuilder가 무조건 좋다고 하시는것 같은데 다른 관점의 글이 있어서 알려드립니다. 닷넷에서 사용하는 StringBuilder에 대한 조금 오래된 글인데 닷넷에서의 StringBuilder랑 Java에서의 StringBuffer 혹은 StringBuilder랑 사용하는 개념이 유사하기때문에 Java 쪽에서도 적용되는 이야기가 아닐까 생각해봅니다.
http://www.simpleisbest.net/archive/2005/05/16/147.aspx
http://www.simpleisbest.net/archive/2005/05/17/149.aspx
http://www.simpleisbest.net/archive/2005/05/18/150.aspx
제 글도 오래되긴 했는데 어쨌든 좋은 링크 감사합니다.
StringBuilder가 낫다는 주장은 프로그래밍에서 무조건이라는 건 없는 것같고 글자 한글자를 붙혀도 StringBuilder가 낫다고 얘기하는 것도 아니라고 생각합니다. 과거에는 대부분 + 로 concatenation을 했기 때문에 성능팁에서 언급하기 시작한듯 하며 내부를 이해하는 사람은 알아서 쓸것이고 그걸 구분할 수 없는 사람에게는 그냥 StringBuilder를 써!라고 해도 무리가 없는 수준이라고 생각합니다.
그리고 이제는(아마 Java 5부터인듯합니다.) +를 사용해도 컴파일러가 알아서 최적화 해주기 때문에 이제는 다시 StringBuilder를 쓰라고 하기 보다는 그냥 + 쓰라고 하고 있습니다.(물론 최적화 못하는 부분에 대해서는 주의해야 하지만요.)