학습 목표
- String을 사용하지 않는 이유
- StringBuffer와 StringBuilder의 차이점을 이해하자!
String과의 차이점
① 공통점
▷ String, StringBuilder, StringBuffer 모두 문자열을 저장하고 관리하는 클래스이다.
② 차이점 (String vs (StringBuffer, StringBuilder))
▶ String은 immutable(불변)하고 StringBuffer, StringBuilder는 mutable(가변)한다는 점입니다.
▷ String은 new 연산을 통해 생성되면, 그 인스턴스의 고정된 메모리 공간이 잡히게 됩니다. (즉, 할당된 메모리 공간은 변하지 않아 불변하다고 말을 합니다.)
[String을 쓰면 안되는 이유]
▷ 즉, 새로운 문자열이 만들어지면 기존의 문자열은 가비지 콜렉터에 의해 제거되야하는 단점이 있습니다.
▷ 또한, 이러한 문자열 연산이 많아질 때 계속해서 객체를 만드는 오버헤드가 발생하므로 성능이 떨어집니다. (내부적으로 char배열을 사용하기 때문에)
[String을 쓰면 좋은 경우]
▶ 문자열 연산이 적고, 조회가 많을 때, 멀티쓰레드 환경에서 사용하면 좋다. (immutable(불변) 성질 때문 멀티쓰레드 환경에서 안전합니다.)
[concat vs '+']
▷ '+' 연산을 통해 문자열을 접합하면, 컴파일러가 내부적으로 Stringbuilder로 치환하여 처리해줍니다.(치환된 이후에는 하나의 메모리 주소만을 사용하게 됩니다.) 하지만 컴파일러가 확실히 치환을 해주는지 여부는 알 수 없습니다.
▷ 'concat' 연산을 통해 문자열을 접합하면, 기존에 선언된 String 객체는 남아있으며, 새로운 new String을 만들어 접합을 해줍니다.
StringBuffer vs StringBuilder
① 공통점
▷ StringBuffer, StringBuilder는 mutable(가변)한다는 점입니다.
② 차이점
▶ StringBuffer는 멀티쓰레드 환경에서 synchronized 키워드가 가능하므로 thread-safe합니다.
▷ StringBuilder는 동기화를 고려하지 않기때문에, 싱글쓰레드 환경에서 StringBuffer에 비해 연산처리가 빠릅니다.
③ 참고
▷ 일반적으로 StringBuffer와 StringBuilder의 성능을 때졌을 때 2배의 속도차이가 있다고는 하지만 실제로는 그렇지 않습니다. 하지만 확실한 점은 String연산은 16만번이상 넘어가게 되면 10초이상 걸리면서 못 쓸정도의 성능을 보여준다는 점입니다.
'CS > 개발지식' 카테고리의 다른 글
[Mac] IntelliJ 단축키 (0) | 2018.07.07 |
---|---|
[JAVA] 인터페이스와 추상클래스 공통점, 차이점 (0) | 2018.06.07 |
[HTML] HTML5 과 HTML (2) | 2018.05.07 |