Contents
see List
점점 프로그래밍 교육이 단일화 되고 실무화되면서
많은 개발자들이 기본에 충실하지 않고 고급 기술로 넘어가는 경향이 많다.
그중에 하나가 메모리관리에 대한 측면이다.
메모리에 대한 기초지식이 없이 고급기술을 배우게 되면 오히려 독이 될수있다.
큰예로 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 사용하는것이
정신건강에도 성능에도 좋다.
Comments ( 0 )