점점 프로그래밍 교육이 단일화 되고 실무화되면서

많은 개발자들이 기본에 충실하지 않고 고급 기술로 넘어가는 경향이 많다. 

그중에 하나가 메모리관리에 대한 측면이다.

메모리에 대한 기초지식이 없이 고급기술을 배우게 되면 오히려 독이 될수있다.

큰예로 String 과 StringBuffer 에 대한 상식이다..

일반적으로 String으로 인한 변수 선언은 같은 문자일이 경우 최초에만 변수를 생성하고

일반 리터럴 처럼 이후의 문자열은 기존 인스턴트를 참조한다 .

물론 new String 으로 인스턴스를 생성하면 이야기는 달라지지만 말이다. 


그리고 문자열을 더할때마다 즉 String tmp1 = "aa";
String tmp2 = "bb";
String tmp3 = tmp1 + tmp2; 
이런식으로 더할 때 마다 인스턴스를 생성하게 된다.

물론 자바의 버전이 올라가면서 String 의 연산도 일정한 알고리즘에 의하여 StringBuilder

를 통해 연산되어 문제가 많이 사라졌지만..

그래도 많은 메모리를 차지하게되어 반복문이나 호출이 빈번한 곳에서의 문자열의

연산은 StringBuffer 를 통한 append 방식으로 하여 단일 인스턴스로 관리한다..



이 사실은 인지하는 사람들이 저지르는 실수가있다.

바로 같은 패턴의 문자열의 연산 또한 StringBuffer 를 통해 한다는것이다.

반복문안에서의  StringBuffer 의 생성은 String과 별반 다를것이 없다 .

아니 오히려 String 같은 패턴의 문자열일 경우 이미 생성된 인스턴스를 참조하기 때문에

계속 인스턴스를 생성하는 StringBuffer 에 비해 월등히 빠르다. (stopwatch를 통해 직접 실험했다).

꼭 반복문이라도 한번 참조한 적이 있는 문자열은 

적지 않은 연산이 일어나더라도 StringBuffer 보다는 일반 String 사용하는것이 

정신건강에도 성능에도 좋다.